新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > PWM控制LED台灯程序带红外遥控

PWM控制LED台灯程序带红外遥控

作者:时间:2012-10-31来源:网络收藏

;/*************************************************
;* 标题: 程序*
;* 文件: .asm *
;* 日期: 2008-12-18 *
;* 版本: 1.0*
;* 作者: *
;****************************************************
; 程序带有功能*
; 利用定时器控制产生占空比可变的PWM 波*
; 按K1,PWM 值增加,则占空比减小,LED 灯渐暗。*
; 按K2,PWM 值减小,则占空比增加,LED 灯渐亮。*
; 我的5644遥控器上的0~9数字键对应10个亮度等级。*
; 当PWM 值增加到最大值或减小到最小值时,蜂鸣器将报警*
; 资源:p1 口,数码管。p3.4,p3.5 亮度控制按键P3.0 PWM端口,p3.1 蜂鸣器报警*
;*********************************************************
LEVEL0EQU2FH;亮度等级9
LEVEL1EQU4FH;亮度等级8
LEVEL2EQU6FH;亮度等级7
LEVEL3EQU8FH;亮度等级6
LEVEL4EQU0AFH;亮度等级5
LEVEL5EQU0BFH;亮度等级4
LEVEL6EQU0CFH;亮度等级3
LEVEL7EQU0DFH;亮度等级2
LEVEL8EQU0EFH;亮度等级1
LEVEL9EQU0FFH;亮度等级0

PWM EQU 7FH ;PWM 赋初始值

LED_RAMEQU30H
IRCOM EQU 50H;50H-53H IR 使用
IR_NEWEQU 60H;新的遥控代码值用

LED_PORTEQUP1 ;数码管接口,共阴极
PWM_OUT EQU P3.0 ;输出接口
INCKEY EQU P3.5 ;K1,PWM 值增加键。
DECKEY EQU P3.4 ;K2,PWM 值减小键。
BEEP EQU P3.1 ;蜂鸣器
IRINEQU P3.2

;---------------------------
ORG 0000H
SJMP START
ORG 0003H
LJMP REMOT;IRF
ORG 000BH
SJMP INTT0
ORG 001BH
SJMP INTT1
ORG 0030H
;---------------------------
;主程序
;定时器0 工作在模式1,定时器1 工作在模式2。
;---------------------------

START:
MOV SP,#30H
MOV TMOD,#21H
MOV IP,#00001010B
MOV TH1,PWM ;脉宽调节
MOV TL1,#00H

MOV TH0,#0FEH ;1ms 延时常数0FC
MOV TL0,#0CH ;频率调节066

SETB EA;开总中断
SETB ET0 ;定时器0允许
SETB ET1 ;定时器1允许
SETB TR0 ;定时器0启动
SETB EX0;外中断0打开
SETB IT0;外中断0采用脉冲方式 ;
LOOP:
LCALL DISPLAY
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,#01H,PWMDEC ;是否到最小值?
CALL BEEP_BL ;是,蜂鸣器报警。
SJMP LOOP

PWMDEC: DEC PWM ;调节脉宽(脉宽增加)
LOOP2: SJMP LOOP

;-----------------------------
;T0 中断服务子程序(频率)
;控制定时器1 中断
;-----------------------------
INTT0:
CLR TR1
MOV TH0,#0FEH ;1ms 延时常数
MOV TL0,#0CH ;频率调节
MOV TH1,PWM
SETB TR1
CLR PWM_OUT ;启动输出
RETI

;-----------------------------
;T1 中断服务子程序(脉宽)
;控制PWM 脉冲宽度
;-----------------------------
INTT1:
CLR TR1 ;脉宽调节结束
SETB PWM_OUT ;结束输出
RETI

;-----------------------------
;************************有接收到遥控器信号*******
REMOT:
CLR EA
PUSH ACC
PUSH PSW
SETB PSW.3;选择工作寄存器组1(SETB PSW.3)
CLR PSW.4; (CLR PSW.4)
MOV R0,#IRCOM
I1: JNB IRIN,I2 ;等待IR 信号出现
JMP IR_SHOW1;I1;原值I1
I2: MOV R4,#20
I20: CALL DEL
DJNZ R4,I20
JB IRIN,IR_SHOW1;I1 ;确认IR 信号出现
I21: JB IRIN,I3 ;等IR 变为高电平
CALL DEL
JMP I21
I3: MOV R3,#0 ;8 位数清为0
LL:JNB IRIN,I4 ;等IR 变为低电平
CALL DEL
JMP LL
I4: JB IRIN,I5 ;等IR 变为高电平
CALL DEL
JMP I4
I5: MOV R2,#0 ;0.14ms 计数
L1: CALL DEL
JB IRIN, N1 ;等IR 变为高电平;IR=0,检查R2 中的计数值
MOV A,#8
CLR C
SUBB A,R2 ;判断高低位;IF C=0 BIT=0
MOV A,@R0
RRC A
MOV @R0,A ;处理完一位
INC R3
CJNE R3,#8,LL ;需处理完8 位
MOV R3,#0
INC R0
CJNE R0,#54H,LL ;收集到4 字节了
JMP IR_SHOW
N1: INC R2
CJNE R2,#30,L1 ;30--0.14ms 计数过长则时间到自动离开
JMP IR_SHOW1

红外遥控器相关文章:红外遥控器原理

pwm相关文章:pwm原理


蜂鸣器相关文章:蜂鸣器原理

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭