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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 14467|回復: 3
收起左側

51單片機led燈漸變PWM調光(漸亮漸滅)C語言和匯編源程序

[復制鏈接]
ID:400845 發表于 2018-9-21 09:12 | 顯示全部樓層 |閱讀模式
PWM控制led燈漸亮漸滅程序
適用ME500開發系統
短接JP41-2選用8個LED燈
PWM—PulseWidthModulation(脈沖寬度調制)
PWM足?種周期?走而高低電平的rV空比可以調制的方波信兮.
按K2—下,PWM值減小,則占空比增加。
兗度逐漸增加,直到8個LED燈達到高亮,蜂鳴器響。
按K1—下,PWM值增加,則占空比減小。
立度逐漸減弱,直到8個LED燈達到最峭,蜂鳴器響。

單片機匯編語言源程序如下:
  1. ; PWM 控制 LED 燈漸亮漸滅程序
  2. ; 適用 ME500 開發系統
  3. ; 晶振為11.0592M
  4. ; 利用定時器控制產生占空比可變的 PWM 波
  5. ; 按K1,PWM值增加,則占空比減小,LED 燈漸暗。
  6. ; 按K2,PWM值減小,則占空比增加,LED 燈漸亮。
  7. ; 當PWM值增加到最大值或減小到最小值時,蜂鳴器將報警。

  8. ;----------------------------
  9.          PWM   EQU  7FH            ;PWM賦初始值
  10.          OUT   EQU  P0             ;8個LED燈的接口

  11.          INCKEY EQU  P1.4          ;K1,PWM值增加鍵。
  12.          DECKEY EQU  P1.5          ;K2,PWM值減小鍵。

  13.          BEEP   EQU  P3.7
  14. ;----------------------------
  15.          ORG   0000H
  16.          SJMP  START
  17.          ORG   000BH
  18.          SJMP  INTT0
  19.          ORG   001BH
  20.          SJMP  INTT1
  21.          ORG   0030H
  22. ;----------------------------
  23. ;主程序
  24. ;定時器0工作在模式1,定時器1工作在模式2。
  25. ;----------------------------
  26. START:
  27.           MOV  SP,#30H
  28.           MOV TMOD,#21H
  29.           MOV TH1,PWM              ;脈寬調節
  30.           MOV TL1,#00H
  31.           MOV TH0,#0FCH             ;1ms延時常數
  32.           MOV TL0,#066H             ;頻率調節
  33.           SETB EA
  34.           SETB ET0
  35.           SETB ET1
  36.           SETB TR0

  37. LOOP:     MOV A,PWM                ;
  38.           JB INCKEY,LOOP1          ;增加鍵是否按下?
  39.           CALL DELAY               ;延時去抖動
  40.           JB INCKEY,LOOP1
  41.           CJNE A,#0FFH,PWMINC      ;是否到最大值?
  42.           CALL  BEEP_BL            ;是,蜂鳴器報警。
  43.           SJMP LOOP
  44. PWMINC:
  45.           INC PWM                  ;調節脈寬(脈寬減。
  46.           SJMP LOOP

  47. LOOP1:    JB DECKEY,LOOP2          ;減小鍵是否按下?
  48.           CALL DELAY               ;延時去抖動
  49.           JB DECKEY,LOOP2
  50.           CJNE A,#02H,PWMDEC       ;是否到最小值?
  51.           CALL  BEEP_BL            ;是,蜂鳴器報警。
  52.           SJMP LOOP
  53. PWMDEC:
  54.           DEC PWM                  ;調節脈寬(脈寬增加)
  55. LOOP2:    SJMP LOOP

  56. ;------------------------------
  57. ;T0中斷服務子程序   (頻率)
  58. ;控制定時器1中斷
  59. ;------------------------------
  60. INTT0:
  61.           CLR  TR1
  62.           MOV TH0,#0FCH             ;1ms延時常數
  63.           MOV TL0,#066H              ;頻率調節
  64.           MOV  TH1,PWM
  65.           SETB TR1
  66.           MOV  OUT,#00H             ;啟動輸出
  67.           RETI
  68. ;------------------------------
  69. ;T1中斷服務子程序      (脈寬)
  70. ;控制PWM脈沖寬度
  71. ;------------------------------
  72. INTT1:
  73.           CLR  TR1         ;脈寬調節結束
  74.           MOV  OUT,#0FFH   ;結束輸出
  75.           RETI
  76. ;------------------------------
  77. ;10ms延時子程序
  78. ;------------------------------
  79. DELAY:
  80.           MOV R6,#50
  81. DELAY1:
  82.           MOV R7,#100
  83.           DJNZ R7,$
  84.           DJNZ R6,DELAY1
  85.           RET
  86. ;-----------------------------------------------
  87. ;蜂鳴器響一聲子程序
  88. ;-----------------------------------------------
  89. BEEP_BL:
  90.            MOV   R6,#100
  91.   BL1:     CALL  BL2
  92.            CPL   BEEP
  93.            DJNZ  R6,BL1
  94.            MOV   R5,#25
  95.            CALL  DELAY2
  96.            RET

  97.   BL2:     MOV   R7,#180
  98.   BL3:     NOP
  99.            DJNZ  R7,BL3
  100.            RET
  101. DELAY2:                    ;延時R5×10MS
  102.            MOV   R6,#50
  103.   BL4:     MOV   R7,#100
  104.   BL5:     DJNZ  R7,BL5
  105.            DJNZ  R6,BL4
  106.            DJNZ  R5,DELAY2
  107.            RET
  108. ;---------------------------------------------------
  109.            END
復制代碼


C語言版本:
  1. /*********************************************************/

  2. #include<reg51.h>
  3. #include<intrins.h>
  4. unsigned int PWM=0xff70 ;   //賦初值
  5. void delayms(unsigned char ms);
  6. void delay(unsigned char t);
  7. sbit k1=P3^0;
  8. sbit k2=P1^0;
  9. sbit k3=P1^1;
  10. /*********************************************************/
  11. void main()
  12. {   
  13.     int a,b;
  14.     int temp;
  15.     temp=a^b;
  16.     TMOD=0x11 ;
  17.         TH0=0xfe ;           //1ms延時常數
  18.     TL0=0xcd ;           //頻率調節
  19.     TH1=PWM/256 ;            //脈寬調節
  20.     TL1=PWM%256 ;
  21.         EA=1;
  22.         ET0=1;
  23.         ET1=1;
  24.     TR0=1 ;
  25.     while(1)
  26.      {
  27.             if(k2==0)
  28.                   {
  29.                      PWM=PWM+0x01;
  30.                          while(k2==0);
  31.                    }
  32.              if(k3==0)
  33.                  {
  34.                    PWM=PWM-0x01;
  35.                    while(k3==0);
  36.          }
  37.       }
  38. }

  39. /*********************************************************/
  40. // 定時器0中斷服務程序  (頻率)
  41. /*********************************************************/
  42. void timer0() interrupt 1
  43. {  
  44.     TR1=0 ;
  45.     TH0=0xfe;
  46.     TL0=0xcd ;
  47.         TR0=0 ;
  48.     TH1=PWM/256 ;            //脈寬調節
  49.     TL1=PWM%256 ;
  50.     TR1=1 ;
  51.         TR0=1 ;
  52.     k1=0;      //啟動輸出
  53. }

  54. /*********************************************************/
  55. // 定時器1中斷服務程序 (脈寬)
  56. /*********************************************************/
  57. void timer1() interrupt 3
  58. {
  59.     TR1=0 ;
  60.     k1=1;     //結束輸出

  61. }

  62. /*********************************************************/
  63. //蜂鳴器子程序
  64. /*********************************************************/

  65. /*void Beep()     
  66.   {
  67.     unsigned char i  ;
  68.     for (i=0  ;i<100  ;i++)
  69.       {
  70.         delay(100)  ;
  71.         BEEP=!BEEP  ;                //Beep取反
  72.       }
  73.     BEEP=1  ;                        //關閉蜂鳴器
  74.         delayms(100);
  75.   }

  76. /*********************************************************/
  77. // 延時子程序
  78. /*********************************************************/  
  79. void delay(unsigned char t)
  80. {
  81.    unsigned char i;
  82.    while(t--)
  83.      {
  84.        for(i=0;i<10;i++)
  85.             {
  86.               delayms(100);
  87.             }
  88.         }
  89. }

  90. ……………………

  91. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


0.png
所有資料51hei提供下載:
LED 漸亮漸滅.zip (475.07 KB, 下載次數: 206)


回復

使用道具 舉報

ID:469585 發表于 2019-6-28 14:32 | 顯示全部樓層
感謝樓主分享
回復

使用道具 舉報

ID:625977 發表于 2019-10-18 08:37 | 顯示全部樓層
謝謝分享。
回復

使用道具 舉報

ID:139005 發表于 2020-3-23 23:15 | 顯示全部樓層
感謝樓主分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人免费一区二区三区牛牛 | 精品国产伦一区二区三区观看说明 | 久久久久久国产精品三区 | 国产在线精品免费 | 日韩伦理一区二区三区 | 99爱国产 | av一区二区在线观看 | www.日日操| 开操网| 成人亚洲精品 | 欧美日韩手机在线观看 | 国产精品日韩在线观看一区二区 | 国产我和子的乱视频网站 | 色就是色欧美 | 免费观看黄色片视频 | 久久久久久久久久久久久91 | 国产日韩久久 | 亚洲成人av | www.狠狠操| 国产精品视频二区三区 | 宅女噜噜66国产精品观看免费 | 欧美8一10sex性hd| 国产成人精品区一区二区不卡 | 91精品国产91久久久久久丝袜 | 久久久久一区二区三区 | 99精品一区二区 | 91精品国产综合久久国产大片 | 国产成人av在线播放 | 久久av一区二区三区 | 国产综合视频 | 在线观看日本网站 | 美国av毛片 | 日韩精品免费看 | 少妇久久久久 | 久久成人一区二区三区 | 一级毛片视频免费观看 | 亚洲久久一区 | 国产亚洲一区二区精品 | 国产欧美精品一区二区三区 | 欧美成人猛片aaaaaaa | 青青草免费在线视频 |