⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.asm

📁 本程序通过51单片机实现对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 + -