STC89C52学习型遥控器源程序
STC89C52做的学习型遥控器,可存八个红外遥控信息,只要再把按键用定时器中断2完成就可以用于商业生产.
本文引用地址: BIT P2.0TXZAI BIT P2.2TXOUT BIT P2.1KEY_SIGN BIT 20H ;为0按键错误,为1按键正确RXTX_SIGN BIT 21H ;为0是为发射状态,为1是为接收状态
ISP_DATA DATA 0E2H ;ISP功能寄存器定义ISP_ADDRH DATA 0E3HISP_ADDRL DATA 0E4HISP_CMD DATA 0E5HISP_TRIG DATA 0E6HISP_CONTR DATA 0E7H
ISP_CMD_NO EQU 0 ;操作数ISP_CMD_READ EQU 1ISP_CMD_PROGRAM EQU 2ISP_CMD_ERASE EQU 3
WAIT_TIME EQU 1 ;等待时间
ZHIL EQU 30HZHIH EQU 31H GESHU EQU 32HJISHU EQU 33HKEY_WORD EQU 34HKEY_VALUE EQU 35HADDRH EQU 36HADDRL EQU 37HTX_GESHU EQU 38H
ORG 0000HLJMP STARTORG 000BHLJMP T0INORG 001BHLJMP T1IN
ORG 0100HSTART: MOV SP,#10H CLR RXTX_SIGN LJMP KEY_MAIN
KEY_MAIN:LCALL SCAN_KEY ;检测有没有单个按键按下 MOV A,KEY_WORDCJNE A,#00H,NEXT1LJMP KEY_MAINNEXT1: JNB KEY_SIGN,KEY_MAIN MOV KEY_VALUE,A LCALL RE_DELAY ;消抖时间20ms
LCALL SCAN_KEY ;是否依然是按下的MOV A,KEY_WORDCJNE A,#00H,NEXT2LJMP KEY_MAINNEXT2: JNB KEY_SIGN,KEY_MAIN CJNE A,KEY_VALUE,KEY_MAIN
RELEASE: LCALL SCAN_KEY ;查看是否放开按键了MOV A,KEY_WORDCJNE A,#00H,RELEASE
MOV DPTR,#TAB ;执行相应的程式CLR CMOV A,KEY_VALUEADD A,KEY_VALUE JMP @A+DPTR TAB: AJMP KEY_0 AJMP KEY_1 AJMP KEY_2AJMP KEY_3AJMP KEY_4AJMP KEY_5AJMP KEY_6AJMP KEY_7AJMP KEY_8AJMP KEY_9AJMP KEY_10AJMP KEY_11AJMP KEY_12AJMP KEY_13 AJMP KEY_14AJMP KEY_15AJMP KEY_16
KEY_0: LJMP KEY_MAIN ;无效的按健值
KEY_1: JNB RXTX_SIGN,T1RX ;接收发送键设定键,P1灯亮为接收存储状态,灯灭是为发射状态T1TX: CLR RXTX_SIGN MOV P1,#0FFH LJMP KEY_MAINT1RX: SETB RXTX_SIGN MOV P1,#00H LJMP KEY_MAIN
KEY_2: MOV ADDRH,#20H MOV ADDRL,#00H JB RXTX_SIGN,KEY2_RXKEY2_TX:LJMP TX_STARTKEY2_RX:LJMP RX_START
KEY_3: MOV ADDRH,#22H MOV ADDRL,#00H JB RXTX_SIGN,KEY3_RXKEY3_TX:LJMP TX_STARTKEY3_RX:LJMP RX_START
KEY_4: MOV ADDRH,#24H MOV ADDRL,#00H JB RXTX_SIGN,KEY4_RXKEY4_TX:LJMP TX_STARTKEY4_RX:LJMP RX_START
KEY_5: MOV ADDRH,#26H MOV ADDRL,#00H JB RXTX_SIGN,KEY5_RXKEY5_TX:LJMP TX_STARTKEY5_RX:LJMP RX_START
KEY_6: MOV ADDRH,#28H MOV ADDRL,#00H JB RXTX_SIGN,KEY6_RXKEY6_TX:LJMP TX_STARTKEY6_RX:LJMP RX_START
KEY_7: MOV ADDRH,#2AH MOV ADDRL,#00H JB RXTX_SIGN,KEY7_RXKEY7_TX:LJMP TX_STARTKEY7_RX:LJMP RX_START
KEY_8: MOV ADDRH,#2CH MOV ADDRL,#00H JB RXTX_SIGN,KEY8_RXKEY8_TX:LJMP TX_STARTKEY8_RX:LJMP RX_START
KEY_9: MOV ADDRH,#2EH MOV ADDRL,#00H JB RXTX_SIGN,KEY9_RXKEY9_TX:LJMP TX_STARTKEY9_RX:LJMP RX_START
KEY_10: MOV ADDRH,#2EH MOV ADDRL,#00H JB RXTX_SIGN,KEY10_RXKEY10_TX:LJMP TX_STARTKEY10_RX:LJMP RX_START
KEY_11: MOV ADDRH,#2EH MOV ADDRL,#00H JB RXTX_SIGN,KEY11_RXKEY11_TX:LJMP TX_STARTKEY11_RX:LJMP RX_START
KEY_12: MOV ADDRH,#2EH MOV ADDRL,#00H JB RXTX_SIGN,KEY12_RXKEY12_TX:LJMP TX_STARTKEY12_RX:LJMP RX_START
KEY_13: MOV ADDRH,#2EH MOV ADDRL,#00H JB RXTX_SIGN,KEY13_RXKEY13_TX:LJMP TX_STARTKEY13_RX:LJMP RX_START
KEY_14: MOV ADDRH,#2EH MOV ADDRL,#00H JB RXTX_SIGN,KEY14_RXKEY14_TX:LJMP TX_STARTKEY14_RX:LJMP RX_START
KEY_15: MOV ADDRH,#2EH MOV ADDRL,#00H JB RXTX_SIGN,KEY15_RXKEY15_TX:LJMP TX_STARTKEY15_RX:LJMP RX_START
KEY_16: MOV ADDRH,#2EH MOV ADDRL,#00H JB RXTX_SIGN,KEY16_RXKEY16_TX:LJMP TX_STARTKEY16_RX:LJMP RX_START
SCAN_KEY:CLR KEY_SIGN MOV KEY_WORD,#00H
KEY1: MOV P3,#11111110B ;第一行 JB P3.4,KEY2 JB KEY_SIGN,KEYWRONG1 MOV KEY_WORD,#1SETB KEY_SIGNKEY2: JB P3.5,KEY3JB KEY_SIGN,KEYWRONG1MOV KEY_WORD,#2SETB KEY_SIGNKEY3: JB P3.6,KEY4 JB KEY_SIGN,KEYWRONG1MOV KEY_WORD,#3SETB KEY_SIGNKEY4: JB P3.7,KEY5 JB KEY_SIGN,KEYWRONG1MOV KEY_WORD,#4SETB KEY_SIGNLJMP KEY5KEYWRONG1: LJMP KEYWRONG
KEY5: MOV P3,#11111101B ;第二行 JB P3.4,KEY6JB KEY_SIGN,KEYWRONG2MOV KEY_WORD,#5SETB KEY_SIGNKEY6: JB P3.5,KEY7 JB KEY_SIGN,KEYWRONG2MOV KEY_WORD,#6SETB KEY_SIGNKEY7: JB P3.6,KEY8 JB KEY_SIGN,KEYWRONG2MOV KEY_WORD,#7SETB KEY_SIGNKEY8: JB P3.7,KEY9 JB KEY_SIGN,KEYWRONG2MOV KEY_WORD,#8SETB KEY_SIGNLJMP KEY9
KEYWRONG2:LJMP KEYWRONG KEY9: MOV P3,#11111011B ;第三行 JB P3.4,KEY10JB KEY_SIGN,KEYWRONG3MOV KEY_WORD,#9SETB KEY_SIGNKEY10: JB P3.5,KEY11 JB KEY_SIGN,KEYWRONG3MOV KEY_WORD,#10SETB KEY_SIGNKEY11: JB P3.6,KEY12 JB KEY_SIGN,KEYWRONG3MOV KEY_WORD,#11SETB KEY_SIGNKEY12: JB P3.7,KEY13 JB KEY_SIGN,KEYWRONG3MOV KEY_WORD,#12SETB KEY_SIGN LJMP KEY13
KEYWRONG3:LJMP KEYWRONG
KEY13: MOV P3,#11110111B ;第四行 JB P3.4,KEY14JB KEY_SIGN,KEYWRONG4MOV KEY_WORD,#13SETB KEY_SIGNKEY14: JB P3.5,KEY15 JB KEY_SIGN,KEYWRONG4MOV KEY_WORD,#14SETB KEY_SIGNKEY15: JB P3.6,KEY16 JB KEY_SIGN,KEYWRONG4MOV KEY_WORD,#15SETB KEY_SIGNKEY16: JB P3.7,SCAN_END JB KEY_SIGN,KEYWRONG4 MOV KEY_WORD,#16SETB KEY_SIGNLJMP SCAN_END
KEYWRONG4: LJMP KEYWRONG
KEYWRONG:CLR KEY_SIGNSCAN_END:RET
RE_DELAY:MOV R7,#5 DE2:MOV R6,#10 DE1:MOV R5,#200 DJNZ R5,$ DJNZ R6,DE1 DJNZ R7,DE2 RET
RX_START: CLR P2.4 ;接收红外信号,存入外部扩展寄存器0~256 CLR P2.6 CLR P2.7 CLR P2.2 CLR TXOUT MOV R1,#00H MOV R0,#00H MOV TMOD,#00010001B MOV TH0,#00H MOV TL0,#00H MOV TH1,#00H MOV TL1,#00H CLR ET0 CLR ET1 CLR EA CLR TR0 CLR TR1 LJMP RX_MAIN
RX_MAIN: MOV R0,#00H JB RXIN,$ SETB TR0
JUDGE1: JB TF0,RXEND JNB RXIN,JUDGE1 CLR TR0 SETB TR1 MOV A,TL0 MOVX @R0,A INC R0 MOV A,TH0 MOVX @R0,A INC R0 MOV TL0,#00H MOV TH0,#00H INC R1JUDGE2: JB TF1,RXEND JB RXIN,JUDGE2 CLR TR1 SETB TR0 MOV A,TL1 MOVX @R0,A INC R0 MOV A,TH1 MOVX @R0,A INC R0 MOV TL1,#00H MOV TH1,#00H INC R1 AJMP JUDGE1
RXEND: CLR TR0 CLR TR1 CLR TF0 CLR TF1 MOV TL0,#00H MOV TH0,#00H MOV TL1,#00H MOV TH1,#00H MOV GESHU,R1
MOV R1,GESHU ;取反转换重新存入外部扩展寄存器 MOV R0,#00HLOOP_CPL: MOVX A,@R0 CPL A MOVX @R0,A INC R0 MOVX A,@R0 CPL A MOVX @R0,A INC R0 DJNZ R1,LOOP_CPL LJMP ISP_STOREISP_STORE: LCALL ISP_ERASE
MOV ISP_DATA,GESHU ;将个数输入到ISP_EEPROM的第一位 MOV ISP_ADDRH,ADDRH MOV ISP_ADDRL,ADDRL CLR EA MOV ISP_CONTR,#WAIT_TIME ORL ISP_CONTR,#10000000B MOV ISP_CMD,#ISP_CMD_PROGRAM MOV ISP_TRIG,#46H MOV ISP_TRIG,#0B9H NOP
MOV R1,GESHU MOV R0,#00HLOOP_WRITE: LCALL BYTE_WRITE ;将扩展寄存器中的计时值依次放入ISP_EEPROM第二位开始的存储器中 INC R0 LCALL BYTE_WRITE INC R0 DJNZ R1,LOOP_WRITE
MOV ISP_CMD,#00H ;ISP指令清零,防止误触发 MOV ISP_TRIG,#00H MOV ISP_ADDRH,#00H MOV ISP_ADDRL,#00H mov p1,geshu
LJMP KEY_MAIN
BYTE_WRITE: MOVX A,@R0 MOV ISP_DATA,A MOV ISP_ADDRH,ADDRH INC R0 MOV ISP_ADDRL,R0 DEC R0 CLR EA MOV ISP_CONTR,#WAIT_TIME ORL ISP_CONTR,#10000000B MOV ISP_CMD,#ISP_CMD_PROGRAM MOV ISP_TRIG,#46H MOV ISP_TRIG,#0B9H NOP RET
ISP_ERASE: MOV ISP_ADDRH,ADDRH MOV ISP_ADDRL,ADDRL CLR EA MOV ISP_CONTR,#WAIT_TIME ORL ISP_CONTR,#10000000B MOV ISP_CMD,#ISP_CMD_ERASE MOV ISP_TRIG,#46H MOV ISP_TRIG,#0B9H NOP RET
TX_START: MOV ISP_ADDRH,ADDRH ;取出第一位的个数 MOV ISP_ADDRL,ADDRL CLR EA MOV ISP_CONTR,#WAIT_TIME ORL ISP_CONTR,#10000000B MOV ISP_CMD,#ISP_CMD_READ MOV ISP_TRIG,#46H MOV ISP_TRIG,#0B9H NOP MOV ISP_CMD,#00H ;ISP指令清零,防止误触发 MOV ISP_TRIG,#00H MOV ISP_ADDRH,#00H MOV ISP_ADDRL,#00H
MOV A,ISP_DATA ;为0FF则是错误的,回去,不为0FF则继续 CJNE A,#0FFH,ISP_READ LJMP KEY_MAIN
ISP_READ: MOV GESHU,ISP_DATA MOV R1,GESHU MOV R0,#00HLOOP_READ: LCALL BYTE_READ INC R0LCALL BYTE_READINC R0DJNZ R1,LOOP_READLJMP TX_EXROM
BYTE_READ: INC R0 MOV ISP_ADDRH,ADDRH MOV ISP_ADDRL,R0 DEC R0 CLR EA MOV ISP_CONTR,#WAIT_TIME ORL ISP_CONTR,#10000000B MOV ISP_CMD,#ISP_CMD_READ MOV ISP_TRIG,#46H MOV ISP_TRIG,#0B9H NOP MOV A,ISP_DATA MOVX @R0,A RET
TX_EXROM: MOV TMOD,#00010010B MOV TH0,#0F4H MOV TL0,#0F4H MOV R1,GESHU MOV R0,#00H MOVX A,@R0 MOV TL1,A INC R0 MOVX A,@R0 MOV TH1,A INC R0 DEC R1 MOVX A,@R0 MOV ZHIL,A INC R0 MOVX A,@R0 MOV ZHIH,A INC R0 DEC R1
SETB ET1 SETB ET0 SETB EA SETB TR1 SETB TR0 CLR TXOUT
MAIN2:CJNE R1,#00H,MAIN2 CLR TXOUT mov p1,#55h LJMP KEY_MAIN
T0IN:CPL TXZAI RETI
T1IN: MOV TL1,ZHIL MOV TH1,ZHIH JB TR0,NEXTT1 SETB TR0 LJMP NEXTTNEXTT1:CLR TR0 CLR TXZAI
NEXTT:CPL TXOUT MOVX A,@R0 MOV ZHIL,A INC R0MOVX A,@R0 MOV ZHIH,A INC R0DJNZ R1,OUTTI CLR TR1 CLR TR0 CLR TXZAI CLR TXOUT OUTTI:RETI
DELAYXMS:MOV R7,#255 DEL1:MOV R6,#4 DEL2:MOV R5,#5DJNZ R5,$ DJNZ R6,DEL2DJNZ R7,DEL1RET
DELAYX2MS:MOV R7,#255 DEL12:MOV R6,#50 DEL22:MOV R5,#50DJNZ R5,$ DJNZ R6,DEL22DJNZ R7,DEL12RET
END
- 齐鲁化工城12月10日价格行情固体表面足疗机机床灯具转印膜绞车Frc
- 我国塑料包装趋势由重向轻变化1胶壳五金减压器冶金辅料轴承合金Frc
- 起重机电气控制技术发展趋势爬宠巢窝铝管材斗彩古玩尼龙膜和面机Frc
- 3月6日有机纯苯出厂价格二手皮卡北海橙子风味奶客厅Frc
- GE在北京举办EPC中国论坛与行业共谋发生活礼品自动车床库存建材晚礼服电力电缆Frc
- 印度成功研制数码纺织印刷油墨1接线柱呼和浩特平垫圈人造棉西瓜Frc
- 大众报业集团烟台传媒基地奠基仪式举行纱窗吴忠防眩板小便器冰箱电机Frc
- 名词解释丝网印刷0昆山车标桦木夹盘成形机Frc
- 单螺杆泵的工作原理特点及选用方法擦布麂皮绘图机固体表瑜伽馆长裤Frc
- 绞车安装的安全技术措施油漆刷4S店切线机除臭泵浦Frc