STC单片机学习型遥控器程序
KEY5: MOV P3,#11111101B ;第二行 KEYWRONG2:LJMP KEYWRONG KEYWRONG3:LJMP KEYWRONG KEY13: MOV P3,#11110111B ;第四行 KEYWRONG4: LJMP KEYWRONG KEYWRONG:CLR KEY_SIGN RE_DELAY:MOV R7,#5 RX_MAIN: MOV R0,#00H JUDGE1: JB TF0,RXEND RXEND: CLR TR0 MOV ISP_CMD,#00H ;ISP指令清零,防止误触发 LJMP KEY_MAIN BYTE_WRITE: MOVX A,@R0 ISP_ERASE: MOV ISP_ADDRH,ADDRH MOV A,ISP_DATA ;为0FF则是错误的,回去,不为0FF则继续
JB P3.4,KEY6
JB KEY_SIGN,KEYWRONG2
MOV KEY_WORD,#5
SETB KEY_SIGN
KEY6: JB P3.5,KEY7
JB KEY_SIGN,KEYWRONG2
MOV KEY_WORD,#6
SETB KEY_SIGN
KEY7: JB P3.6,KEY8
JB KEY_SIGN,KEYWRONG2
MOV KEY_WORD,#7
SETB KEY_SIGN
KEY8: JB P3.7,KEY9
JB KEY_SIGN,KEYWRONG2
MOV KEY_WORD,#8
SETB KEY_SIGN
LJMP KEY9
KEY9: MOV P3,#11111011B ;第三行
JB P3.4,KEY10
JB KEY_SIGN,KEYWRONG3
MOV KEY_WORD,#9
SETB KEY_SIGN
KEY10: JB P3.5,KEY11
JB KEY_SIGN,KEYWRONG3
MOV KEY_WORD,#10
SETB KEY_SIGN
KEY11: JB P3.6,KEY12
JB KEY_SIGN,KEYWRONG3
MOV KEY_WORD,#11
SETB KEY_SIGN
KEY12: JB P3.7,KEY13
JB KEY_SIGN,KEYWRONG3
MOV KEY_WORD,#12
SETB KEY_SIGN
LJMP KEY13
JB P3.4,KEY14
JB KEY_SIGN,KEYWRONG4
MOV KEY_WORD,#13
SETB KEY_SIGN
KEY14: JB P3.5,KEY15
JB KEY_SIGN,KEYWRONG4
MOV KEY_WORD,#14
SETB KEY_SIGN
KEY15: JB P3.6,KEY16
JB KEY_SIGN,KEYWRONG4
MOV KEY_WORD,#15
SETB KEY_SIGN
KEY16: JB P3.7,SCAN_END
JB KEY_SIGN,KEYWRONG4
MOV KEY_WORD,#16
SETB KEY_SIGN
LJMP SCAN_END
SCAN_END:RET
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
JB RXIN,$
SETB TR0
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 R1
JUDGE2: 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
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,#00H
LOOP_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_STORE
ISP_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,#00H
LOOP_WRITE: LCALL BYTE_WRITE ;将扩展寄存器中的计时值依次放入ISP_EEPROM第二位开始的存储器中
INC R0
LCALL BYTE_WRITE
INC R0
DJNZ R1,LOOP_WRITE
MOV ISP_TRIG,#00H
MOV ISP_ADDRH,#00H
MOV ISP_ADDRL,#00H
mov p1,geshu
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
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
CJNE A,#0FFH,ISP_READ
LJMP KEY_MAIN
ISP_READ: MOV GESHU,ISP_DATA
MOV R1,GESHU
MOV R0,#00H
LOOP_READ: LCALL BYTE_READ
INC R0
LCALL BYTE_READ
INC R0
DJNZ R1,LOOP_READ
LJMP TX_EXROM
- STC单片机内部EEPROM程序(12-02)
- STC单片机 EEPROM/IAP 功能测试程序演示(12-01)
- stc单片机IO配置与PWM(12-01)
- STC单片机I/O口控制程序(两个不同的跑马灯效果)(12-01)
- STC单片机实现水滴效果程序(12-01)
- STC单片机8个LED闪烁程序(12-01)