单片机+lcd1602初始化不成功 求帮助,
大神帮我看看哪儿的问题
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^0;
sbit wr=P2^1;
sbit en=P2^2;
uint i,j;
delay(uint x)
{
while(x–);
}
void write_com(uchar com)
{
rs=0;
wr=0;
en=0;
P1=com;
en=1;
delay(5);
en=0;
}
void write_data(uchar bat)
{
rs=1;
wr=0;
en=0;
P1=bat;
en=1;
delay(5);
en=0;
}
void init()
{
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0f);
}
void main()
{
init();
write_data(“A”);
while(1);
}
,由于对LCD读写数据之前没有判忙,所以延时函数时间就嫌短,导致初始化失败,建议延时1ms左右。
void write_com(uchar com)
{
rs=0;
wr=0;
en=0;
P1=com;
delay(100);
en=1;
delay(100);
en=0;
}
void write_data(uchar bat)
{
rs=1;
wr=0;
en=0;
P1=bat;
delay(100);
en=1;
delay(100);
en=0;
}
,仿真玩的时候可以不判忙,不接晶振与电源,实际操作是少不了的!,void main()
{
init();
在这里加一句
write_com(0x80);
这个写命令是设置你写的数据的起始位置,0x80是第一行第一位
write_data(“A”);
while(1);
},1、主程序中使用了延时函数,但是这个延时函数之前没有声明;
2、延时函数写的有误,仅5个周期;
3、主函数中没有设定指针,也就是字符显示的初始位置。
你按照下边的改一下试试吧。改动的地方我用了红色
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void Delay() ;
sbit rs=P2^0;
sbit wr=P2^1;
sbit en=P2^2;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x–)
for(y=19;y>0;y–);
}
void write_com(uchar com)
{
rs=0;
wr=0;
en=0;
P1=com;
en=1;
delay(5);
en=0;
}
void write_data(uchar bat)
{
rs=1;
wr=0;
en=0;
P1=bat;
en=1;
delay(5);
en=0;
}
void init()
{
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0f);
}
void main()
{
init();
write_com(0x80);
write_data(‘A’);
while(1);
}
,错误太多,我的水平有限,还是没有全部解决。,
杨雪飞 发表于 2020-7-10 09:15
1、主程序中使用了延时函数,但是这个延时函数之前没有声明;
2、延时函数写的有误,仅5个周期;
3、主函 …
等下回去试试谢谢啦,
static 发表于 2020-7-10 07:59
仿真玩的时候可以不判忙,不接晶振与电源,实际操作是少不了的!
等下去实验下 谢谢了,
wulin 发表于 2020-7-10 06:32
由于对LCD读写数据之前没有判忙,所以延时函数时间就嫌短,导致初始化失败,建议延时1ms左右。
void write …
好的 等下试一下 谢谢,只能帮你这么多了
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P2^0;
sbit rw=P2^1;
sbit en=P2^2;
void delay(uint n)
{
uint x,y;
for(x=n;x>0;x–)
for(y=110;y>0;y–);
}
void lcd_wcom(uchar com)
{
rs=0;
rw=0;
P0=com;
delay(5);
en=1;
en=0;
}
void lcd_wdat(uchar dat)
{
rs=1;
rw=0;
P0=dat;
delay(5);
en=1;
en=0;
}
void lcd_init()
{
lcd_wcom(0x38);
lcd_wcom(0x0c);
lcd_wcom(0x06);
lcd_wcom(0x01);
}
void main()
{
lcd_init();
lcd_wcom(0x80);
lcd_wdat(‘a’);
delay(200);
while(1);
}
,
杨雪飞 发表于 2020-7-10 14:20
只能帮你这么多了
可以初始化 但是不能写数据没有 反应
,
wulin 发表于 2020-7-10 06:32
由于对LCD读写数据之前没有判忙,所以延时函数时间就嫌短,导致初始化失败,建议延时1ms左右。
void write …
根据你修改的代码 不能初始化 是不是1602lcd坏了?,void main()
{
lcd_init();
lcd_wcom(0x80+0x40);
lcd_wdat(‘8’);
lcd_wcom(0x80+0x41);
lcd_wdat(‘9’); 这样写可以显示第二行 这咋回事????????????
,
第一行可以显示了 结果测试 第一行的十六位地址为 0x40 第二行为0x80+0x40 即0xc0 但是不能显示字母或者汉字 应该是没有字库的原因 正在找怎么加字库,
欣语宝贝 发表于 2020-7-10 22:11
第一行可以显示了 结果测试 第一行的十六位地址为 0x40 第二行为0x80+0x40 即0xc0 但是不能显 …
第一,硬件方面,1602的V0口对比度电阻没有调好,液晶显示对比度很差
第二、字母是可以显示的,你看一下1602的资料,不支持汉字显示,支持部分自定义字符。
直接把数字替换成字母应该就可以正常显示的,除非你用了全角输入的。,有写命令写数据,还得要有忙检测才行,不过你好像已经弄好了,我就来蹭蹭哈哈哈哈,
wulin 发表于 2020-7-10 06:32
由于对LCD读写数据之前没有判忙,所以延时函数时间就嫌短,导致初始化失败,建议延时1ms左右。
void write …
加延时貌似不太管用,我也是碰到了这个问题,按照您的方法,在程序里添加了延时,但是问题依旧