1602液晶显示乱码
液晶显示器初始化后,会首先显示数据缓存里的数据,所以初始化1602之后,要紧接着马上清缓存。
清缓存?就是清屏命令吧,写命令赋值0x01,我也有这一句啊!能详细说一下吗?
清缓存就是把所有的全部清0
清缓存不是清屏,是把空格符写进所有1602的显示缓存中,让屏幕全屏显示空格,也就是把 ' ' 写进32位显示中去
void LCD_Init(void)
{
LCD_Write_Com(0x38); /*显示模式设置*/
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08); /*显示关闭*/
LCD_Write_Com(0x01); /*显示清屏*/
LCD_Write_Com(0x06); /*显示光标移动设置*/
DelayMs(5);
LCD_Write_Com(0x0C); /*显示开及光标设置*/
}
这是我的液晶初始化函数,你能看下有什么问题吗?
清除缓存,全屏显示空格,难道还要写如下命令吗?
LCD_Write_Com(0x80);for(i=0;i<16;i++) LCD_Write_Data(' ');
LCD_Write_Com(0xc0);for(i=0;i<16;i++) LCD_Write_Data(' ');
求大神赐教啊!
是的, LCD_Init()之后,要加上
LCD_Write_Com(0x80);for(i=0;i<16;i++) LCD_Write_Data(' ');
LCD_Write_Com(0xc0);for(i=0;i<16;i++) LCD_Write_Data(' ');
清缓存,也就是显示全屏空格,你也可以把这个定义成一个清显示的函数,以后会用到的:
#defined LCD_CLEAR_FIRST_LINE 0
#defined LCD_CLEAR_SECOND_LINE 1
#defined LCD_CLEAR_ALL_LINE 2
void LCD_Clear(unsinged char ClearLine)
{
switch(ClearLine)
{
case LCD_CLEAR_FIRST_LINE:
LCD_Write_Com(0x80);for(i=0;i<16;i++) LCD_Write_Data(' ');
break;
case LCD_CLEAR_SECOND_LINE :
LCD_Write_Com(0xc0);for(i=0;i<16;i++) LCD_Write_Data(' ');
break;
case LCD_CLEAR_ALL_LINE:
LCD_Write_Com(0x80);for(i=0;i<16;i++) LCD_Write_Data(' ');
LCD_Write_Com(0xc0);for(i=0;i<16;i++) LCD_Write_Data(' ');
break;
default:
break;
}
}
哦,少了一句
void LCD_Clear(unsinged char ClearLine)
{
int i;
switch(ClearLine)
{
case LCD_CLEAR_FIRST_LINE:
LCD_Write_Com(0x80);for(i=0;i<16;i++) LCD_Write_Data(' ');
break;
case LCD_CLEAR_SECOND_LINE :
LCD_Write_Com(0xc0);for(i=0;i<16;i++) LCD_Write_Data(' ');
break;
case LCD_CLEAR_ALL_LINE:
LCD_Write_Com(0x80);for(i=0;i<16;i++) LCD_Write_Data(' ');
LCD_Write_Com(0xc0);for(i=0;i<16;i++) LCD_Write_Data(' ');
break;
default:
break;
}
调了很多天还是没解决,抓狂啊!我用一个按键切换三个界面,每换一次界面清屏一次,可还是只有第二个界面在上电时能显示清楚,另两个界面都要先乱码一会儿才显示清楚,请问会是时序问题或者是单片机运行速度太慢的原因吗?
6K的程序不大,你用LCD_Clear()清屏之后,只要不写错数据进去,单片机速度再慢也不会乱码的。出现乱码,可能是你的程序出错,要不就是单片机速度过快,写液晶显示数据的时候延时不够
学习了,你们接着讨论,我接着学习。
学习了,你们接着讨论,我接着学习。
我也有一块,我折腾不好,向你学习,向你致敬!
我的实际电路里P0口没接上拉电阻,用万用表测得高电平只有2伏多,请问AT89C52单片机IO口驱动能力能带动1602吗?
还有,1602感觉占用IO口太多,能否通过I2C传输数据?串行通信是不是一定要1602有I2C通信接口啊?
很多单片机的P0口都是开漏端口,是没有驱动能力的,必须要接上拉电阻,你可以查看你这款单片机的输入输出口说明
要节约IO口,可以用译码器译码,学过数字电路的应该都学过译码器
谢谢大神的细心讲解,另外再想问一下,我最近在做可编程放大器,,因现在还没上数电课,网上的一些资料有些看不懂,我打算利用DA芯片当做一个可变电阻使用,将DA芯片接在运放的负反馈端,请问一般DA芯片可以吗?
111111111111111111111111111111111