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

📄 液晶显示驱动.asm

📁 字符型液晶显示器一般均采用HD44780及兼容芯片作为控制器
💻 ASM
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;字符型液晶显示器一般均采用HD44780及兼容芯片作为控制器,因此其接口方式基本是标准的。
;为便于使用,编写了驱动程序软件包
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRITESTRING:
     MOV A,@R0
     JZ WS_RET
     CALL WRITECHAR
     MOV A,XPOS
     CJNE A,#15,WS_1         ;如果XPOS中的值未到15(可显示的最多位)
     JMP WS_RET
WS_1:
     INC R0
     INC XPOS
     JMP WRITESTRING
WS_RET:
     RET
SETCUR:                     ;光标设置命令
     MOV A,CUR
     JZ S_1                 ;参数为0,转关显示
     DEC A
     JZ S_2                 ;参数为1,转开显示,但无光标
     DEC A
     JZ S_3                 ;参数为2,转开显示且有光标,无闪烁
     DEC A
     JZ S_4                 ;参数为3,转开显示,光标闪烁
     JMP S_RET              ;否则返回
S_1:
     MOV A,#00001000B       ;关显示
     CALL LCDWC
     JMP S_RET
S_2:
     MOV A,#00001100B      ;开显示但无光标
     CALL LCDWC
     JMP S_RET
S_3:
     MOV A,#00001110B      ;开显示有光标但不闪烁
     CALL LCDWC
     JMP S_RET
S_4:
     MOV A ,#00001111B     ;开显示有光标且闪烁
     CALL LCDWC
     JMP S_RET
S_RET:
     RET
     
CLRLCD:                     ;清屏命令
     MOV A,#01H
     CALL LCDWC
     RET
;在制指定的行与列显示的字符,xpos——行,ypos——列  A中放待显示字符
WRITECHAR:
     CALL LCDPOS
     CALL LCDWD
     RET 
     
WAITIDLE:                    ;检测LCD控制器状态
     PUSH ACC
     MOV DPORT,#0FFH
     CLR RS
     SETB RW
     SETB E
     NOP
W_1:
     MOV A,DPORT
     ANL A,#80H
     JZ W_2
     JMP W_1
W_2:
     CLR E
     POP ACC
     RET 
     
LCDWD:                        ;写字符子程序
     CALL WAITIDLE
     SETB RS
     CLR RW
     MOV DPORT,A              ;以A为数据传递
     SETB E
     NOP
     CLR E
     RET
LCDWC:                        ;送控制字子程序(检测忙信号)
     CALL WAITIDLE
LCDWCN:                       ;送控制字子程序(不检测忙信号)
     CLR RS
     CLR RW
     MOV DPORT,A
     SETB E
     NOP
     CLR E
     RET

LCDPOS:                        ;设置第(XPOS,YPOS)个字符的DDRAM地址
     PUSH ACC
     MOV A,XPOS
     ANL A,#0FH                ;X位置范围(0~15)
     MOV XPOS,A
     MOV A,YPOS
     ANL A,#01H                ;Y位置范围(0~1)
     MOV YPOS,A
     CJNE A,#00,LPS_LAY        ;(第1行)X:第0~15个字符
     MOV A,XPOS                ;DDRAM:0~0FH
     JMP LSP_LAX
LPS_LAY:
     MOV A,XPOS                ;(第二行)X:第0~15个字符
     ADD A,#40H                ;DDRAM:40~4FH
LPS_LAX:
     ORL A,#80H                ;设置DDRAM地址
     CALL LCDWC
     POP ACC
     RET
     
RSTLCD:
     MOV R6,#15
     CALL DELAY                 ;延时15ms
     MOV A,#38H
     CALL LCDWCN
     MOV R6,#5                  ;延时5ms
     CALL DELAY
     CALL LCDWCN
     MOV R6,#5                  ;延时5ms
     CALL DELAY
     CALL LCDWCN
     
     MOV A ,#38H                ;显示模式设置
     CALL LCDWC
     MOV A,#08H                 ;显示关闭
     CALL LCDWC
     MOV A,#01H                 ;显示清屏
     CALL LCDWC
     MOV A,#06H                 ;显示光标移动位置
     CALL LCDWC
     MOV A,#0CH                 ;显示开及光标设设置
     CALL LCDWC
     RET
     
;以下是延时1ms的延时程序,用于液晶显示。该段延时时间不要求精确,这里以12MHz晶振
;为例来设计,可用于低于12MHz晶振的场合。如果晶振频率高于12MHz,适当修改
DELAY:
   D1:MOV R5,#25                ;如果12MHz以上晶振,将这个数值改为50
   D2:MOV R4,#20
      DJNZ R4,$
      DJNZ R5,D2
      DJNZ R6,D1                ;R6用作参数传递
      RET
      
;该通用软件包可以设置在程序存储器的任何空间

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -