这个液晶显示程序怎么不能显示,望各位帮忙解答下,谢谢!
其中RS接单片机的RA3,RW接RA2,EN接RA1。液晶采用4线数据传输方式,液晶的D7~D4分别接PIC单片机16f873a的RB0~RB3
LIST P=16F873A ; 告诉编译程序使用何种PIC单片机
INCLUDE "p16f873A.inc" ; 定义了特殊寄存器等内容的头文件
__CONFIG _PWRTE_OFF & _XT_OSC & _WDT_OFF ; 配置字
COM EQU 20H ;指令专用寄存器
DAT EQU 21H ;数据专用寄存器
I EQU 25H
J EQU 26H
RS EQU 3 ;指令数据信号线
RW EQU 2 ;读/写指令信号线
EN EQU 1 ;使能信号线
ORG 0X00
GOTO main
ORG 0X10
;=====================
;延时5ms子函数
;=====================
DELAY
MOVLW 0AH
MOVWF I
D1
MOVLW 0A4H
MOVWF J
D2
DECFSZ J ;J自动减1为0则跳
GOTO D2
DECFSZ I ;I自动减1为0则跳
GOTO D1
RETLW 0
;========================
;1602忙检测函数
;========================
BUSY
BSF STATUS,05H ;选择寄存器体1
BCF STATUS,06H
MOVLW 0FFH
MOVWF TRISB ;将RB口置位输入
BCF STATUS,05H
BCF PORTA,RS ;选择指令
BSF PORTA,RW ;选择读
BSF PORTA,EN ;使能线电平变化
BTFSC PORTB,00H ;读忙状态,不忙时退出,忙时继续检测
GOTO BUSY
BCF PORTA,EN ;恢复使能电平
BSF STATUS,05H ;返回寄存器体0
MOVLW 0FH
MOVWF TRISB ;将RB0置为输出
BCF STATUS,05H
RETURN
;=======================
;1602写指令
;=======================
LCD_COM
BCF PORTA,RS ;选择指令寄存器
BCF PORTA,RW ;选择写
MOVF COM,W
MOVWF PORTB ;送命令字到RB口
BSF PORTA,EN ;使能电平置高,命令字传送
NOP
BCF PORTA,EN ;恢复使能线电平
RETURN
;======================
;1602写数据指令
;======================
LCD_DAT
BSF PORTA,RS ;选择数据寄存器
BCF PORTA,RW ;选择写
MOVF DAT,W ;将数据送到B口
MOVWF PORTB
BSF PORTA,EN ;使能线电平置高,数据传送
NOP
BCF PORTA,EN
RETURN
;======================
;1602初始化函数
;D4~D7对应RB3~RB0
;======================
LCDRESET
CALL DELAY ;延时15ms
CALL DELAY
CALL DELAY
MOVLW 02H ;送命令字28H,液晶模式设置:4位数据,双行,5*7点阵
MOVWF COM
CALL LCD_COM
MOVLW 08H
MOVWF COM
CALL LCD_COM
CALL DELAY
MOVLW 02H ;重复读写命令字28H3次
MOVWF COM
CALL LCD_COM
MOVLW 08H
MOVWF COM
CALL LCD_COM
CALL DELAY
MOVLW 02H
MOVWF COM
CALL LCD_COM
MOVLW 08H
MOVWF COM
CALL LCD_COM
CALL DELAY
CALL BUSY
MOVLW 02H ;显示模式设置 4位数据,双行,5*7字符点阵
MOVWF COM
CALL LCD_COM
MOVLW 08H
MOVWF COM
CALL LCD_COM
CALL BUSY
MOVLW 00H ;显示开关控制 显示功能关,无光标
MOVWF COM
CALL LCD_COM
MOVLW 08H
MOVWF COM
CALL LCD_COM
CALL BUSY
MOVLW 00H ;清屏指令
MOVWF COM
CALL LCD_COM
MOVLW 01H
MOVWF COM
CALL LCD_COM
CALL BUSY
MOVLW 00H ;设置输入模式 地址自动加1,写入新的数据后,
;光标右移, 显示屏不移动
MOVWF COM
CALL LCD_COM
MOVLW 06H
MOVWF COM
CALL LCD_COM
CALL BUSY
MOVLW 00H ;显示开关控制, 显示功能开,光标显示
MOVWF COM
CALL LCD_COM
MOVLW 0FH
MOVWF COM
CALL LCD_COM
RETURN
;=========================
;初始化函数
;=========================
INIT
CLRWDT
BSF STATUS, RP0
BCF STATUS, RP1
MOVLW 0EH ;RA0为模拟量输入口,其他为数字量
MOVWF ADCON1
MOVLW 80H
OPTION ;关闭RB口电平变化功能
MOVLW 0D1H
MOVWF TRISA ;RA1,RA2,RA3,RA5置为输出,其他未用设置为输入
MOVLW 0C0H
MOVWF TRISB ;RB0-RB5置为输出,其他为未用设置为输入
MOVLW 0FEH
MOVWF TRISC ;RC0为输出,其他未用设置为输入
BCF INTCON, 3 ;RB口电平变化中断禁止
BCF STATUS, RP0
RETURN
;=======================
;主函数
;=======================
main
CALL INIT
CALL LCDRESET
CALL BUSY
MOVLW 08H ;写第一行起始地址80H
MOVWF COM
CALL LCD_COM
MOVLW 00H
MOVWF COM
CALL LCD_COM
CALL BUSY
MOVLW 04H ;送字母'A'的ASCII码41H,显示'A'
MOVWF DAT
CALL LCD_DAT
MOVLW 01H
MOVWF DAT
CALL LCD_DAT
STOP
CLRWDT
GOTO STOP
END |