论坛风格切换切换到宽版
  • 3876阅读
  • 7回复

求助:1602显示提前换行问题 [复制链接]

上一主题 下一主题
离线sea123
 
发帖
33
只看楼主 倒序阅读 0楼 发表于: 2008-05-06
最近做了一个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
本主题包含附件,请 登录 后查看, 或者 注册 成为会员
离线一异
发帖
868
只看该作者 1楼 发表于: 2008-05-06
我没有用过这东西,但我估计是这个产品固有的问题。或者是你用的显示模式设置问题。
如果不是设置问题,建议用软件来修正。
方法是:
设置两个十六字符的缓冲区,现将内容显示送进缓冲区,如果现实内容不够16字符,一定要记得将空白的地方填上空格。
然后设置从第1行第一个字符开始,将缓冲区的前八个字符送到液晶显示器;修改指令从第1行第9个字符开始,将后面八个字符送到液晶显示器。第二行照此办理。
离线一异
发帖
868
只看该作者 2楼 发表于: 2008-05-06
另外,不知道你用的什么cpu,难道没有c语言编译器可用吗?
现在编译器已经做得很好了,除非在非常特殊的场合,一般都没有必要采用汇编了。
离线sea123
发帖
33
只看该作者 3楼 发表于: 2008-05-06
找到原因了,是软件问题,受到另外一版pic16f84频率计调试说明启发,找到了代码中的问题。代码中有一个设定偏移的函数,是该函数导致的。按照楼上的提示也可以定位到该错误位置,多谢了。本菜鸟没写过pic16f84程序,第一次看pic16f84的汇编代码,正晕呢。汇编的确比c麻烦多了。
离线汤圆
发帖
1157
只看该作者 4楼 发表于: 2008-05-06
必须每个位置都送数据 如果没有数据送 会出现问题 意思是在对应屏幕的寄存器地址上给数据 没有的给空格 1602 12864我都遇到这样问题 还有重复字问题
离线小比尔/5
发帖
2582
只看该作者 5楼 发表于: 2008-05-06
[quote=一异]我没有用过这东西,但我估计是这个产品固有的问题。或者是你用的显示模式设置问题。
如果不是设置问题,建议用软件来修正。
方法是:
设置两个十六字符的缓冲区,现将内容显示送进缓冲区,如果现实内容不够16字符,一定要记得将空白的地方填上空格。
然后设置从第1行第一个字符开始,将缓冲区的前八个字符送到液晶显示器;修改指令从第1行第9个字符开始,将后面八个字符送到液晶显示器。第二行照此办理。[/quote]

汇编的程序,我看晕了
1602正常使用是没有这个问题的
看看地址计算有没有问题,硬件有没有问题

我有一次两条数据线相连,结果显示的时候有个别字乱码
离线sea123
发帖
33
只看该作者 6楼 发表于: 2008-05-06
伟大的坛啊,的确让人长见识,谢谢各位了。
离线一异
发帖
868
只看该作者 7楼 发表于: 2008-05-06
[quote=小比尔/5]汇编的程序,我看晕了
1602正常使用是没有这个问题的
看看地址计算有没有问题,硬件有没有问题

我有一次两条数据线相连,结果显示的时候有个别字乱码[/quote]

我基本上不会去看程序,虽然我是学软件的,也经常编软件。
至于汇编,我是肯定不会去看的。