📄 lcd display.asm
字号:
;/////////// *************** \\\\\\\\\\\\\
;/////////AHTHOR:Q.P.LIU\\\\\\\\\\\\\\\\\\\
;////////DATA:2007.08.02\\\\\\\\\\\\\\\\\\\\\
;/////////****************** \\\\\\\\\\\\
PROCESSOR 16F74
INCLUDE "E:\COMMON\P16F74.INC"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
CBLOCK 20H
DELAY0
DELAY1
DELAY2
TMPW
CHAR
END_TMPW
TMPW1
TMPW2
ENDC
#DEFINE RD PORTD
#DEFINE RB PORTB
LCD_DATA EQU RD ;PORTD AS LCD DATA INTERFACE
LCD_CMD EQU RB ;PORTB AS LCD COMMAND INTERFACE
EN EQU 2 ;RE,2 AS ENABLE line
RW EQU 1 ;RE,1 AS Read/Write control line
RS EQU 0 ;RE,0 AS Register-Select control line
;------------------------------PROGRAM RESET VECTOR
ORG 00H
GOTO START
START:
NOP
NOP
CALL PIC_INIT
NOP
NOP
CALL LCD_DELAY
NOP
NOP
CALL LCD_INIT
NOP
NOP
CALL LCD_DELAY
NOP
NOP
STEP1:
ABOUT_LINE1:
MOVLW B'10000000' ;SET DD RAM(LINE1)
CALL SEND_CMD
CLRW
DISP11:
MOVWF TMPW1
BSF PCLATH,3
CALL TEXT1 ;DISPLAY LINE 1
BCF PCLATH,3
MOVWF END_TMPW
SUBLW '@'
BTFSC STATUS,Z
GOTO ABOUT_LINE12
MOVF END_TMPW,W
CALL SEND_CHAR
MOVF TMPW1,W
ADDLW .1
GOTO DISP11
ABOUT_LINE12:
MOVLW B'11000000'
CALL SEND_CMD ;LINE2
CLRW
DISP12:
MOVWF TMPW2
BSF PCLATH,3
CALL TEXT2 ;DISPLAY LINE 2
BCF PCLATH,3
MOVWF END_TMPW
SUBLW '@'
BTFSC STATUS,Z
GOTO STEP2
MOVF END_TMPW,W
CALL SEND_CHAR
MOVF TMPW2,W
ADDLW .1
GOTO DISP12
STEP2:
GOTO STEP1
PIC_INIT:
CLRF STATUS
CLRF INTCON
CLRF PIR1
CLRF PIR2
BSF STATUS,RP0
CLRF TRISD
CLRF TRISB
MOVLW B'10001001'
MOVWF OPTION_REG
BCF STATUS,RP0
MOVLW B'00000100' ;THIS IS A KEY STEP.
MOVWF ADCON1
CLRF PORTD
CLRF PORTB
BCF STATUS,RP0
CLRF TMPW
CLRF TMPW1
CLRF TMPW2
CLRF END_TMPW
CLRF CHAR
RETURN
LCD_INIT:
CALL LCD_DELAY
CALL LCD_DELAY
CLRF LCD_CMD
MOVLW B'00111000'
MOVWF LCD_DATA
BSF LCD_CMD,EN
BCF LCD_CMD,EN
CALL LCD_DELAY
;----COMMAND SEQUENCE FOR 2 LINES OF 5x7 DOTS (FUNCTION)
MOVLW 38H
MOVWF LCD_DATA
BSF LCD_CMD,EN
BCF LCD_CMD,EN
;----THE OTHERS(display on/off, clear display, entry mode,
MOVLW B'00001100' ; ON, NOT DISPLAY CURSOR, THE CHARACTER THAT CURSOR BELOW NOT FLASH
CALL SEND_CMD
MOVLW B'00000001' ;CLEAR DISPLAY
CALL SEND_CMD
MOVLW B'00000110' ;ENTRY MODE
CALL SEND_CMD
RETURN
;############# LCD Busy Check
BUSY_CHECK:
BSF STATUS,RP0 ;
MOVLW 0FFH ;
MOVWF TRISD ;set RD as input
BCF STATUS,RP0 ;
BCF LCD_CMD,RS ;LCD in command mode
BSF LCD_CMD,RW ;LCD in read mode
BSF LCD_CMD,EN ;\
BCF LCD_CMD,EN ;/ LCD trigger
MOVF LCD_DATA,W ;
MOVWF TMPW ;
BTFSC TMPW,7 ;test busy flag
GOTO BUSY_CHECK ; busy
BCF LCD_CMD,RW
BSF STATUS,RP0 ;\
CLRF TRISD ; \ LCD not busy; / Set RD as output
BCF STATUS,RP0 ;/
RETURN
;############# SEND COMMAND TO LCD
SEND_CMD:
MOVWF CHAR
CALL BUSY_CHECK ;
MOVF CHAR,W ;
MOVWF LCD_DATA ;
BCF LCD_CMD,RW ;WRITE
BCF LCD_CMD,RS ;COMMAND MODE
BSF LCD_CMD,EN ;\
BCF LCD_CMD,EN ;/ LCD Trigger
RETURN
;############# SEND CHARACTER TO LCD
SEND_CHAR:
MOVWF CHAR
CALL BUSY_CHECK ;
MOVF CHAR,W
MOVWF LCD_DATA ;
BCF LCD_CMD,RW ;WRITE
BSF LCD_CMD,RS ;DATA MODE
BSF LCD_CMD,EN ;\
BCF LCD_CMD,EN ;/ LCD Trigger
RETURN
;----------------------- LCD'S DELAY : 5.4ms
LCD_DELAY:
MOVLW 0XFF
MOVWF DELAY1
MOVWF DELAY0
LCD_DELAY_LOOP:
DECFSZ DELAY0,F
GOTO LCD_DELAY_LOOP
DECFSZ DELAY1,F
GOTO LCD_DELAY_LOOP
RETURN
ORG 0X800
TEXT1
ADDWF PCL,F
DT"YOU ARE ONLY ONE IN@"
ORG 820H
TEXT2
ADDWF PCL,F
DT"THE WORLD!Q.P.LIU@"
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -