📄 1602液晶仿真的一些发现.txt
字号:
1602液晶仿真的一些发现
看了JJJ的例子:字符液晶1602仿真测试
按自己习惯也写了个,发现些问题
一、
JJJ说仿真时要屏蔽掉检查LCD忙的代码,否则会死循环
while(DBPort&0x80); //这句要屏蔽
我写的程序总是无法正确仿真,因为不检查LCD忙,就不能保证LCD已经空闲
查资料LCD清屏命令要1.64ms才完成,一般命令也要40us,最后加上足够的延时后才仿真通过
后来又试了下其它LCD资料上的例程,仿真发现检查LCD忙标志也不会死循环
分析了下,区别是:它不是一直在使能的情况下读忙信号,而是每次都有EN=0,再EN=1重新读取忙标志
我还没做好实际实验电路板,没试过实际电路
根据JJJ的描述和我的仿真实验,我猜仿真和实际硬件的区别是:
实际硬件在EN=1的情况下,LCD执行完指令会更新LCD忙标志为0;
而仿真需要EN=0,EN=1来重新读取忙信号,否则就不会更新,而一直以为是忙
在JJJ的LCD1602.h加了几句,变成
while(DBPort&0x80)
{ LcdEn=0; _nop_();
LcdEn=1; _nop_();
}
仿真就可以检查忙标志了
自己的代码也做相应改动,都可以成功检查忙标志,也无需多加延时了
二、
在包含文件.H里定义函数实体,则keil调试时会出现莫名其秒的问题:
在主程序.c里,执行"运行到指定行",可能实际是执行到了.H里的函数所生成的代码,有点混乱
暂停时,光标所指的行未必真是当前正在执行的,总之比较乱
所以我把函数定义实体另放在一个.c里,使用时添加到工程里,而.h只有函数声明和主程序需要用的常量定义
三、
还有一个奇怪的问题:
执行命令0x05,输入方式设置为字符右移,光标不动时,仿真总是无法正常显示
其它输入方式都正常!
附件包含LCD1602.H和lcd1602.c
请大家多多指教
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -