久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于PWM控制LED燈的程序,有幾個問題不懂

[復制鏈接]
跳轉到指定樓層
樓主
ID:321712 發表于 2018-5-3 22:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機小白,網上找的程序,有幾點問題不懂,希望大神解答:這段程序中a的值是多少,為什么最小亮度設置是1,最大是100,而總等級數是101,這應該怎么理解,不應該是100嗎。萬分感謝。
單片機源碼:
  1. #include <REG51.h>//51頭文件
  2. /****************************************************************/
  3. //定義亮度變化
  4. #define DY_PORT          P2    //設置LED連接的I/O組
  5. #define DY_PWM          101    //設置明亮的總級數(級數過大會出現閃爍)
  6. (值域:0~65535)
  7. #define DY_MAX          100    //設置最大亮度(值域:小于明亮總級數)
  8. #define DY_MIN      1     //設置最小亮度(值域:明亮大于等于1,小于最大亮度)
  9. sbit DY_KEY1 = P1 ^ 0;             //亮度加
  10. sbit DY_KEY2 = P1 ^ 1;             //亮度減

  11. /****************************************************************/
  12. // 1ms延時程序(12MHz 10倍于51單片機速度時)
  13. void delay (unsigned inta){
  14.       unsigned char i;
  15.       while( --a != 0){
  16.              for(i = 0; i < 12; i++);
  17.       }                                 
  18. }
  19. /****************************************************************/
  20. //顯示程序(50ms的PWM寬度)
  21. void display (unsignedint a){
  22.       DY_PORT = 0x00;                //LED小燈亮
  23.       delay (a);                                 //延時a的長度
  24.       DY_PORT = 0xff;                   //LED小燈滅
  25.       delay (DY_PWM-a);               //延時總PWM長度減a
  26. }

  27. /****************************************************************/
  28. //主程序
  29. void main (void){
  30.       unsigned int k=5;
  31.       while (1){
  32.              display(k); //
  33.              if(DY_KEY1 == 0){                            //如果按鍵按下則繼續
  34.                     delay(20);                                       //消抖延時20mS
  35.                     if(DY_KEY1 == 0){                     //如果按鍵按下則繼續
  36.                            k++;
  37.                            if(k>DY_MAX){
  38.                                   k = DY_MAX;
  39.                            }
  40.                            while(DY_KEY1 == 0);         //等待按鍵松開
  41.                     }
  42.              }
  43.              if(DY_KEY2 == 0){                            //如果按鍵按下則繼續
  44.                     delay(20);                                        //消抖延時20mS
  45.                     if(DY_KEY2 == 0){                     //如果按鍵按下則繼續
  46.                            k--;
  47.                            if(k<DY_MIN){
  48.                                   k = DY_MIN;
  49.                            }
  50.                            while(DY_KEY2 == 0);          //等待按鍵松開
  51.                     }
  52.              }
  53.     }
  54. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:228893 發表于 2018-5-4 08:59 | 只看該作者
這個和他的程序處理方式有關,      delay (DY_PWM-a); 是為了保證DY_PWM-a>0;你在仔細看看delay函數的寫法,參數的如果等于0會有問題。
回復

使用道具 舉報

板凳
ID:253758 發表于 2018-5-4 09:32 | 只看該作者
本帖最后由 余暉 于 2018-5-4 09:35 編輯

a為一個形參,你可以理解為一個參數,初始值由main中指令unsigned int k=5;得出k=5,由指令 display(k);將k傳遞給a;
回復

使用道具 舉報

地板
ID:253758 發表于 2018-5-4 09:33 | 只看該作者
由這條指令 display(k);將k值傳遞給a
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品91网站 | 午夜影院在线观看 | 99精品视频网 | 国产草草视频 | 欧美日韩高清 | 国产一区二区三区四区五区加勒比 | 欧美一级做性受免费大片免费 | 日韩国产一区二区三区 | www成人免费 | 免费国产视频在线观看 | 婷婷综合网 | 久久精品国产一区二区三区不卡 | 超碰导航| 国产成人午夜高潮毛片 | 俺去俺来也www色官网cms | 久久精品国产亚洲一区二区三区 | 亚洲一区高清 | 色视频在线观看 | 色爽女 | 国产日韩欧美在线观看 | 我要看一级片 | 成人久久视频 | 久久精品一级 | 欧美手机在线 | 在线免费观看黄色 | 九热在线| 亚洲人久久 | 欧美aⅴ| 久久精品女人天堂av | 一区二区免费 | 国产一区 | 91精品国产91久久久久久 | 91免费高清| 国产精品久久久久久久久久久新郎 | 国产欧美精品区一区二区三区 | 免费在线看黄视频 | 天天操天天天 | 91影片| 欧美久久久久 | 国产成人精品久久二区二区91 | 亚洲视频区|