欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

       找回密碼
       立即注冊

      QQ登錄

      只需一步,快速開始

      搜索
      查看: 4049|回復: 4
      打印 上一主題 下一主題
      收起左側

      求大神講解單片機pwm調光實驗

      [復制鏈接]
      跳轉到指定樓層
      樓主
      ID:59839 發表于 2014-7-10 11:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
      #include "config.h"
      // 延時函數
      void delay(U32 dly)
      {
          U32 i;
          while(--dly > 0)
          {
              for(i=0;i++;i<1000000);
          }
      }
      #define TIMER0_RUN_HZ       10000          //每秒多少次進入定時器中斷
      #define T0RELOAD      (65536 - (Fpclk/TIMER0_RUN_HZ))
      // 定義一個易變型變量并初始化為0
      volatile U32 SYS_Time = 0;
      volatile U32 LED_PWM  = 0;
      void ISR_TIMER0(void) interrupt 1 using 1
      {
          // 重新裝載定時器值  
      TH0 = T0RELOAD / 256;
      TL0 = T0RELOAD % 256;
          // 以下添加用戶程序
          SYS_Time++;
          if(SYS_Time < LED_PWM) // PWM調光程序
          {
              P0 = 0;            // 點亮LED燈
          }else{
              P0 = 0xff;         // 關閉LED燈
          }
          if(SYS_Time > 100)SYS_Time = 0;
      }
      void TIMER0_Init(void)
      {
          TMOD &= 0xf0;
          TMOD |= 0x01;       // 16位計數器
      TH0 = T0RELOAD / 256;
      TL0 = T0RELOAD % 256;
      AUXR |= 0x80;       // 計數器0時鐘為Fosc,即1T
          PT0 = 1;            // 定時器0優先級控制位, 1 為高優先級 0 為低優先級
      ET0 = 1;            // 定時器0中斷使能
      TR0 = 1;            // 啟動定時器
          EA  = 1;            // 開總中斷
      }
      // 主程序入口函數
      void main(void)
      {
          U8  i;          // 循環用變量
          TR0 = 0;            // 暫時關閉定時器
          for(i = 0;i<3;i++)
          {
              P0 = 0;         // 八個燈全亮
              delay(50000);   // 延時一段時間
              P0 = 0xff;      // 八個燈全滅
              delay(20000);   // 延時一段時間
          }
          TR0 = 1;            // 啟動定時器
          while(1)
          {
              delay(5000);    // 延時一段時間
              P33 = 1;        // 釋放按鈕1輸出
              if(P33 == 0)    // 檢測按鈕1是否按下
              {
                  LED_PWM = 0;// 熄滅LED
              }
              P34 = 1;        // 釋放按鈕2輸出
              if(P34 == 0)    // 檢測按鈕2是否按下
              {
                  if(LED_PWM < 100)LED_PWM++;     // 調亮LED
              }
              P35 = 1;        // 釋放按鈕3輸出
              if(P35 == 0)    // 檢測按鈕3是否按下
              {
                  if(LED_PWM > 0)LED_PWM--;       // 調暗LED
              }
          }
      }
      這個程序里定時器、各個變量的作用以及它們之間的關系是怎么樣的,LED_PWM++;LED_PWM--; 與定時器的周期是什么關系?     
      分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
      收藏收藏 分享淘帖 頂 踩
      回復

      使用道具 舉報

      沙發
      ID:44262 發表于 2014-7-17 16:43 來自觸屏版 | 只看該作者
      其實這就是改變了脈沖寬度 ,相同頻率的方波如果脈沖寬度越寬的話 ,在單位時間內輸出了功率就越高 所以等也就會越亮
      回復

      使用道具 舉報

      板凳
      ID:59839 發表于 2014-7-21 09:17 | 只看該作者
      a110 發表于 2014-7-17 16:43
      其實這就是改變了脈沖寬度 ,相同頻率的方波如果脈沖寬度越寬的話 ,在單位時間內輸出了功率就越高 所以等 ...

      那這個程序里LED_PWM++;LED_PWM--;每加一次和每減一次的時間和定時器的周期有什么關系呢?
      回復

      使用道具 舉報

      地板
      ID:64203 發表于 2014-7-24 22:28 | 只看該作者
      加減是控制亮度,周期的大小決定亮度變化的精度
      回復

      使用道具 舉報

      5#
      ID:64273 發表于 2014-8-6 02:47 | 只看該作者
      回復

      使用道具 舉報

      您需要登錄后才可以回帖 登錄 | 立即注冊

      本版積分規則

      小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

      Powered by 單片機教程網

      快速回復 返回頂部 返回列表