PWM控制LED灯渐亮渐灭汇编程序

2023-04-04 07:00   206   0  

;*******************************************************************


;* 演示程序 - PWM控制LED灯渐亮渐灭 *


;* 邮箱: mcuinfo@163.com *


;* 作者: keel *


;* 时间: 2005/11/30 *


;*【版权】Copyright(C)晶格电子 All Rights Reserved*


;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *


;*******************************************************************


; PWM 控制 LED 灯渐亮渐灭程序


; 晶振为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




登录icspec成功后,会自动跳转查看全文
博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。