找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机驱动lcd1602显示乱码

查看数: 6229 | 评论数: 12 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-9-23 16:24

正文摘要:

仿真lcd1602秒的十位是正常的,一到做实物,lcd1602显示的秒十位就是乱码。 在线求解 实物的秒的十位显示错误,成了;或者超过了6的各种奇怪乱码

回复

ID:822755 发表于 2020-9-26 10:15
可能是读出的时钟数据没有屏蔽掉无关的位。
ID:620337 发表于 2020-9-26 09:01
原因:程序语句里是否含有中文字符,或者不可见字符,第二,通信异常,延迟不足也会产生,但是我更觉得是字符问题
ID:16255 发表于 2020-9-24 23:49
我估计你是用到时钟芯片了。DS1302、1307等。
可能是读取芯片数据没有正确读取出来,
检查一下程序是否正确?适当加一点延时可能会有帮助。
数据线是否正确连接?数据线上加上拉电阻了吗?
ID:117977 发表于 2020-9-24 13:18
两个思路  读取1302的时序适当加点延时,1302坏 换一片 读取的数据可以通过发串口来测试
ID:117977 发表于 2020-9-24 13:16
理论上你是在读DS1302的时钟,但是没看到你这部分代码
ID:315554 发表于 2020-9-24 12:40
有DS1302等芯片吗?IO线接对没,芯片确定正常?我以前遇过时钟芯片不正常有类似情况,99:00
ID:822755 发表于 2020-9-24 12:05
检查写的字符串有没有结束符“\x00",  
ID:96682 发表于 2020-9-24 05:15
除了使用不同参数的芯片外,无需修改延时数值
ID:553020 发表于 2020-9-23 22:10
长风007 发表于 2020-9-23 17:12
查一下你的显示位,还有显示的时间间隔。实物是有时序要求的!

这是lcd1602的程序,时序有问题吗?

#include "LCD1602.h"

//****************************************************
//MS延时函数(12M晶振下测试)
//****************************************************
void LCD1602_delay_ms(unsigned int n)
{
        unsigned int  i,j;
        for(i=0;i<n;i++)
                for(j=0;j<123;j++);
}

//****************************************************
//写指令
//****************************************************
void LCD1602_write_com(unsigned char com)
{
        LCD1602_RS = 0;
        LCD1602_delay_ms(1);
        LCD1602_EN = 1;
        LCD1602_PORT = com;
        LCD1602_delay_ms(1);
        LCD1602_EN = 0;
}

//****************************************************
//写数据
//****************************************************
void LCD1602_write_data(unsigned char dat)
{
        LCD1602_RS = 1;
        LCD1602_delay_ms(1);       
        LCD1602_PORT = dat;
        LCD1602_EN = 1;
        LCD1602_delay_ms(1);
        LCD1602_EN = 0;
}

//****************************************************
//连续写字符
//****************************************************
void LCD1602_write_word(unsigned char *s)
{
        while(*s>0)
        {
                LCD1602_write_data(*s);
                s++;
        }
}

void Init_LCD1602()
{
        LCD1602_EN = 0;                                                //设置为写状态
        LCD1602_write_com(0x38);                        //显示模式设定
        LCD1602_write_com(0x0c);                        //开关显示、光标有无设置、光标闪烁设置
        LCD1602_write_com(0x06);                        //写一个字符后指针加一
        LCD1602_write_com(0x01);                        //清屏指令
}


ID:337139 发表于 2020-9-23 17:12
本帖最后由 长风007 于 2020-9-23 17:16 编辑

查一下你的显示位,还有显示的时间间隔。实物是有时序要求的!

Hei002.jpg (61.75 KB, 下载次数: 87)

可以参考一下这个图

可以参考一下这个图
ID:553020 发表于 2020-9-23 16:26
除了仿真使用的是89c52,实物使用的是89c54RD芯片以外,其余连接均和仿真一样
ID:155507 发表于 2020-9-23 16:24

你要搞清楚时序图





//****************************************************
//写指令
//****************************************************
void LCD1602_write_com(unsigned char com)
{
        LCD1602_RS = 0;
        //LCD1602_delay_ms(1);
        LCD1602_EN = 0;  //<------
        LCD1602_PORT = com;
        LCD1602_EN = 1;  //<------
        LCD1602_delay_ms(1);
        LCD1602_EN = 0;
}

//****************************************************
//写数据
//****************************************************
void LCD1602_write_data(unsigned char dat)
{
        LCD1602_RS = 1;
        //LCD1602_delay_ms(1);
        LCD1602_EN = 0;    //<------     
        LCD1602_PORT = dat;
        LCD1602_EN = 1;
        LCD1602_delay_ms(1);
        LCD1602_EN = 0;
}


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

Powered by 单片机教程网

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