多路红外遥控灯(5)

2019-03-22 17:52

LJMP INTT1 ;跳至INTT1中断服务程序 ORG 0023H ;串行口中断入口地址 RETI ;中断返回(不开中断) ORG 002BH ;定时器T2中断入口地址 RETI ;中断返回(不开中断) CLEARMEMIO: CLR A ;A清0 DEC A ;A为#0FFH CLEARMEM: START: MAIN: INTT1: KEYWORK: KEYOUT: MOV P0,A ; MOV P1,A ; MOV P2,A ; MOV P3,A ;

CLR P3.5 ;关遥控输出 MOV SP,#70H ;设堆栈基址为70H MOV IE,#00H ;关所有中断 MOV IP,#01H ;设优先级 MOV TMOD,#22H ;8位自动重装初值模式 MOV TH1,#0F3H ;定时为13微秒初值 MOV TL1,#0F3H ;

SETB EA ;开总中断允许 RET ;返回

LCALL CLEARMEMIO ;调用初始化子程序 LCALL KEYWORK ;主体程序。调用查键子程序 LJMP MAIN ;转MAIN循环 NOP ;PC值出错处理 NOP

LJMP START ;重新初始化 CPL P3.5 ;40KHZ红外遥控信号产生 RETI ;中断返回

MOV KEYY,#0FFH ;置列线输入状态 CLR KEYX0 ;行线(P1口)全置0 CLR KEYX1

MOV A,KEYY ;读入P0口值 MOV B,A ;KEYY口值暂存B中 CJNE A,#0FFH,KEYHIT ;不等于#0FFH,转KEYHIT RET ;没有键按下返回

20

KEYHIT: LCALL DL10MS ;延时去抖动 MOV A,KEYY ;再读入P0口值至A

CJNE A,B,KEYOUT ;A不等于B(是干扰) SETB

KEYX1 有键按下,找键号开始,查0行

MOV A,KEYY ;读入P0口值 CJNE A,#0FFH,KEYVAL0 ;P0口不等于#0FFH,按下键在0行 SETB KEYX0 ;不在0行,开始查1行 CLR KEYX1

MOV A,KEYY ;读入P0值 CJNE A,#0FFH,KEYVAL1 ;P0口不等于#0FFH,按下键在1行 LJMP KEYOUT ;不在第1行,子程序返回 KEYVAL0: MOV R2,#00H ;按下键在第0行,R2赋行号初值0 LJMP KEYVAL2 ;跳到KEYVAL2 KEYVAL1: MOV R2,#08H ;按下键在第1行,R2赋行号初值8 LJMP KEYVAL2 ;跳到KEYVAL2 KEYVAL2 MOV DPTR,#KEYVALTAB ;键值翻译成连续数字 MOV B,A ;P0口值暂存B内 CLR A ;清A MOV R0,A ;清R0

KEYVAL3 MOV A,R0 ;查列号开始,R0数据放入A SUBB A,#08H ;A中数减8

JNC KEYOUT ;借位C为0,查表出错,返回 MOV A,R0 ;查表次数小于8,继续查 MOVC A,@A+DPTR ;查列号表 INC R0 ;RO加1

CJNE A,B,KEYVAL3 ;查得值和P0口值不等,转KEYVAL3再查 DEC R0 ;查得和P0口值相等,R0减1 MOV A,R0 ;放入A(R0中数值即为列号值0 ADD A,R2 ;与行号初值相加成为键号值(0-15) MOV B,A ;键号乘3处理用于JMP散转指令 RL A ;键号乘3处理用于JMP散转指令 ADD A,B ;键号乘3处理用于JMP散转指令 MOV DPTR,#KEYFUNTAB ;取散转功能程序(表)首地址 JMP @A+DPTR ;散转至对应功能程序标号 KEYFUNTAB: LJMP KEYFUN00 ;跳到键号0对应功能程序标号

21

LJMP KEYFUN01 ;跳到键号1对应功能程序标号 LJMP KEYFUN02 ;跳到键号2对应功能程序标号 LJMP KEYFUN03 ;跳到键号3对应功能程序标号 LJMP KEYFUN04 ;跳到键号4对应功能程序标号 LJMP KEYFUN05 ;跳到键号5对应功能程序标号 LJMP KEYFUN06 ;跳到键号6对应功能程序标号 LJMP KEYFUN07 ;跳到键号7对应功能程序标号 KEYVALTAB: ;对应列号: KEYFUN00: KEYFUN01: KEYFUN02: KEYFUN03: KEYFUN04: KEYFUN05: LJMP KEYFUN08 ;跳到键号8对应功能程序标号 LJMP KEYFUN09 ;跳到键号9对应功能程序标号 LJMP KEYFUN10 ;跳到键号10对应功能程序标号 LJMP KEYFUN11 ;跳到键号11对应功能程序标号 LJMP KEYFUN12 ;跳到键号12对应功能程序标号 LJMP KEYFUN13 ;跳到键号13对应功能程序标号 LJMP KEYFUN14 ;跳到键号14对应功能程序标号 RET ;列号对应数据表 DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH 0 1 2 3 4 5 6 7 MOV A,#02H ;发2个脉冲 LJMP REMOTE ;转发送程序 RET

MOV A,#03H ;发3个脉冲 LJMP REMOTE ;转发送程序 RET

MOV A,#04H ;发4个脉冲 LJMP REMOTE ;转发送程序 RET

MOV A,#05H ;发5个脉冲 LJMP REMOTE ;转发送程序 RET

MOV A,#06H ;发6个脉冲 LJMP REMOTE ;转发送程序 RET

MOV A,#07H ;发7个脉冲 LJMP REMOTE ;转发送程序 RET

22

KEYFUN06: MOV A,#08H ;发8个脉冲 LJMP REMOTE ;转发送程序 RET

KEYFUN07: MOV A,#09H ;发9个脉冲 LJMP REMOTE ;转发送程序 RET

KEYFUN08: MOV A,#0AH ;发10个脉冲 KEYFUN09: KEYFUN10: KEYFUN11: KEYFUN12: KEYFUN13: KEYFUN14: REMOTE: OUT: OUT1: LJMP REMOTE RET

MOV A,#0BH LJMP REMOTE RET

MOV A,#0CH LJMP REMOTE RET

MOV A,#0DH LJMP REMOTE RET

MOV A,#0EH LJMP REMOTE RET

MOV A,#0FH LJMP REMOTE RET

MOV A,#10H LJMP REMOTE RET

MOV R1,A LJMP OUT3 MOV R0,#55H SETB ET1 SETB TR1 NOP NOP NOP

;转发送程序 ;发11个脉冲 ;转发送程序 ;发12个脉冲 ;转发送程序 ;发13个脉冲 ;转发送程序 ;发14个脉冲 ;转发送程序 ;发15个脉冲 ;转发送程序 ;发16个脉冲 ;转发送程序 ;装入发射脉冲个数 ; 转第一个码发射处理 ;1ms宽低电平发射控制数据 ;开T1中断 ;开启定时器T1 ;延时 23

NOP NOP

DJNZ R0,OUT1 ;时间不到转OUT1再循环 MOV R0,#32H ;1MS高电平间隙控制数据 OUT2: CLR TR1 ;关定时器T1 CLR ET1 ;关T1中断 CLR P3.5 ;关脉冲输出 OUT3: DELAY: DELAY1: DL10MS: DL10MS1: DL500MS: DL500MS1: NOP ;空操作延时 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP

DJNZ R0,OUT2 ;时间不到转OUT2在循环 DJNZ R1,OUT ;脉冲未发送完,转OUT再循环发射 LCALL DL500MS ; RET

MOV R0,#0FFH ;装发射3MS宽控制数据 LJMP OUT1 ;转OUT1 MOV R2,#0FFH DJNZ R2,DELAY1 RET

MOV R3,#14H LCALL DELAY DJNZ R3,DL10MS1 RET MOV R4,#32H LCALL DL10MS DJNZ R4,DL500MS

END ;程序结束

24


多路红外遥控灯(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:七年级历史下册第2课导学案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: