找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 780|回复: 2
收起左侧

驱动51单片机练习LCD1602时遇到的关于忙位和延时的问题

[复制链接]
ID:1067101 发表于 2023-3-18 11:50 | 显示全部楼层 |阅读模式
二手普中A7套装,STC89C516,晶振12MHz,12T模式,按手册资料写LCD1602的简单模块,遇到几个问题:

1. 检查忙位读到0跳出死循环,但是写数据操作只能成功25%。搜到不少中文资料也提到有类似问题,有解决方法吗?

2. 然后用软件延时,调参后发现实际需要的时间略小于各种资料上给出的值很多就能稳定。这和主频有关吗?换更好的MCU是不是能进一步较小在程序里的软件延时?
资料250kHz,清屏和复位1640us,写40us
资料270kHz,清屏和复位1520us,写37us
实验12MHz,清屏和复位1400us,写25us

3. 我手写的单变量和计算器给出的延时编译后占用code和data数量一样。数值调整到稳定后,参数如下,i--和--i的速度是不是差距较大?
unsigned char i, j;
i = 3;j = 182;
do
{
        while (--j);
} while (--i);



unsigned char time=255;
while (time--);


4. 不少资料的写操作中,会在置高电平和置低电平后分别delay,我的实验中发现只需要在高电平后delay一次,是不是这款MCU才能这样,不能普遍运用到其他MCU?当然,LCDWrite(CMD,0x01)或LCDWrite(CMD,0x02)之后还是要delay 1.5ms。

5. 十几年前的一份资料说,初始化时模式要发三次,是不是对于现在的MCU不再适用?
回复

使用道具 举报

ID:384109 发表于 2023-3-18 20:18 | 显示全部楼层
对于操作1602这类模块,出现问题如果确定硬件没问题,那就是软件的问题了
回复

使用道具 举报

ID:1067101 发表于 2023-3-19 00:05 | 显示全部楼层
人中狼 发表于 2023-3-18 20:18
对于操作1602这类模块,出现问题如果确定硬件没问题,那就是软件的问题了

感谢指点。
重新翻阅一遍资料,整理一遍思路,在读写数据的函数最前面检查忙信号,成功了。
各种资料中的软件延时、P0=0xff上拉操作在实验中都没有必要。
合并写命令和写数据时,rs类型用uchar比部分资料中的bit更省code和data。

主楼中还有问题3,还望指点。


代码如下:

void LCD_Wait()
{
        unsigned char uchar0;
        LCD1602_RS=0;
        LCD1602_RW=1;
        LCD1602_E=1;
        while(1){
                uchar0=LCD1602_D;
                if(uchar0>>7==0)break;
        }
        LCD1602_E=0;
}

void LCD_Write(unsigned char rs, unsigned char uchar0)
{
        LCD_Wait();
        LCD1602_RS=rs;
        LCD1602_RW=0;
        LCD1602_D=uchar0;
        LCD1602_E=1;
        LCD1602_E=0;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表