先把教程例程里的程序贴上来 。 这个例程直接照着写,因为单片机端口设置的不一样,所以只改了端口 P3^5 P3^6 P3^7,
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num;
uint i,j;
sbit rs=P3^5;
sbit wr=P3^6;
sbit lcden=P3^7; //使能端
uchar code table1[]="0123456789";
uchar code table2[]="ABCDEFG,FGHIJK";
void delay(uint x) // 延时函数
{ for(i=x;i>0;i--)
{
for(j=120;j>0;j--);
}
}
void write_com(uchar com) //指令
{
rs=0;
wr=0;
lcden=0;
P0=com;
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar dat) //数据
{
rs=1;
wr=0;
lcden=0;
P0=dat;
lcden=1;
delay(5);
lcden=0;
}
void init() // 初始化函数
{
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0f);
}
void main()
{ P0=0;
init(); // 初始化
for(num=0;num<9 ;num++) //第一行取9个数显示
{ write_data(table1[num]);
delay(300);
}
write_com(0x80+0x40); //第二行显示地址
for(num=0;num<16 ;num++)
{
write_data(table2[num]);
write_com(0x18); //左移
delay(500);
}
while(1);
}
现象是这样的,
第一次 程序中地址是标准的0x80+0x40, 结果 第一行显示完了之后,第二行就只有个光标闪动着往右边移动,一直移出屏幕就没动静了。如下两图。
第二次,我修改为0x80+0x50,加上左移命令write_com(0x18), 然后现象是这样的,第一行显示完了之后,上下两行同时往左移, 中间相隔8个字符的距离后,第二行出现了,但是没有显示出A, 而且就这样一直往左移,显示完了之后,第二行尾巴上就剩下个乱码+箭头。
(这个液晶是在某宝买的,深圳山寨小厂,3.5一片屏幕,后来直接叫卖家的工程师给指导, 结果他都没搞定,说我硬件有问题, 然后这两天我不服气, 换单片机,89C52, 89C58,开发板也不要了,直接换面包板,搞了两天,交替替换着下载程序,结果问题依旧)
无论怎么调,就是不正常显示,那么多单片机的教程里的例程都一样的,可以用0x80+0x40 直接显示两行,为什么我这个第二行就是不能正常显示, 请问各位, 就在这个这个程序上应该怎么改才行?