📄 51+Ҧ
字号:
/***************************************************************************
标题: NEC红外线接收解码程序
效果: 运行程序,按遥控器按键,在数码管上显示相应的地址码-控制码(以16进制显示)用点隔开,
本店网站 http://xxdpj.taobao.com/
以芯换心 竭诚为您服务 您学习单片机的好帮手
近期本店有很多优惠活动 有空就进来看看吧
http://xxdpj.taobao.com/
技术支持QQ:412150384
说明: 外部中断 1 本中断的响应是P33脚有下降沿触发,板子将此引脚引入红外IC数据脚,由红外IC来触发中断
红外IC接收NEC制编码波是:引导码1位,地址码8位加反码8位(或地址码16位),指令码8位加反码8位(或指令码16位),总共33位
******************************************************************************/
;脚功能定义
SMG_q EQU P1.0 ;定义数码管阳级控制脚,千位
SMG_b EQU P1.1 ;定义数码管阳级控制脚,百位
SMG_s EQU P1.2 ;定义数码管阳级控制脚,十位
SMG_g EQU P1.3 ;定义数码管阳级控制脚,个位
HWX EQU P3.3 ;红外接收数据引脚
JDQ EQU P1.4 ;继电器控制引脚
;----------------定义数据RAM空间-------------------------------
LY_FLAG BIT 20H ;
LHJHW1 EQU 30H ;使用4字节来接收NEC制地址码和控制码
LHJHW2 EQU 31H
LHJHW3 EQU 32H
LHJHW4 EQU 33H
ORG 0050H
TABLE: DB 0C0h,0F9H,0A4H,0b0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
;表:共阳数码管 0-9 A-F
ORG 0000H
LJMP MAIN
ORG 0013H ;中断1入口
LJMP INT
ORG 0100H
MAIN: CLR A
MOV LHJHW1,A ;
MOV LHJHW2,A
MOV LHJHW3,A
MOV LHJHW4,A
SETB EA ;首先开启总中断
SETB EX1 ;开启外部中断 1,即P33引脚
SETB IT1 ;设置成 下降沿触发方式
MOV TMOD,#0X10 ;定时器1的方式1,16位计数器,用来计数时间
M1: LCALL DISPLAY ;调用显示
JNB LY_FLAG,M1 ;接收成功位为1,则判断是否接收的按钮为00H,是则启动继电器
CLR LY_FLAG ;
MOV A,LHJHW3 ;
CJNE A,#0,M1 ;
MOV A,LHJHW4 ;
CJNE A,#0XFF,M1 ;
CPL JDQ ;
SJMP M1
INT: ;外中断子程序入口
;**************开始判断是否为NEC波形引导码的前9MS和后4.5MS******************************
MOV R0,#LHJHW1 ;接收准备存放的地数据址
MOV TL1,#0
MOV TH1,#0
SETB TR1 ;定时器以12M晶振12分频计数,即1us计数
JNB HWX,$ ;低电平开始
I03: JNB HWX,I1 ;高电平开始
LCALL DELAY ;
MOV A,TH1 ;
CJNE A,#57,I04 ;NEC引导码前13.5MS,计数约13500,TH1约等于52,给个误差值,用47-57之间来判断
SJMP IRET ;
I04: JNC IRET
SJMP I03 ;
I1: CLR TR1 ;
MOV A,TH1 ;
CJNE A,#47,I2 ;
SJMP IRET ;
I2: JC IRET ;
;***********开始接收四个字节内容**************************************
MOV R6,#4 ;四个字节数据
I3: MOV R5,#8 ;接收8位
I4: MOV TL1,#0
MOV TH1,#0
SETB TR1 ;
I10: JNB HWX,$ ;低电平开始,不对低电平进行处理
I12: MOV TL1,#0 ;低电平结束
MOV TH1,#0
I13: JNB HWX,I14 ;//高电平开始,
LCALL DELAY ;
MOV A,TH1 ;
CJNE A,#15,I3A ;超出位的最高电平时间则退出
SJMP IRET ;
I3A: JNC IRET
SJMP I13 ;
I14: CLR TR1 ;
MOV A,TH1 ;//高电平判断结束,保存数据,从高位移入低位
CJNE A,#5,I15 ;
I15: JNC I15A ;
CLR C ;
SJMP I16 ;
I15A: SETB C
I16: MOV A,@R0 ;
RRC A ;
MOV @R0,A ;
DJNZ R5,I4 ;
INC R0 ;
DJNZ R6,I3 ;
SETB LY_FLAG ;
IRET: RETI
;数码管显示子程序-------------------------------------
DISPLAY:MOV DPTR,#TABLE ;数码管显示子程序,16进制显示
MOV A,LHJHW1 ;
MOV B,#16
DIV AB
CLR SMG_q ;千位数码管
MOVC A,@A+DPTR ;
MOV P0,A
LCALL DELAY ;
MOV P0,#0FFH ;
SETB SMG_q ;
CLR SMG_b ;百位数码管
MOV A,B ;
MOVC A,@A+DPTR ;
ANL A,#0X7F ;加入小数点
MOV P0,A
LCALL DELAY ;
MOV P0,#0FFH ;
SETB SMG_b ;
MOV A,LHJHW3 ;
MOV B,#16
DIV AB
CLR SMG_s ;十位数码管
MOVC A,@A+DPTR ;
MOV P0,A
LCALL DELAY ;
MOV P0,#0FFH ;
SETB SMG_s ;
CLR SMG_g ;个位数码管
MOV A,B ;
MOVC A,@A+DPTR ;
MOV P0,A
LCALL DELAY ;
MOV P0,#0FFH ;
SETB SMG_g ;
RET
;短延时子程序,-----------------------------------------
DELAY: MOV R7,#10 ;延时子程序
DJNZ R7,$
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -