📄 遥控解码部分.asm
字号:
COUNT EQU 30H ;定时计数数值
FLAG_USER1 EQU 45H ;用户码位置1
FLAG_USER2 EQU 46H ;用户码位置2
SAVEDATA EQU 47H ;数据保存位置
CS1 EQU P3.0
CS2 EQU P3.1
RS EQU P3.3
RW EQU P3.4
E EQU P3.5
PAGES EQU 56H
COLUMN EQU 57H
NUM EQU 58H
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXTER0INT
ORG 000BH
LJMP TIMER0INT
ORG 1000H
MAIN:
MOV TMOD,#01H ;定时器0模式1
MOV TH0,#0FFH ;定时100us
MOV TL0,#9CH
SETB EA
SETB IT0 ;外部中断0边沿触发方式,负跳变有效
SETB ET0
SETB EX0
MOV R0,52H ;接收的数据8个一组所存放的起始位置
MOV 52H,#00H ;先进行清零
MOV 53H,#00H
MOV 54H,#00H
MOV 55H,#00H
MOV 51H,#00H ;中间数据存储单元
MOV COUNT,#00H
MOV R1,#08H ;设定接收的数据8个一组
MOV R2,#02H ;设定接收的数据组为4个。
CLR PSW.5 ;数据接收标志
CLR PSW.1 ;数据处理标志
MOV FLAG_USER1,#00H ;设定用户码为0.
LCALL CLEAR
MOV DPTR,#TAB0
MOV PAGES,#1
MOV COLUMN,#0
LCALL LCD_DISP
MOV DPTR,#TAB2
MOV PAGES,#1
MOV COLUMN,#16
LCALL LCD_DISP
MOV DPTR,#TAB1
MOV PAGES,#1
MOV COLUMN,#32
LCALL LCD_DISP ;显示吴小闯
MOV DPTR,#TAB3
MOV PAGES,#1
MOV COLUMN,#48
LCALL LCD_DISP
MOV DPTR,#TAB4
MOV PAGES,#1
MOV COLUMN,#64
LCALL LCD_DISP ;显示作品
MOV DPTR,#TAB5
MOV PAGES,#3
MOV COLUMN,#0
LCALL LCD_DISP
MOV DPTR,#TAB6
MOV PAGES,#3
MOV COLUMN,#16
LCALL LCD_DISP
MOV DPTR,#TAB7
MOV PAGES,#3
MOV COLUMN,#32
LCALL LCD_DISP ;显示键值:
LOOP:
JNB PSW.1,$ ;判断是否进行数据处理。为1则进行处理,反之等待
LCALL DATACHULI ;数据处理。主要进行用户码判断以及数据和数据反码的判断
;用户码判断,根据编码,用户码1和用户码2均为0,所以这里我们只判断用户码1和接受的用户码数据
CLR PSW.1 ;清零等待下一组数据的接收
MOV A,SAVEDATA
LCALL DATASHOW
ENDLOOP:
LJMP LOOP
;外部中断0部分
EXTER0INT:
SETB TR0
MOV 30H,#00H ;30H为计数值
RETI
TIMER0INT:
MOV TH0,#0FFH ;定时100us
MOV TL0,#9CH
INC 30H ;注意,count要在外部中断开始后设定初始值为0;
;起始码的判断,计数数值在85-95之间,采集端口是否发生变化,发生变化了,可以认为可以接受数据了
SETB P3.2
MOV C,P3.2
JB PSW.5,DATARECEIVEPD ;如果为1,表明可以进入数据接收判断位置,否则还是引导码处的判断
JNC ENDTIMER0INT
MOV A,30H ;注在试验中了解到,COUNT=115为9ms的数值 ;0.56ms和1.68ms对应的count分别为 6和16
CLR C
SUBB A,#90
JC ENDTIMER0INT ;如果C为1,说明不符合引导码的9ms,直接退出,否则符合引导时间,准备接受数据
SETB PSW.5 ;数据接收标志。
CLR TR0 ;以免接收数据
MOV R1,#08H ;表示要接收的数据8个一组
MOV 51H,#00H ;中间数据存储清零
MOV R0,#52H
MOV R2,#04H ;总共接收2组
LJMP ENDTIMER0INT
DATARECEIVEPD:
JNC ENDTIMER0INT ;c为1,表明状态发生变化,可以对计数值进行判断接收的位是0还是1
CLR TR0
MOV A,30H
CLR TR0 ;首先关掉定时器0
SUBB A,#10 ;以8为分界线,小于8则为0,大于8我们认为接收的是1
JC ORECEIVE ;跳到接收位0处
SETB C
MOV A,51H ;接收位1
RRC A
MOV 51H,A
LJMP WENDPD
ORECEIVE:
CLR C
MOV A,51H
RRC A
MOV 51H,A
WENDPD:
DJNZ R1,ENDTIMER0INT
MOV R1,#08H
MOV @R0,51H ; 重点:重复2次,确保值写到单元里
MOV @R0,51H
INC R0
MOV 51H,#00H
DJNZ R2,ENDTIMER0INT ;若不为0说明4组数据还未接收完则跳转到终端结束
CLR PSW.5
SETB PSW.1
ENDTIMER0INT:
RETI
DATACHULI:
MOV A,52H
CLR C
SUBB A,FLAG_USER1
JNZ ENDDATACHULI ;与用户码进行比较,本用户码设置的是0,当然也可以设置其他
MOV A,54H
ANL A,55H
JNZ ENDDATACHULI ;判断数据接收的是否正确
MOV A,54H
MOV SAVEDATA,A ;将数据保存起来
MOV P1,A
MOV 52H,#00H ;先进行清零
MOV 53H,#00H
MOV 54H,#00H
MOV 55H,#00H
ENDDATACHULI:
RET
DATASHOW:
CJNE A,#00H,CON2
MOV DPTR,#TAB18
MOV PAGES,#5
LJMP ENDDATASHOW
CON2:CJNE A,#01H,CON3
MOV DPTR,#TAB8
MOV PAGES,#5
LJMP ENDDATASHOW
CON3:CJNE A,#02H,CON4
MOV DPTR,#TAB9
MOV PAGES,#5
LJMP ENDDATASHOW
CON4:CJNE A,#03H,CON5
MOV DPTR,#TAB10
MOV PAGES,#5
LJMP ENDDATASHOW
CON5:CJNE A,#04H,CON6
MOV DPTR,#TAB11
MOV PAGES,#5
LJMP ENDDATASHOW
CON6:CJNE A,#05H,CON7
MOV DPTR,#TAB12
MOV PAGES,#5
LJMP ENDDATASHOW
CON7:CJNE A,#06H,CON8
MOV DPTR,#TAB13
MOV PAGES,#5
LJMP ENDDATASHOW
CON8:CJNE A,#07H,CON9
MOV DPTR,#TAB14
MOV PAGES,#5
LJMP ENDDATASHOW
CON9:CJNE A,#08H,CON10
MOV DPTR,#TAB15
MOV PAGES,#5
LJMP ENDDATASHOW
CON10:CJNE A,#09H,CON11
MOV DPTR,#TAB16
MOV PAGES,#5
LJMP ENDDATASHOW
CON11:CJNE A,#0AH,CON12
MOV DPTR,#TAB17
MOV PAGES,#5
LJMP ENDDATASHOW
CON12:JMP ENDDATASHOW1
ENDDATASHOW:
MOV COLUMN,#16
LCALL LCD_DISP
ENDDATASHOW1:
RET
CLEAR: MOV R4,#00H ;清屏程序
CLEAR1:MOV A ,R4
ORL A,#0B8H
MOV B,A
LCALL WCL0
LCALL WCR0
MOV B,#40H
LCALL WCL0
LCALL WCR0
MOV R3,#40H
CLEAR2:MOV B,#00H
LCALL WCL1
LCALL WCR1
DJNZ R3,CLEAR2
INC R4
CJNE R4, #08H, CLEAR1
RET
LCD_DISP: ;显示汉字子程序
MOV R1,#02H
MOV R0,#00H ;字码偏移量
MOV NUM,#10H ;一行16个点
DISP: MOV R4,NUM
DISPWORD:MOV A,COLUMN ;从第几列开始显示
CLR C
SUBB A,#63 ;判断列在哪一个选片里
JNC YXP ;为0则跳到右选片处
MOV A,COLUMN
ORL A,#40H ;设置列地址指令
MOV B,A
LCALL WCL0 ;写指令到左选片
MOV A,PAGES
ORL A,#0B8H ;设置页指令
MOV B,A ;写指令到左选片
LCALL WCL0
DISPDATA1:INC COLUMN
MOV A,R0
MOVC A,@A+DPTR
MOV B,A
LCALL WCL1 ;写数据到左选片
LJMP NEXTDISP
YXP:MOV A,COLUMN
CLR C
SUBB A,#64 ;右选片的第0列
ORL A,#40H
MOV B,A
LCALL WCR0
MOV A,PAGES
ORL A,#0B8H
MOV B,A
LCALL WCR0
DISPDATA2:INC COLUMN
MOV A,R0
MOVC A,@A+DPTR
MOV B,A
LCALL WCR1
NEXTDISP:INC R0
DJNZ R4,DISPWORD
MOV A,COLUMN
CLR C
SUBB A,#10H
MOV COLUMN, A
INC PAGES
DJNZ R1,DISP
RET
WCL0: CLR CS1 ;写指令左选片
SETB CS2
CLR RS
SETB RW
WCL00: MOV P2,#0FFH
SETB E ;输入输出使能信号
MOV A,P2
CLR E
JB ACC.7,WCL00
CLR RW
MOV P2, B ;写左片指令
SETB E
NOP
CLR E
RET
WCL1: CLR CS1 ;写数据左选片
SETB CS2
CLR RS
SETB RW
WCL11: MOV P2,#0FFH
SETB E
MOV A,P2
CLR E
JB ACC.7,WCL11
CLR RW
SETB RS
MOV P2, B
SETB E
CLR E
RET
WCR0: ;写指令到右选片
SETB CS1 ;右选片
CLR CS2
CLR RS
SETB RW
WCR00: MOV P2,#0FFH
SETB E
MOV A,P2
CLR E
JB ACC.7,WCR00
CLR RW
MOV P2, B
SETB E
CLR E
RET
WCR1: ;写右选片数据
SETB CS1
CLR CS2
CLR RS
SETB RW
WCR11: MOV P2,#0FFH
SETB E
MOV A,P2
CLR E
JB ACC.7,WCR11
CLR RW
SETB RS
MOV P2, B
SETB E
CLR E
RET
TAB0:DB 000H,000H,080H,0BEH,0A2H,0A2H,0A2H,0A2H,0A2H,0A2H,0A2H,0BEH,080H,000H,000H,000H
DB 084H,084H,044H,044H,024H,014H,00CH,007H,00CH,014H,024H,064H,0C4H,044H,004H,000H;吴
TAB1:DB 000H,000H,0F8H,001H,006H,0F0H,090H,092H,092H,0F2H,082H,082H,002H,0FEH,000H,000H
DB 000H,000H,0FFH,000H,002H,002H,002H,002H,002H,00AH,010H,04FH,080H,07FH,000H,000H;闯
TAB2:DB 000H,000H,000H,0C0H,070H,020H,000H,0FFH,000H,010H,020H,0C0H,080H,000H,000H,000H
DB 004H,002H,001H,000H,000H,040H,080H,07FH,000H,000H,000H,000H,001H,007H,002H,000H ;小
TAB3:DB 080H,040H,020H,0F8H,007H,022H,018H,00CH,0FBH,048H,048H,048H,068H,048H,008H,000H
DB 000H,000H,000H,0FFH,000H,000H,000H,000H,0FFH,004H,004H,004H,004H,006H,004H,000H;作
TAB4:DB 000H,000H,000H,000H,07EH,022H,022H,022H,022H,022H,022H,07EH,000H,000H,000H,000H
DB 000H,07FH,021H,021H,021H,021H,07FH,000H,07FH,021H,021H,021H,021H,07FH,000H,000H;品
TAB5:DB 040H,030H,0EFH,028H,028H,044H,064H,0DCH,010H,054H,0FFH,054H,054H,07CH,010H,000H
DB 001H,001H,07FH,021H,051H,022H,014H,00FH,014H,025H,03FH,045H,045H,045H,044H,000H;键
TAB6:DB 080H,040H,0F0H,02FH,002H,004H,0E4H,0A4H,0B4H,0AFH,0A6H,0A4H,0E4H,004H,000H,000H
DB 000H,000H,0FFH,000H,040H,040H,07FH,04AH,04AH,04AH,04AH,04AH,07FH,040H,040H,000H;值
TAB7:DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,036H,036H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H;:
TAB8:DB 000H,080H,080H,080H,080H,080H,080H,080H,080H,080H,080H,080H,080H,0C0H,080H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H ;一
TAB9:DB 000H,000H,004H,004H,004H,004H,004H,004H,004H,004H,004H,006H,004H,000H,000H,000H
DB 000H,010H,010H,010H,010H,010H,010H,010H,010H,010H,010H,010H,010H,018H,010H,000H ;二
TAB10:DB 000H,004H,084H,084H,084H,084H,084H,084H,084H,084H,084H,084H,084H,004H,000H,000H
DB 000H,020H,020H,020H,020H,020H,020H,020H,020H,020H,020H,020H,020H,020H,020H,000H ;三
TAB11:DB 000H,0FEH,002H,002H,002H,0FEH,002H,002H,0FEH,002H,002H,002H,002H,0FEH,000H,000H
DB 000H,07FH,028H,024H,023H,020H,020H,020H,021H,022H,022H,022H,022H,07FH,000H,000H ;四
TAB12:DB 000H,002H,082H,082H,082H,082H,0FEH,082H,082H,082H,0C2H,082H,002H,000H,000H,000H
DB 020H,020H,020H,020H,020H,03FH,020H,020H,020H,020H,03FH,020H,020H,030H,020H,000H ;五
TAB13:DB 010H,010H,010H,010H,010H,091H,012H,01EH,094H,010H,010H,010H,010H,010H,010H,000H
DB 000H,040H,020H,010H,00CH,003H,001H,000H,000H,001H,002H,00CH,078H,030H,000H,000H ;六
TAB14:DB 000H,040H,040H,040H,040H,040H,040H,0FEH,020H,020H,020H,020H,020H,020H,020H,000H
DB 000H,000H,000H,000H,000H,000H,000H,03FH,040H,040H,040H,040H,040H,038H,000H,000H ;七
TAB15:DB 000H,000H,000H,000H,080H,07CH,008H,000H,000H,07EH,084H,000H,000H,000H,000H,000H
DB 020H,010H,008H,006H,001H,000H,000H,000H,000H,000H,001H,006H,018H,030H,010H,000H ;八
TAB16:DB 000H,010H,010H,010H,010H,090H,07FH,010H,010H,010H,0F8H,010H,000H,000H,000H,000H
DB 000H,040H,020H,010H,00CH,003H,000H,000H,000H,000H,07FH,040H,040H,078H,020H,000H ;九
TAB17:DB 040H,040H,040H,040H,040H,040H,040H,0FFH,040H,040H,040H,040H,040H,040H,040H,000H
DB 000H,000H,000H,000H,000H,000H,000H,07FH,000H,000H,000H,000H,000H,000H,000H,000H ;十
TAB18:DB 000H,00CH,004H,055H,055H,055H,085H,07FH,085H,055H,055H,055H,005H,00CH,004H,000H
DB 004H,004H,004H,00AH,00AH,009H,02AH,0CCH,028H,019H,009H,002H,006H,002H,002H,000H ;零
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -