|
LCD1602的程序,搞了一天了,一直是第一排黑格子,自己的程序顯示跳出來過兩次,不知道是不是lcd壞了,后來兩塊lcd都沒再顯示了。
下面程序是論壇里找的,試了試也沒有用,還是第一排黑格子。
下面的程序是兩行的顯示,但是單片機(jī)燒錄以后只顯示第一排黑格子,感覺main函數(shù)初始化那里好像都沒執(zhí)行啊
望論壇的各位朋友能給與幫助,謝謝。
令附有兩次顯示的程序文件給大家參考(是普中科技51開發(fā)板的程序),程序應(yīng)該問題,感覺是我板子出問題了
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit E=P2^5; //1602使能引腳
sbit RW=P2^6; //1602讀寫引腳
sbit RS=P2^7;
uchar tab1[]=" www.zg4o1577.cn "; //要顯示什么就在這兒改
uchar tab2[]="LCD1602 test ok!"; //[size=15.5555562973022px]要顯示什么就在這兒改
void delay(uint del) //延時1ms
{
uint i,j;
for(i=0;i<del;i++)
for(j=0;j<=168;j++);
}
//---------------------------------------------------------
void writecmd(uchar com)
{
E=0; //為什么要寫這一條呢,看看時序圖就清楚了
RS=0;
RW=0;
P0 = com;
delay(2); //延時一下會穩(wěn)定很多,后面一條也是一樣的
E=1;
delay(2);
E=0;
}
//--------------------------------------------------------
void writedata(uchar dat)
{
E=0; //為什么要寫這一條呢,看看時序圖就清楚了
RS=1;
RW=0;
P0 = dat;
delay(2); //延時一下會穩(wěn)定很多,后面一條也是一樣的
E=1;
delay(2);
E=0;
}
//-----------------------------------------------------
void init(void)
{
delay(15);
writecmd(0x38);
delay(5);
writecmd(0x38);
delay(5);
writecmd(0x38);
writecmd(0x38);
writecmd(0x08);
writecmd(0x01);
writecmd(0x06);
writecmd(0x0c);
}
//----------------------------------------------------------
void main()
{
uchar j;
init();
writecmd(0x80); //告訴液晶在哪個地方顯示 (設(shè)置地址指針)//80H+00
for(j=0;j<16;j++) //有16個字符,要循環(huán)16次
{
writedata(tab1[j]);
delay(2);
}
writecmd(0x80+0x40); //再設(shè)置第二行的起始位置80H+40H
for(j=0;j<16;j++) //有16個字符,要循環(huán)16次
{ writedata(tab2[j]);
delay(2);
}
while(1); //讓液晶顯示就一直停在這里。
}
|
|