?? lcd.asm
字號:
RS EQU P1.1
RW EQU P1.2
E EQU P1.3
PSB EQU P1.4
RST EQU P1.6
COM EQU 20H
DAT EQU 21H
;********************LCD接口定義
TEMP EQU 22H ;存放鍵盤信息
REC EQU 23H ;收到的DIDA信息23H-2AH
AL EQU 2BH ;存放轉換后的二進制DIDA信息
CNT EQU 2CH ;計數信息,得到AL對應的字母
CHAR1 EQU 2DH ;存放漢字碼的第一個8位
CHAR2 EQU 2EH ;存放漢字碼的第二個8位
WEIZHI0 EQU 30H ;存放DIDA的LCD顯示座標
WEIZHIA EQU 31H ;存放字母的LCD顯示座標
WEIZHIC EQU 32H ;存放漢字的LCD顯示座標
;********************接口定義
ORG 0000H
SJMP INIT ;初始化
ORG 0030
INIT: MOV WEIZHI0,#80H ;將#80H給WEIZHI0
MOV WEIZHIA,#90H ;將#90H給WEIZHIA
MOV WEIZHIC,#88H ;將#88H給WEIZHIC
MOV R0,#REC ;將REC的地址給R0
MOV AL,#01H ;初始化MORSE碼00000001B
MOV CHAR1,#00H
MOV CHAR2,#00H ;清零漢字碼
;*********************************
DISP: CLR PSB
ACALL DELAY
SETB PSB
LCALL DELAY
MOV COM,#30H ;功能設置-8bit控制界面
ACALL WRI ;寫指令
LCALL DELAY
MOV COM,#0CH
ACALL WRI
LCALL DELAY
MOV COM,#02H
ACALL WRI
LCALL DELAY
MOV COM,#06H
ACALL WRI
LCALL DELAY
;*************************LCD模塊初始化
START: LCALL SCAN
SJMP START
;******************************以下為鍵盤掃描程序
SCAN: MOV P2,#0FFH
MOV A,P2
ANL A,#0FH
CJNE A,#0FH,ZAILAI
RET
ZAILAI: ACALL DELAY5
MOV P2,#0FFH
MOV A,P2
ANL A,#0FH
CJNE A,#0FH,ANJIAN
RET ;鍵盤去抖動
ANJIAN: MOV TEMP,A
CJNE A,#00001110B,XX1
MOV @R0,#00H ;按鍵為0,顯示點
ACALL XIANSHI
INC R0
MOV A,AL
RL A
MOV AL,A ;更新MORSE碼
RET
XX1: MOV A,TEMP
CJNE A,#00001101B,XX2
MOV @R0,#01H ;按鍵為1,顯示劃
ACALL XIANSHI
INC R0
MOV A,AL
RL A
INC A
MOV AL,A ;更新MORSE碼
RET
XX2: MOV A,TEMP
CJNE A,#00001011B,XX3
MOV R2,#16 ;按鍵為3,清除點劃信息
MOV R0,#REC
MOV COM,#WEIZHI0
LCALL WRI ;LCD點劃座標復位
CLEAR: MOV @R0,#02H
ACALL XIANSHI
;ACALL DELAY
;ACALL DELAY
INC R0
DJNZ R2,CLEAR
MOV R0,#REC ;R0復位為REC地址,等待下一個點劃信息
LCALL D2A ;調用DIGIT-TO-ALPHABETA子程序,轉化為字母數字
MOV AL,#00H
MOV COM,#WEIZHI0 ;LCD點劃座標復位
LCALL WRI
XX3: RET
;***************************************
D2A: MOV CNT,#00H ;初始化CNT
LOOP: MOV DPTR,#TABLEAM ;讀入字母-MORSE表
MOV A,CNT ;將CNT讀入A
MOVC A,@A+DPTR ;將第CNT個表元讀入A
CJNE A,AL,NEXT ;不相等則判斷下一個表元
MOV A,WEIZHIA ;否則讀入WEIZHIA信息,準備顯示
CJNE A,#97H,JIXU ;不為末位則JIXU
MOV WEIZHIA,#90H ;初始化WEIZHIA
MOV A,WEIZHIA
JIXU: MOV COM,A ;
LCALL WRI ;設置字母LCD顯示座標
MOV DPTR,#TABLEA ;讀入字母LCD表
MOV A,CNT
MOVC A,@A+DPTR ;讀入第CNT個碼元
ACALL DISP5A ;將字母顯示
;
;將CNT放入CHAR
INC WEIZHIA ;WEIZHIA指向下一位
RET
NEXT: INC CNT ;CNT加1
SJMP LOOP
;***************************************
XIANSHI:MOV A,@R0
MOV DPTR,#TABLE0
MOVC A,@A+DPTR
DISP5A: MOV DAT,A
ACALL WRD
;***********************寫入半角字符
RET
;*************************************
DISPLAYC:
MOV R2,#64
MOV R1,#0DEH
MOV COM,#80H
ACALL WRI
DISP5: MOV DAT,#0B4H
ACALL WRD
MOV DAT,R1
ACALL WRD
INC R1
DJNZ R2,DISP5
;***********************寫入全角字符
RET
;**********************一下為寫指令子程序
WRI: PUSH ACC
CLR RS
SETB RW
WRI1: MOV P0,#0FFH
SETB E
MOV A,P0
CLR E
JB ACC.7,WRI1
CLR RW
MOV P0,COM
SETB E
CLR E
POP ACC
RET
;************************一下為寫數據子程序
WRD: PUSH ACC
CLR RS
SETB RW
WRD1: MOV P0,#0FFH
SETB E
MOV A,P0
CLR E
JB ACC.7,WRD1
SETB RS
CLR RW
MOV P0,DAT
SETB E
CLR E
POP ACC
RET
;*****************************************
DELAY: MOV R7,#0FFH
DELAY4: MOV R6,#0FFH
LOOP2: DJNZ R6,LOOP2
DJNZ R7,DELAY4
RET
DELAY5: MOV R4,#02H
DELAY15: MOV R7,#0FFH
DELAY45: MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,DELAY45
DJNZ R4,DELAY15
RET
TABLE0: DB 07H,2DH,20H
TABLEA: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H,46H,47H,48H
DB 49H,4AH,4BH,4CH,4DH,4EH,4FH,50H,51H,52H,53H,54H,55H,56H,57H,58H,59H,5AH
TABLEAM: DB 101111B,100111B,100011B,100001B,100000B,110000B,111000B,111100B,111110B,111111B ;0-9
DB 101B,11000B,11010B,1100B,10B,10010B,1110B,10000B,100B,10111B,1101B,10100B,111B ;A-M
DB 110B,1111B,10110B,11101B,1010B,1000B,11B,1001B,10001B,1011B,11001B,11011B,11100B ;N-Z
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -