?? 遙控解碼部分.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 + -