你好,请注意。把源代码看仔细了。
LCD_RW = 1;是读
LCD_RW = 0;才是写
lcd_busy()函数里的RW是1,那是读状态。
读的时候我只要读最高位,后面是什么对我们来说不重要。
原理,很简单。单片机是处理速度很快的,纳秒级别。LCD相对于单片机来讲很慢,毫秒级别。所以,LCD再处理数据时, 把最高的一位至于高电平,表示数据处理中,等数据处理完毕,把高位拉低电平。单片机跑的快,它先读高位,如果读出来是1,单片机做别的事,一直到读到LCD高位为0时,再对LCD进行 *** 作。所以LCD这样定义:STA7为读写 *** 作使能位,1代表禁止,0代表允许。
TM1622 程序调试过程中出现个别RAM段码显示异常,缺段(段比较暗),影响TM1622其他ROM未写入数据的段也有比较暗的显示。
这个问题现在想来应该比较好笑,只是当时调试的时候一时没有缓过来,记录下来用以提醒一下自己。
在出现这个问题时,第1反应,可能是我的1622配置没有设置好,对照TM1622的数据手册,增加了NORMAL命令,命令格式如下:
这个命令1622上电复位后是缺省默认的,可以不写入,事实证明写入这边命令之后依然没有用。
再次怀疑时序延时不够,1622手册延时,如下:5V写模式下,时间改未5us,情况依然如此。
后逐个对1622的RAM写数据,找到出问题的RAM,才怀疑芯片坏了,这才想到硬件问题,检查RAM地址对应的SEG引脚,因为1622使用的LQFP6封装,引脚脚距比较密,手工焊接此芯片时,将芯片的引脚连焊了。重新焊接问题解决,但此时已经耗费我好长时间,记录下来以此提醒自己。正常显示如下:
程序设计说明记录:
段码显示屏,没有使用RD脚,使用STC8A8K64S4芯片,RAM空间大,采用两个64字节RAM数据来对应1622的0-63个地址,其中每个字节高4位对应D0,D1,D2,D3;
uchar Ht1622Tab[64];
uchar Ht1622TabB[64];
将Ht1622TabB做为LCD前窗RAM,Ht1622Tab数组做为后置RAM,两个数组数据单元一一进行与&运算,并将结果定时写入到1622的RAM中进行显示;
全部显示后置RAM时:将Ht1622TabB全部数组高四位置1;
局部显示后置RAM时:将Ht1622TabB需要屏蔽的数组数据某个位写0;
闪烁显示某个段时:定时将将Ht1622TabB对应数组数据某个位写0即可。
以上就是关于为什么单片机连接12864LCD每次写数据前都要确保STA7=0;全部的内容,包括:为什么单片机连接12864LCD每次写数据前都要确保STA7=0;、1622芯片坏了、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)