51单片机 LCD 1602只能显示问号和o

2024-11-20 18:40:12
推荐回答(3个)
回答1:

#include
sbit rw=P2^5;
sbit rs=P2^6;
sbit e=P2^7;
unsigned char table[]="0123456789abcdefg";
void delay(void) //延时5ms.误差 0us
{
unsigned char a,b;
for(b=19;b>0;b--)
for(a=130;a>0;a--);
}
void write_com(unsigned char com)
{
rs=0;
rw=0;
e=0;//写指令的要求
P0=com;
delay();
e=1;
delay();
e=0;
}
void write_data(unsigned char dat)
{
rs=1;
rw=0;
e=0;//写数据的要求
P0=dat;
delay();
e=1;
delay();
e=0;
}
void init()
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void main(void)
{
unsigned int i=0;
init();
write_com(0X80); //设置位置
while(1)
{
for(i=0;i<17;i++)
{
write_data(table[i]);
}
}
}
因为你的 write_com(0X80); 前面加了// 这个是注释,位置没设置,然后把写table放入while(1)让它一直写就可以了,试试。
希望我的回答能帮助到你。

回答2:

是不是起始位置没有设置的问题 楼上说的 放入while(1)中写 for应该是不需要吧

回答3:

建议看书,问什么都是浮云