不知道这个程序有什么问题,液晶怎么不能显示呀?望高手帮帮忙
RS接A3,RW接A2,EN接A1。采用四位数据总线方式传输数据,D7~D4接B3~B0
LIST P=16F873A ; 告诉编译程序使用何种PIC单片机
INCLUDE "p16f873A.inc" ; 定义了特殊寄存器等内容的头文件
__CONFIG _PWRTE_OFF & _XT_OSC & _WDT_OFF ; 配置字
COM EQU 20H ;指令专用寄存器
DAT EQU 21H ;数据专用寄存器
COMR EQU 22H
BUF EQU 23H
I EQU 25H
J EQU 26H
T EQU 27H
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
BCF STATUS,06H
MOVLW 0FFH
MOVWF TRISB
BCF STATUS,05H
BCF PORTA,RS
BSF PORTA,RW
BSF PORTA,EN
BTFSC PORTB,00H
GOTO BUSY
BCF PORTA,EN
BSF STATUS,05H
MOVLW 0FH
MOVWF TRISB
BCF STATUS,05H
RETURN
;=======================
;1602写指令
;=======================
LCD_COM
BCF PORTA,RS
BCF PORTA,RW
BSF PORTA,EN
MOVF COM,W
MOVWF PORTB
BCF PORTA,EN
RETURN
;======================
;1602写数据指令
;======================
LCD_DAT
BSF PORTA,RS
BCF PORTA,RW
BSF PORTA,EN
MOVF DAT,W
MOVWF PORTB
BCF PORTA,EN
RETURN
;======================
;1602初始化函数
;======================
LCDRESET
CALL DELAY
CALL BUSY
MOVLW 02H ;设置显示方式
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 ;第一行起始地址
MOVWF COM
CALL LCD_COM
MOVLW 00H
MOVWF COM
CALL LCD_COM
CALL BUSY
MOVLW 04H ;显示'A'
MOVWF DAT
CALL LCD_DAT
MOVLW 01H
MOVWF DAT
CALL LCD_DAT
STOP
CLRWDT
GOTO STOP
END
| 不知道这个程序有什么问题,液晶怎么不能显示呀?望高手帮帮忙
RS接A3,RW接A2,EN接A1。采用四位数据总线方式传输数据,D7~D4接B3~B0
LIST P=16F873A ; 告诉编译程序使用何种PIC单片机
INCLUDE "p16f873A.inc" ; 定义了特殊寄存器等内容的头文件
__CONFIG _PWRTE_OFF & _XT_OSC & _WDT_OFF ; 配置字
COM EQU 20H ;指令专用寄存器
DAT EQU 21H ;数据专用寄存器
COMR EQU 22H
BUF EQU 23H
I EQU 25H
J EQU 26H
T EQU 27H
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
BCF STATUS,06H
MOVLW 0FFH
MOVWF TRISB
BCF STATUS,05H
BCF PORTA,RS
BSF PORTA,RW
BSF PORTA,EN
BTFSC PORTB,00H
GOTO BUSY
BCF PORTA,EN
BSF STATUS,05H
MOVLW 0FH
MOVWF TRISB
BCF STATUS,05H
RETURN
;=======================
;1602写指令
;=======================
LCD_COM
BCF PORTA,RS
BCF PORTA,RW
BSF PORTA,EN
MOVF COM,W
MOVWF PORTB
BCF PORTA,EN
RETURN
;======================
;1602写数据指令
;======================
LCD_DAT
BSF PORTA,RS
BCF PORTA,RW
BSF PORTA,EN
MOVF DAT,W
MOVWF PORTB
BCF PORTA,EN
RETURN
;======================
;1602初始化函数
;======================
LCDRESET
CALL DELAY
CALL DELAY
CALL DELAY
MOVLW 02H
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
MOVLW 02H
MOVWF COM
CALL LCD_COM
MOVLW 08H
MOVWF COM
CALL LCD_COM
CALL DELAY
CALL BUSY
MOVLW 02H ;设置显示方式
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 ;第一行起始地址
MOVWF COM
CALL LCD_COM
MOVLW 00H
MOVWF COM
CALL LCD_COM
CALL BUSY
MOVLW 04H ;显示'A'
MOVWF DAT
CALL LCD_DAT
MOVLW 01H
MOVWF DAT
CALL LCD_DAT
STOP
CLRWDT
GOTO STOP
END |
|