📄 donghua.asm
字号:
LIST P=16F877A
#INCLUDE <P16F877A.INC>
ERRORLEVEL 2
XCS EQU 20H ;显示器片选0=CS1,1=CS2 ;20H-2FH为位
BZPD EQU 21H ;0=上8X8半字,1=下8X8半字
HHBZ EQU 22H ;换行标志
HZDH EQU 23H
INDEX EQU 24H
LCDFLAG EQU 25H
R4 EQU 26H
R5 EQU 27H
R6 EQU 28H
R7 EQU 29H
R0 EQU 2AH ;0=显示汉字,1=显示动画
LCD_RW EQU 1
LCD_DI EQU 0
LCD_E EQU 2
LCD_CS1 EQU 3
LCD_CS2 EQU 4
LCD_RST EQU 5
LCD_OPEN EQU 30H
LCD_LINE EQU 31H
LCD_PAGE EQU 32H
LCD_Y EQU 33H
YCPD EQU 34H ;左右半屏溢出判断
HHPD EQU 35H ;换行判断
XWPD EQU 36H
R1 EQU 37H
R2 EQU 38H
R3 EQU 39H
INDEX1 EQU 42H
INDEX2 EQU 41H
INDEX3 EQU 43H
YCPD1 EQU 40H
;写完一整屏判断
ORG 0000H
NOP
GOTO MAIN
ORG 005H
MAIN
BANKSEL TRISC
MOVLW 00H
MOVWF TRISC
MOVWF TRISD
BANKSEL PORTC
BCF PORTC,LCD_RST
CALL DLY10
CALL DLY10
BSF PORTC,LCD_RST
MOVLW 00H
MOVWF XCS
MOVLW 01H ;选择CS2
MOVWF LCD_OPEN ;开显示器1,关显示器
CALL LCDOPEN
CALL QINGPING
CALL DLY10
MOVLW 01H
MOVWF XCS
MOVLW 01H ;选择CS2
MOVWF LCD_OPEN ;开显示器1,关显示器
CALL LCDOPEN
CALL QINGPING
CALL DLY10
NOP
CALL HANZI
LOOPM: GOTO LOOPM
;********************************************************************
QINGPING:
MOVLW 00H
MOVWF LCD_LINE
CALL SETLINE ;设置起始
MOVLW 00H
MOVWF LCD_PAGE
CALL SETPAGE ;设置页地
MOVLW 00H
MOVWF LCD_Y
CALL SETY ;设置列地
;CS1
GOTO CLRST3
CLR0: INCF LCD_PAGE,F
CLRST3: CALL SETPAGE
MOVLW 40H
MOVWF R7
SDF: MOVLW 00H
MOVWF LCDFLAG
CALL LCDWRDATA
DECFSZ R7,F
GOTO SDF
MOVLW 0BFH
XORWF LCD_PAGE,W
BTFSS STATUS,Z
GOTO CLR0
RETURN
;初始化完毕
;*************************************************************************
HANZI:
MOVLW 00H
MOVWF XWPD
HZ0: CLRF XCS
MOVLW 00H
MOVWF R1
MOVLW 00H
MOVWF INDEX2
MOVLW 00H
DH0:
MOVWF XWPD
DH1:
CLRF XCS
MOVLW 00H
MOVWF LCD_LINE
CALL SETLINE ;设置起始
MOVLW 00H
MOVWF LCD_PAGE
CALL SETPAGE ;设置页地
MOVLW 00H
MOVWF LCD_Y
CALL SETY
MOVLW 00H
MOVWF HHPD
MOVWF R1
DH2:
MOVLW 40H
MOVWF R0 ;写上64个Y列
DH3:
MOVFW R1
CALL HZDOT
CLRF PCLATH
MOVWF LCDFLAG
CALL LCDWRDATA
INCF R1,F
LOOPAN:
INCF LCD_Y,F
DECFSZ R0,F
GOTO DH3
MOVLW 01H
XORWF XCS,W
BTFSC STATUS,Z
GOTO DH4
MOVLW 01H
MOVWF XCS
MOVLW 0B8H
CALL SETPAGE
MOVLW 00H
MOVWF LCD_Y
CALL SETY
GOTO DH2
DH4:
CLRF STATUS
CLRF XCS ;写完一行后从CS2返回到CS1
INCF LCD_PAGE
CALL SETPAGE ;下一行开始
MOVLW 00H
MOVWF LCD_Y
CALL SETY
INCF HHPD
MOVLW 08H
XORWF HHPD,W
BTFSS STATUS,Z
GOTO DH2
CLRF STATUS
INCF XWPD,F ;换第二幅画面
MOVLW 01H
XORWF XWPD,W
BTFSS STATUS,Z
GOTO DH1
NOP
RETURN
LCDWRINST: NOP
BSF PORTC,LCD_RST
CLRF STATUS
MOVLW 01H
XORWF XCS,W
BTFSC STATUS,Z
GOTO INS0
BSF PORTC,LCD_CS1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -