|
|
下面是這個程序的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; //液晶使能端:執(zhí)行操作時為高脈沖(1),執(zhí)行完后使其變?yōu)?
sbit lcdrs=P3^5; //液晶數(shù)據(jù)命令選擇端:選擇命令為0,選擇數(shù)據(jù)為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; //將要寫的命令字送至數(shù)據(jù)總線上
delay(5); //延遲以待數(shù)據(jù)穩(wěn)定
lcden=1; //讓使能端為高脈沖, 執(zhí)行操作
delay(5); //延時以待數(shù)據(jù)穩(wěn)定
lcden=0; //使使能端為0結(jié)束高脈沖
}
void write_data(uchar date) //寫數(shù)據(jù)(形式參數(shù)為date而不是data是因為data是關(guān)鍵字!)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init() //初始化函數(shù)
{
dula=0;
wela=0;
lcden=0; //下面四個數(shù)據(jù)的值、作用的來源是單片機課表P126(如:0x38=0x00111000)
write_com(0x38); //設(shè)置16x2顯示,5x7點陣,8位數(shù)據(jù)接口
write_com(0x0c); //設(shè)置開顯示,不顯示光標
write_com(0x06); //寫一個字符后,地址指針加1
write_com(0x01); //顯示清0,數(shù)據(jù)指針清0
}
void main()
{
init();
write_com(0x80); //此命令是將數(shù)據(jù)指針定位在第一行第一個字處(來源是單片機課表P125頁的表7.2.4:數(shù)據(jù)指針設(shè)置)
for(num=0;num<11;num++)
{
write_data(table[num]);
delay(5);
}
write_com(0x80+0x40); //此命令是將數(shù)據(jù)指針定位在第二行第一個字處
for(num=0;num<13;num++)
{
write_data(table1[num]);
delay(5);
}
while(1);
}
|
|