PWM控制led灯渐亮渐灭程序
适用ME500开发系统
短接JP41-2选用8个LED灯
PWM—PulseWidthModulation(脉冲宽度调制)
PWM足?种周期?走而高低电平的rV空比可以调制的方波信兮.
按K2—下,PWM值减小,则占空比增加。
兗度逐渐增加,直到8个LED灯达到高亮,蜂鸣器响。
按K1—下,PWM值增加,则占空比减小。
立度逐渐减弱,直到8个LED灯达到最峭,蜂鸣器响。
单片机汇编语言源程序如下:
- ; PWM 控制 LED 灯渐亮渐灭程序
- ; 适用 ME500 开发系统
- ; 晶振为11.0592M
- ; 利用定时器控制产生占空比可变的 PWM 波
- ; 按K1,PWM值增加,则占空比减小,LED 灯渐暗。
- ; 按K2,PWM值减小,则占空比增加,LED 灯渐亮。
- ; 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。
- ;----------------------------
- PWM EQU 7FH ;PWM赋初始值
- OUT EQU P0 ;8个LED灯的接口
- INCKEY EQU P1.4 ;K1,PWM值增加键。
- DECKEY EQU P1.5 ;K2,PWM值减小键。
- BEEP EQU P3.7
- ;----------------------------
- ORG 0000H
- SJMP START
- ORG 000BH
- SJMP INTT0
- ORG 001BH
- SJMP INTT1
- ORG 0030H
- ;----------------------------
- ;主程序
- ;定时器0工作在模式1,定时器1工作在模式2。
- ;----------------------------
- START:
- MOV SP,#30H
- MOV TMOD,#21H
- MOV TH1,PWM ;脉宽调节
- MOV TL1,#00H
- MOV TH0,#0FCH ;1ms延时常数
- MOV TL0,#066H ;频率调节
- SETB EA
- SETB ET0
- SETB ET1
- SETB TR0
- LOOP: MOV A,PWM ;
- JB INCKEY,LOOP1 ;增加键是否按下?
- CALL DELAY ;延时去抖动
- JB INCKEY,LOOP1
- CJNE A,#0FFH,PWMINC ;是否到最大值?
- CALL BEEP_BL ;是,蜂鸣器报警。
- SJMP LOOP
- PWMINC:
- INC PWM ;调节脉宽(脉宽减小)
- SJMP LOOP
- LOOP1: JB DECKEY,LOOP2 ;减小键是否按下?
- CALL DELAY ;延时去抖动
- JB DECKEY,LOOP2
- CJNE A,#02H,PWMDEC ;是否到最小值?
- CALL BEEP_BL ;是,蜂鸣器报警。
- SJMP LOOP
- PWMDEC:
- DEC PWM ;调节脉宽(脉宽增加)
- LOOP2: SJMP LOOP
- ;------------------------------
- ;T0中断服务子程序 (频率)
- ;控制定时器1中断
- ;------------------------------
- INTT0:
- CLR TR1
- MOV TH0,#0FCH ;1ms延时常数
- MOV TL0,#066H ;频率调节
- MOV TH1,PWM
- SETB TR1
- MOV OUT,#00H ;启动输出
- RETI
- ;------------------------------
- ;T1中断服务子程序 (脉宽)
- ;控制PWM脉冲宽度
- ;------------------------------
- INTT1:
- CLR TR1 ;脉宽调节结束
- MOV OUT,#0FFH ;结束输出
- RETI
- ;------------------------------
- ;10ms延时子程序
- ;------------------------------
- DELAY:
- MOV R6,#50
- DELAY1:
- MOV R7,#100
- DJNZ R7,$
- DJNZ R6,DELAY1
- RET
- ;-----------------------------------------------
- ;蜂鸣器响一声子程序
- ;-----------------------------------------------
- BEEP_BL:
- MOV R6,#100
- BL1: CALL BL2
- CPL BEEP
- DJNZ R6,BL1
- MOV R5,#25
- CALL DELAY2
- RET
- BL2: MOV R7,#180
- BL3: NOP
- DJNZ R7,BL3
- RET
- DELAY2: ;延时R5×10MS
- MOV R6,#50
- BL4: MOV R7,#100
- BL5: DJNZ R7,BL5
- DJNZ R6,BL4
- DJNZ R5,DELAY2
- RET
- ;---------------------------------------------------
- END
复制代码
C语言版本:
所有资料51hei提供下载:
LED 渐亮渐灭.zip
(475.07 KB, 下载次数: 206)
|