最近做了一个16f84频率计,电路图要求用1601,我用的是1602,结果字符串提前换行。增加测试代码发现后发现,从第一行第一个字符位置开始输出,输出到第9个的时候就开始自动换行。最后结果是前8个在第一行后8个在第二行,lcd后半截是空的。如果修改指令从第1行第9个开始显示,则显示结果合理。
部分代码:
start clrf port_a ;instruction, write, enable low
movlw b'
tris port_a
clrf port_b
movlw b'
tris port_b
call int_del
call int_del
call int_del
; movlw 0x38 ;initialize display
movlw b' ;设置为8位,双行,5*7
movwf port_b
bsf port_a,e ;toggle enable
call int_del
bcf port_a,e
bsf port_a,e ;toggle enable
call int_del
bcf port_a,e
bsf port_a,e ;toggle enable
call int_del
bcf port_a,e
movlw 0x38 ;function
call inst
movlw b' ;display on, cursor off
call inst
movlw b' ;clear display
call inst
movlw b' ;entry mode
call inst
test
movlw 0x80 ;set display address
call inst
movlw 0x30 ;"0"
call lcd_out
movlw 0x31 ;"1"
call lcd_out
movlw 0x32 ;"2"
call lcd_out
movlw 0x33 ;"3"
call lcd_out
movlw 0x34 ;"4"
call lcd_out
movlw 0x35 ;"5"
call lcd_out
movlw 0x36 ;"6"
call lcd_out
movlw 0x37 ;"7"
call lcd_out
movlw 0x38 ;"8"
call lcd_out
movlw 0x39 ;"9"
call lcd_out
movlw 0x41 ;"a"
call lcd_out
movlw 0x42 ;"b"
call lcd_out
movlw 0x43 ;"c"
call lcd_out
movlw 0x44 ;"d"
call lcd_out
movlw 0x45 ;"e"
call lcd_out
movlw 0x46 ;"f"
call lcd_out
goto test