谁能指点一下使用单片机PIC16F877A,用ht1621驱动LCD的程序啊,有样例吗,在网上查了很多,

2024-12-28 09:01:49
推荐回答(2个)
回答1:

这是程序的一个片段,你要仔细琢磨

;-------------自定义寄存器--------
#DEFINE RS PORTC,3 ;命令/数据选择
#DEFINE RW PORTC,4 ;读/写选择
#DEFINE E PORTC,5 ;使能信号
;--------------------------初始化LCD---------------------
BSF PCLATH,3
BCF PCLATH,4
MOVLW B'00111000' ;8位字长,2行字符,5*7点位
CALL SEND_I
MOVLW B'00000001' ;清屏
CALL SEND_I
MOVLW B'00000010' ;归位(home)
CALL SEND_I
MOVLW B'00000110' ;06H指定在写入或读取时,光标的移动方向
CALL SEND_I
MOVLW B'00001100' ;0CH开显示,关光标,不闪烁
CALL SEND_I
BCF PCLATH,3
;-----------------------------------------------------------------
SEND_I CLRWDT ;内含C端口设置
MOVWF TEMP1 ;暂存命令
CALL CHK_BUSY ;判断总线是否忙
BCF RS
BCF RW
MOVFW TEMP1
MOVWF PORTD ;送命令
BSF E
NOP
NOP
NOP
NOP
NOP
NOP
BCF E
RETURN
;-----------------------判断总线是否忙--------------------
;测忙碌子程序
;RS=0,RW=1,E=H,D0-D7=状态字
;---------------------------------------------------------
CHK_BUSY MOVLW 0FFH
MOVWF PORTD
BSF STATUS,5
MOVLW 0FFH
MOVWF TRISD ;D口设置为输入
CLRF STATUS
BCF RS
BSF RW
CHECK_BUSY_1 CLRWDT
NOP
NOP
BSF E
NOP
NOP
NOP
NOP
BTFSS PORTD,7 ;D7为高表示总线忙,为低表示总线空闲
GOTO $+7
NOP
NOP
NOP
NOP
BCF E
GOTO CHECK_BUSY_1
BCF E
NOP
NOP
BANKSEL TRISD
CLRF TRISD ;恢复D口为输出
RETURN
;***************************延时程序***************************
DELAY BCF STATUS,5
BCF STATUS,6 ;BANK0
MOVLW 077H ;32H
MOVWF COUNT3
CLRWDT
DECFSZ COUNT3,1
GOTO $-2
RETURN
;-------------------------------------------------
HAN_WR2C MOVLW LOW(TAB1C) ;(Continuous)
MOVWF POINT
MOVLW HIGH(TAB1C)
MOVWF POINT1
MOVLW 10H
MOVWF COUNT
MOVLW B'10000000' ;在(第1行)显示
CALL SEND_I
CALL QUSHU
CALL DELAY
RETURN
;--------------------------------------------------
HAN_WR2D MOVLW LOW(TAB1D) ;(Push "ON")
MOVWF POINT
MOVLW HIGH(TAB1D)
MOVWF POINT1
MOVLW 10H
MOVWF COUNT
MOVLW B'11000000' ;在(第2行)显示
CALL SEND_I
CALL QUSHU
CALL DELAY
RETURN

回答2:

1:你要确定厂家的实例是什么单片机的实列(常见的LCD实例都为51实列,如果用在PIC一定不行的)。因为I/O操作不同的。
2:试试在主程序中加入一小句点亮I/O的程序看看是不是这个问题。