初学LCD1602:只给1602写入指令不能控制光标的问题。
时间:10-02
整理:3721RD
点击:
各位前辈好,小弟初学单片机,这几天遇到了个问题:
#include<reg52.h>
#define LCD_D P0
sbit LCD_RW=P2^5;
sbit LCD_RS=P2^6;
sbit LCD_E=P2^7;
void LCD_WriteCom(unsigned int com);
void LCD_WriteDat(unsigned int date);
void LCD_init();
void delay(unsigned int c);
void delay(unsigned int c)
{
unsigned int a,b;
for (; c>0; c--)
{
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
void LCD_WriteCom(unsigned int com)//1602写指令函数
{
LCD_RS=0;
LCD_RW=0;
LCD_E=0;
LCD_D=com;
delay(5);
LCD_E=1;
delay(5);
LCD_E=0;
}
void LCD_WriteDat(unsigned int date)//1602写数据函数
{
LCD_RS=1;
LCD_RW=0;
LCD_E=0;
LCD_D=date;
delay(5);
LCD_E=1;
delay(5);
LCD_E=0;
}
void LCD_init()//1602初始化函数
{
LCD_WriteCom(0x38);
LCD_WriteCom(0x08);
LCD_WriteCom(0x06);
LCD_WriteCom(0x01);
}
void main()
{
LCD_init();
while(1);
}
上面的程序写入单片机之后,出现了图中的现象,我在初始化的第二行里写的是不开光标,光标也不闪烁,但是现在光标在第一行第一位闪烁而且整个黑块跟光标在同时闪烁,不管我的初始化第二行里写入什么样的数据情况都是一样的,求高手解答,多谢了。
#include<reg52.h>
#define LCD_D P0
sbit LCD_RW=P2^5;
sbit LCD_RS=P2^6;
sbit LCD_E=P2^7;
void LCD_WriteCom(unsigned int com);
void LCD_WriteDat(unsigned int date);
void LCD_init();
void delay(unsigned int c);
void delay(unsigned int c)
{
unsigned int a,b;
for (; c>0; c--)
{
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
void LCD_WriteCom(unsigned int com)//1602写指令函数
{
LCD_RS=0;
LCD_RW=0;
LCD_E=0;
LCD_D=com;
delay(5);
LCD_E=1;
delay(5);
LCD_E=0;
}
void LCD_WriteDat(unsigned int date)//1602写数据函数
{
LCD_RS=1;
LCD_RW=0;
LCD_E=0;
LCD_D=date;
delay(5);
LCD_E=1;
delay(5);
LCD_E=0;
}
void LCD_init()//1602初始化函数
{
LCD_WriteCom(0x38);
LCD_WriteCom(0x08);
LCD_WriteCom(0x06);
LCD_WriteCom(0x01);
}
void main()
{
LCD_init();
while(1);
}
上面的程序写入单片机之后,出现了图中的现象,我在初始化的第二行里写的是不开光标,光标也不闪烁,但是现在光标在第一行第一位闪烁而且整个黑块跟光标在同时闪烁,不管我的初始化第二行里写入什么样的数据情况都是一样的,求高手解答,多谢了。
1602显示效果图
这个……看看再说吧,,,
怎么没人啊 什么情况啊 难道很难吗?
那个初始化的时候每条指令是需要加延时的,否则1602接收不到的。
加入这条语句在初始化中LCD_WriteCom(0x0c);
并且把你的init()语句中的LCD_WriteCom(0x08);去掉
0x0c的意思是开显示 但是光标不闪烁 刚改完了还是老样子。
加了延时,都是5ms,还是老样子