|
//下面這條程序看不明白
for(j=n;j<25+n;j++)//我們沒(méi)有進(jìn)行整屏右移,但是我們進(jìn)行了數(shù)組右移O(∩_∩)O~
{
LcdWriteData(displayDate2[j]);
}
//字符串長(zhǎng)度只有25,這里索引25+n超過(guò)最大索引,程序不會(huì)報(bào)錯(cuò)嗎?
接下來(lái)寫(xiě)相關(guān)子程序:
//寫(xiě)入命令子函數(shù)
void LcdWriteCom(unsigned char com)
{
LCD_RS=0;
LCD_RW=0;
LCD_GPIO=com;
delay1ms(1);
LCD_E=1;
delay1ms(1);
LCD_E=0;
}
//寫(xiě)入數(shù)據(jù)子函數(shù)
void LcdWriteData(unsigned char dat)
{
LCD_RS=1;
LCD_RW=0;
LCD_GPIO=dat;
delay1ms(1);
LCD_E=1;
delay1ms(1);
LCD_E=0;
}
//讀忙子函數(shù)
bit LCD_bz(void)
{
bit bz;
LCD_RS=0;
LCD_RW=1;
LCD_E=1;
delay1ms(10);
P0=0xff; //C51單片機(jī)讀引腳要先置高電平,原因不贅述,很多資料沒(méi)有這一步驟,大家格外注意下
bz=(bit)(LCD_GPIO&0x80);
LCD_E=0;
return bz;
}
//延時(shí)子程序
void delay1ms(unsigned int t)
{
unsigned int i,j; //節(jié)約內(nèi)存起見(jiàn),建議用uchar,由于后面要做動(dòng)態(tài)顯示,為了滿(mǎn)足顯示效果,這里用了uint
for(i=0;i
{
for(j=0;j<300;j++);
}
}
//初始化顯示屏程序
void LcdInit()
{
LcdWriteCom(0x38);//顯示模式2行16列
LcdWriteCom(0x0c);//開(kāi)顯示 無(wú)光標(biāo) 不閃爍
LcdWriteCom(0x06);//寫(xiě)一個(gè)指針加1
LcdWriteCom(0x01);//清屏
LcdWriteCom(0x80);//設(shè)置(0,0)為起點(diǎn)
}
主程序:
//我們要把第一行做成一個(gè)16字符固定顯示,第二行做成滾動(dòng)顯示25字符
//這里采用的是1602指針右移的基礎(chǔ)命令而不是整屏右移命令
#include
#define LCD_GPIO P0
void LcdWriteCom(unsigned char); //寫(xiě)入命令子函數(shù)聲明
void LcdWriteData(unsigned char);//寫(xiě)入數(shù)據(jù)子函數(shù)聲明
void LcdInit();//顯示屏初始化子函數(shù)聲明
void delay1ms(unsigned int);//延時(shí)函數(shù)聲明
bit LCD_bz(void);//讀忙函數(shù)聲明
sbit LCD_RW=P2^5;
sbit LCD_RS=P2^6;
sbit LCD_E=P2^7;
unsigned char displayDate1[]=" I'm Cesar ";//一共16個(gè)字符(包括空格在內(nèi))
unsigned char displayDate2[]=" Please add QQ775222573 ";//一共25個(gè)字符
void main(void)
{
unsigned char i=0,j=0,n=0;
LcdInit();
LcdWriteCom(0x80);//設(shè)置坐標(biāo)為第一行第一個(gè)字符
for(i=;i<16;i++)
{
LcdWriteData(displayDate1[ i]);
}
while(1)
{
if(LCD_bz())
continue;//讀忙,結(jié)束本次循環(huán)
LcdWriteCom(0x80+0x40);//設(shè)置第二行第一個(gè)字符起點(diǎn)
for(j=n;j<25+n;j++)//我們沒(méi)有進(jìn)行整屏右移,但是我們進(jìn)行了數(shù)組右移O(∩_∩)O~
{
LcdWriteData(displayDate2[j]);
}
n++;//數(shù)組的顯示起點(diǎn)右移,這樣實(shí)現(xiàn)了滾動(dòng)
if(n>=(25-15))//當(dāng)顯示移到最右邊時(shí),停頓片刻,返回起點(diǎn)再次循環(huán)
{
n=0;
delay1ms(2000);
}
delay1ms(600);
}
}
希望有人能解惑。 |
|