⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1602液晶仿真的一些发现.txt

📁 用Led显示时间,年月日和时分秒。 动态显示的数码管。用定时器控制
💻 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 + -