下面是這個程序的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);
}
|