该套件提供用于LCD显示的16针接口。任何带有HD44780控制器的LCD模块均可使用。
本示例展示了如何在LCD上显示文本消息。
插拔LCD模块时,必须关闭套件的电源。请小心地将其插入正确位置!引脚1是左手边的第一个引脚

代码首先通过调用初始化LCD配置模式来启动程序。随后会打印由SI寄存器所指向的第一条信息。子程序PUT_STR_LCD将逐字节写入ASCII字符,直至找到终止符0。
下一行通过将BX加载为0001来选择,然后子程序GOTO_XY将LCD的当前位置设置到第2行。接着对第二条消息执行相同操作。
消息是由ASCII字母组成的字符串,以0结尾。

程序

; sample test code for LCD display

           CPU     "8086.TBL"      ; CPU TABLE
           HOF     "INT8"         ; HEX OUTPUT FORMAT


PORT0		EQU 100H ; INPUT PORT, UART RXD BIT7, USER KEY S21
PORT1		EQU 1	; DIGIT CONTROL
PORT2		EQU 2	; SEGMENT 
PORT3		EQU 3	; BI-COLOR LED, UART TXD BIT2, SPEAKER BIT3
GPIO1		EQU 0   ; CHANGE LOCATION OF GPIO1 FROM 100 TO 0

LCD             EQU 200H
USER		EQU 300H
USER_STACK      EQU 0FE00H
SYSTEM_STACK    EQU 0FF00H

command_write  equ 0
command_read   equ 2
data_write     equ 1
data_read      equ 3
busy           equ 80h


	        org 400h

		JMP TEST_LCD

; LCD DRIVER HD44780

LCD_READY       push ax
                MOV DX,LCD+COMMAND_READ
WAIT	        IN AL,DX
		AND AL,80H
		JNE WAIT	; UNTIL READY
		pop ax
		RET

clear_lcd:  call lcd_ready
            MOV AL,1
	    MOV DX,LCD+COMMAND_WRITE
            OUT DX,AL
	    RET

init_lcd: call lcd_ready
          MOV DX,LCD+COMMAND_WRITE
	  MOV AL,38H
          OUT DX,AL
          
          call lcd_ready
	  MOV DX,LCD+COMMAND_WRITE
          MOV AL,0ch
          OUT DX,AL
          call clear_lcd

          ret

; print ASCII text on LCD
; entry: SI

put_str_lcd:  
           seg cs        ; need for rom placement
           MOV AL,[SI]
           CMP AL,0
	   JNE put_str_lcd1
           ret

put_str_lcd1:

          call lcd_ready
          MOV DX,LCD+DATA_WRITE
	  OUT DX,AL
	  INC SI
	  JMP put_str_lcd

; goto_xy set cursor location on lcd
; entry: BX: BH = x, BL = y

goto_xy:  call lcd_ready
          mov al,bl
          cmp al,0
          jne goto_xy1
          mov al,bh
          add al,80h
	  mov dx,lcd+command_write
          out dx,al
          ret

goto_xy1: cmp al,1
          jne goto_xy2
          mov al,bh
          add al,0c0h
	  mov dx,lcd+command_write
          out dx,al
          ret

goto_xy2: cmp al,2
          jne goto_xy3
          mov al,bh
          add al,094h
	  mov dx,lcd+command_write
          out dx,al
          ret

goto_xy3: cmp al,3
          jne goto_xy4
          mov al,bh
          add al,0d4h
	  mov dx,lcd+command_write
          out dx,al
          ret

goto_xy4: ret

; put_ch_lcd put character to lcd
; entry: AL

put_ch_lcd: call lcd_ready
            mov dx,lcd+data_write
	    out dx,al
            ret


TEST_LCD  CALL INIT_LCD
	  MOV SI,TEXT
	  CALL PUT_STR_LCD
	  mov bx,0001
	  call goto_xy
	  mov si,text2
	  call put_str_lcd
	  ret

TEXT      DFB "Hello John",0
text2     dfb "Merry X-mas",0


	  END

Logo

免费领 150 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐