故障集锦--st7920无法显示中文和设置光标位置

故事的起因很简单,一块以前做完的显示电路现在需要装到测试盒里面,供人测试芯片,用的是51的芯片,12864M的显示屏,内置的是st7920的控制驱动器。但是呢,在装盒的过程中,发现显示屏坏掉了,无法显示东西,就去买了一个新的显示屏,好了,故事就从现在起发生了。

st7920简介

要说故障解决,就要先介绍一下st7920,方便后面的说明。
st7920是一个控制驱动器,用于中文图形液晶模块,比如我买的那个LCD显示屏就是用的这个模块。
它的接口如下:
故障集锦--st7920无法显示中文和设置光标位置_第1张图片
它的指令集如下:
故障集锦--st7920无法显示中文和设置光标位置_第2张图片
知道指令集和接口,基本上就可以写程序了。

问题说明

插上显示屏之后,看到屏幕上没有字而是一些乱码。第一反应就是程序的中文输出的格式和显示屏的不一样,所以就开始了我的调试之路。

故障调试

  1. 文字格式
    st7920的汉字编码方式GB,所以乱码很有可能是编码问题,为了安全起见,我直接输入GB的编码,下面是GB编码表节选:

故障集锦--st7920无法显示中文和设置光标位置_第3张图片
于是我直接输入一个0xB1F0是一个“别”字,但是,却输出不了这个汉字。所以不是文字格式问题。

  1. 接线问题

既然不是格式问题,那很有可能是哪根线接错了,因为程序错的概率很小,毕竟以前还是可以正常显示的。
于是开始找线的问题,这个很好排除,万能表一侧,发现都通着呢,所以接线问题排除。

  1. 显示器问题

输出格式没有错,接线没有错,很容易想到会不会是显示的问题,为了探究是不是显示器的问题,我先输入了一段英文字符和数字,发现可以显示,说明显示没问题和接线没问题,但是输入汉字显示不出来,同时,输入英文后,还发现个问题,不能设置光标位置,因为我曾想直接显示英文也行。我怀疑可能是里面的汉字模块坏掉了。
于是我就找到商家,要求测试显示器,其中有一些波折就不提了,直接说结果,就是那个显示器在他们那是可以正常显示汉字的,那个技术员说我这能显示英文就说明板子和显示器都没问题,要我在自己的程序上找。

  1. 程序问题

好吧,找就找,虽然以前可以用,但现在用不了,只能逐个排查,要来了他的测试程序,回来仔细看,发现写入命令和数据和我的都一样。其他不展示了,就说下初始化,因为读写要是有问题的话不可能输出英文。

  Lcd1602_Write_Cmd(0x38);    
    Lcd1602_Write_Cmd(0x0c);	
    Lcd1602_Write_Cmd(0x06);
    Lcd1602_Write_Cmd(0x01);    

和他给的程序做了对比,发现没有任何区别。那么就有意思了,同样的初始化,正常的输入输出,完好的显示屏,板子也能用,问题究竟出在了哪里呢?

名侦探破案时间

大家好,我是身体萎缩头脑依旧灵活的名侦探,此时应该想起BGM。
首先问题是无法显示中文和设置光标位置,同时出现两个问题,那么这两个问题肯定有关联。
首先,写入的光标位置命令起始位为80H,即首位置1,二进制位1000 0000,写入的汉字起始为0xB0A0,换成二进制位1011 0000 1010 0000,所以可以看到,都是首位为1,也就说,D0~D7中的D7数据有问题,为了验证,拿来电压表,一测,发现果然这个引脚输出长为低,问题找到了,解决也就方便了,手边没有其他芯片,直接将另一个引脚接到D0,就解决了。

问题总结

首先,我开始的时候是拿电压表测试过引脚的,但是,测试的时候没太走心,因为其他引脚都正常,可能直接忽略到那个引脚了。
另外,为什么一个引脚不正常还能正常输出英文?因为判断是否繁忙的是后用的是D7那个脚,当D7位1是表忙,为0时表示闲,所以繁忙判断就直接过去了,不影响,而其首位置1的只有游标设置,但是也不影响显示,所以能正常显示英文。
最后,这个问题我觉得很难有人会和我一样,但是,还是想写下来,万一呢?

你可能感兴趣的:(故障集锦)