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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3559|回復: 5
收起左側

學習燈 5亮度PWM調光燈 一個數碼管顯示檔位 單片機程序

  [復制鏈接]
ID:171111 發表于 2021-5-30 22:17 | 顯示全部樓層 |閱讀模式
前些天想做個PWM調光燈給大寶學習用 想著能在論壇里搜個現成的程序省點力氣 因為我也是個初學者 編代碼太費勁 結果沒找到合適的 無奈自己研究好幾天終于寫出來了 大神們別笑話我啊 哈哈 特意拿出來分享給大家 里面注釋很詳細 想要的拿去不用謝^_^
過兩天抽時間做出成品 到時再給大家分享圖片

單片機源程序如下:
  1. #include "reg52.h"

  2. sbit PWMOUT=P2^0;         //PWM輸出
  3. sbit Kjia=P3^0;             //按鍵 加
  4. sbit Kjian=P3^2;     //按鍵 減
  5. sbit K=P3^1;             //按鍵 開關機
  6. sbit ON_OFF=P2^7;    //開關機狀態指示燈

  7. sbit LSA=P2^2;                 //普中開發板定義右邊第一個數碼管
  8. sbit LSB=P2^3;
  9. sbit LSC=P2^4;

  10. bit kaiguan = 0;         //開關機狀態位
  11. unsigned int count=0,FLAG=0,stat;
  12. unsigned char cnt = 0;         // 檔位變量
  13. //延時函數
  14. void DELAY(unsigned int t)
  15. {
  16.         while(t--);
  17. }
  18. //定時器 T0 初始化
  19. void init_T0(void)
  20. {
  21.     EA=1;
  22.     ET0=1;
  23.     IP=0x02;
  24.         TMOD=0x01;
  25.     TL0=(65535-100)%256;
  26.     TH0=(65535-100)/256;
  27.     TR0=1;
  28. }
  29. //按鍵掃描
  30. void scan_key(void)
  31. {
  32.     if(K==0)
  33.     {
  34.         DELAY(10000);
  35.         if(K==0)
  36.         {
  37.                         kaiguan=~kaiguan;
  38.                         ON_OFF=~ON_OFF;
  39.                         if(ON_OFF==1)
  40.                         {        //開機動畫 HELLO
  41.                                 P0=0x76;                  //1  H
  42.                                 DELAY(50000);
  43.                                 P0=0x00;
  44.                                 DELAY(30000);
  45.                                 P0=0x79;                  //2  E
  46.                                 DELAY(50000);
  47.                                 P0=0x00;
  48.                                 DELAY(30000);          
  49.                                 P0=0x38;                  //3  L
  50.                                 DELAY(50000);
  51.                                 P0=0x00;
  52.                                 DELAY(30000);
  53.                                 P0=0x38;                  //4  L
  54.                                 DELAY(50000);
  55.                                 P0=0x00;
  56.                                 DELAY(30000);
  57.                                 P0=0x3f;                  //5  O
  58.                         }
  59.                         else
  60.                         {
  61.                                 P0=0x00;
  62.                         }
  63.                         while(!K);
  64.                 }
  65.     }
  66.         if(kaiguan==0)        // 關機
  67.         {
  68.                 cnt=0;
  69.                 TR0=0;
  70.         }
  71.         if(kaiguan==1) //開機
  72.         {
  73.                 if(Kjia==0)
  74.                 {
  75.                         DELAY(10000);
  76.                         if(Kjia==0)
  77.                         {
  78.                                 cnt=cnt+1;
  79.                                 if(cnt>=5)                //加到5后不變
  80.                                 {
  81.                                         cnt=5;
  82.                                 }
  83.                         }
  84.                 }
  85.                 if((Kjian==0)&&(cnt>1))
  86.                 {
  87.                         DELAY(10000);
  88.                         if(Kjian==0)
  89.                         {
  90.                                 cnt=cnt-1;                //減到1后不變
  91.                         }
  92.                 }                                                                                                                    
  93.         }
  94. // 檔位選擇
  95.         switch(cnt)
  96.         {
  97.                 case 0:
  98.                         TR0=0;PWMOUT=1;break;
  99.                 case 1:
  100.                         P0=0x06;TR0=1;FLAG=90;break;//FLAG = 90;亮度10%
  101.                 case 2:
  102.                         P0=0x5b;TR0=1;FLAG=70;break;
  103.                 case 3:
  104.                         P0=0x4f;TR0=1;FLAG=50;break;
  105.                 case 4:
  106.                         P0=0x66;TR0=1;FLAG=30;break;
  107.                 case 5:
  108.                         P0=0x6d;TR0=1;FLAG=10;break;//最亮
  109.         }                                  
  110. }
  111. //主函數
  112. void main()
  113. {
  114.         LSA=0;
  115.         LSB=0;
  116.         LSC=0;
  117.     init_T0();
  118.     PWMOUT=1;         //  開發板P2^0高電平 燈不亮 代表關機狀態 實際應用改成 0
  119.         ON_OFF = 0;         //  關機
  120.         P0=0x00;
  121.         cnt=0;         
  122.     while(1)
  123.     {
  124.         scan_key();
  125.     }
  126. }
  127. // 定時器T0 中斷函數
  128. void timer0() interrupt 1
  129. {
  130.     TL0=(65535-100)%256;
  131.     TH0=(65535-100)/256;      
  132.     if(count==FLAG)
  133.     {
  134.         PWMOUT=0;
  135.     }
  136.     count++;
  137.     if(count==100)
  138.     {   
  139.             count=0;
  140.         if(FLAG==0)
  141.         PWMOUT=0;
  142.         else
  143.         PWMOUT=1;
  144.     }
  145. }
復制代碼

以上代碼Keil工程51hei下載:
學習燈.rar (27.49 KB, 下載次數: 59)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:820198 發表于 2021-5-31 09:00 | 顯示全部樓層
坐等成品學習
回復

使用道具 舉報

ID:171111 發表于 2021-6-7 20:45 來自觸屏版 | 顯示全部樓層
燈還沒做 用這個程序給大寶做了個3檔調速小風扇 呵呵
回復

使用道具 舉報

ID:229641 發表于 2021-6-7 23:29 來自觸屏版 | 顯示全部樓層
xuwei517 發表于 2021-6-7 20:45
燈還沒做 用這個程序給大寶做了個3檔調速小風扇 呵呵

有電路圖嗎?
回復

使用道具 舉報

ID:939154 發表于 2021-6-25 15:00 | 顯示全部樓層
有原理圖嗎
回復

使用道具 舉報

ID:601544 發表于 2021-7-3 08:40 來自觸屏版 | 顯示全部樓層
不錯,能有原理圖就更好了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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