|
下面是这个程序的c语言代码和proteus原理图,大家能看下为啥我的LM016L的屏幕亮但是不显示字符呀,我该怎么解决呢?
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]="I LOVE MCU!";
uchar code table1[]="888888888";
sbit lcden=P3^4; //液晶使能端:执行操作时为高脉冲(1),执行完后使其变为0
sbit lcdrs=P3^5; //液晶数据命令选择端:选择命令为0,选择数据为1
sbit dula=P2^6;
sbit wela=P2^7;
uchar num;
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(uchar com) //写指令(指令值的来源与作用均可在单片机课表P126找到)
{
lcdrs=0; //选择写命令模式
P0=com; //将要写的命令字送至数据总线上
delay(5); //延迟以待数据稳定
lcden=1; //让使能端为高脉冲, 执行操作
delay(5); //延时以待数据稳定
lcden=0; //使使能端为0结束高脉冲
}
void write_data(uchar date) //写数据(形式参数为date而不是data是因为data是关键字!)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init() //初始化函数
{
dula=0;
wela=0;
lcden=0; //下面四个数据的值、作用的来源是单片机课表P126(如:0x38=0x00111000)
write_com(0x38); //设置16x2显示,5x7点阵,8位数据接口
write_com(0x0c); //设置开显示,不显示光标
write_com(0x06); //写一个字符后,地址指针加1
write_com(0x01); //显示清0,数据指针清0
}
void main()
{
init();
write_com(0x80); //此命令是将数据指针定位在第一行第一个字处(来源是单片机课表P125页的表7.2.4:数据指针设置)
for(num=0;num<11;num++)
{
write_data(table[num]);
delay(5);
}
write_com(0x80+0x40); //此命令是将数据指针定位在第二行第一个字处
for(num=0;num<13;num++)
{
write_data(table1[num]);
delay(5);
}
while(1);
}
|
|