本帖最后由 lost1421 于 2011-11-4 13:47 编辑
楼主使用的4位数据总线与LCD1602进行通讯,在进行数据交换时,要注意数据的正确性。
你的代码:
;=======================
;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
-----------
在引脚电平变化后,加几个NOP,不知道你的频率是多少,有可能LCD内部不能及时处理你的信号。
另外LCD的初始化的命令字好像和我以前使用时不一样:
lcd_write_cmd (0x28); // 2 lines, 5x8 character matrix
lcd_write_cmd (0x0C); // Display ctrl: Disp=ON, Curs/Blnk=OFF
lcd_write_cmd (0x06); // Entry mode: Move right, no shift
lcd_write_cmd(0x80); // Set DDRAM address counter to 0 |