找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3437|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

學(xué)習(xí)燈 5亮度PWM調(diào)光燈 一個(gè)數(shù)碼管顯示檔位 單片機(jī)程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:171111 發(fā)表于 2021-5-30 22:17 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
前些天想做個(gè)PWM調(diào)光燈給大寶學(xué)習(xí)用 想著能在論壇里搜個(gè)現(xiàn)成的程序省點(diǎn)力氣 因?yàn)槲乙彩莻(gè)初學(xué)者 編代碼太費(fèi)勁 結(jié)果沒找到合適的 無奈自己研究好幾天終于寫出來了 大神們別笑話我啊 哈哈 特意拿出來分享給大家 里面注釋很詳細(xì) 想要的拿去不用謝^_^
過兩天抽時(shí)間做出成品 到時(shí)再給大家分享圖片

單片機(jī)源程序如下:
  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;             //按鍵 開關(guān)機(jī)
  6. sbit ON_OFF=P2^7;    //開關(guān)機(jī)狀態(tài)指示燈

  7. sbit LSA=P2^2;                 //普中開發(fā)板定義右邊第一個(gè)數(shù)碼管
  8. sbit LSB=P2^3;
  9. sbit LSC=P2^4;

  10. bit kaiguan = 0;         //開關(guān)機(jī)狀態(tài)位
  11. unsigned int count=0,FLAG=0,stat;
  12. unsigned char cnt = 0;         // 檔位變量
  13. //延時(shí)函數(shù)
  14. void DELAY(unsigned int t)
  15. {
  16.         while(t--);
  17. }
  18. //定時(shí)器 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.                         {        //開機(jī)動(dòng)畫 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)        // 關(guān)機(jī)
  67.         {
  68.                 cnt=0;
  69.                 TR0=0;
  70.         }
  71.         if(kaiguan==1) //開機(jī)
  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. //主函數(shù)
  112. void main()
  113. {
  114.         LSA=0;
  115.         LSB=0;
  116.         LSC=0;
  117.     init_T0();
  118.     PWMOUT=1;         //  開發(fā)板P2^0高電平 燈不亮 代表關(guān)機(jī)狀態(tài) 實(shí)際應(yīng)用改成 0
  119.         ON_OFF = 0;         //  關(guān)機(jī)
  120.         P0=0x00;
  121.         cnt=0;         
  122.     while(1)
  123.     {
  124.         scan_key();
  125.     }
  126. }
  127. // 定時(shí)器T0 中斷函數(shù)
  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. }
復(fù)制代碼

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

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

6#
ID:601544 發(fā)表于 2021-7-3 08:40 來自手機(jī) | 只看該作者
不錯(cuò),能有原理圖就更好了
回復(fù)

使用道具 舉報(bào)

5#
ID:939154 發(fā)表于 2021-6-25 15:00 | 只看該作者
有原理圖嗎
回復(fù)

使用道具 舉報(bào)

地板
ID:229641 發(fā)表于 2021-6-7 23:29 來自手機(jī) | 只看該作者
xuwei517 發(fā)表于 2021-6-7 20:45
燈還沒做 用這個(gè)程序給大寶做了個(gè)3檔調(diào)速小風(fēng)扇 呵呵

有電路圖嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:171111 發(fā)表于 2021-6-7 20:45 來自手機(jī) | 只看該作者
燈還沒做 用這個(gè)程序給大寶做了個(gè)3檔調(diào)速小風(fēng)扇 呵呵
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:820198 發(fā)表于 2021-5-31 09:00 | 只看該作者
坐等成品學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表