|
以下是在12864液晶屏上正常顯示的代碼,感謝各位前輩的賜教,在最后有個問題請教
#include <reg52.h>
/******************************************************************/
/* 定義接口信息 */
/******************************************************************/
sbit LCDRS =P2^4;
sbit LCDRW=P2^5;
sbit LCDEN= P2^6;
sbit LCDPSB=P2^1;
sbit LCDRST=P2^3;
/******************************************************************/
/* 子函數(shù)聲明 */
/******************************************************************/
void OrderData(char data1,bit DI); //指令 數(shù)據(jù)選擇
void delayms(unsigned int n); //延時函數(shù)
void delay(unsigned int m);
void lcd_mesg(unsigned char code *adder1); //指針函數(shù)
//中文字符數(shù)組
unsigned char code array1[]={"去年今日此門中, 人面桃花相映紅。人面不知何處去, 桃花依舊笑春風(fēng)。"};
unsigned char code array2[]={"人生若只如初見, 何事秋風(fēng)悲畫扇, 等閑變卻故人心,卻道故人心易變。"};
unsigned char code array3[]={"梨花淡白柳深青, 柳絮飛時花滿城。惆悵東欄一株雪,人生看的幾清明。"};
unsigned char code array4[]={"落魄江南載酒行,楚腰纖細(xì)掌中輕。十年一覺揚州夢,贏得青樓薄幸名。"};
unsigned char code array5[]={"朝辭白帝彩云間,千里江陵一日還。兩岸猿聲啼不住,輕舟已過萬重山。"};
unsigned char code array6[]={"去年花里逢君別,今日花開已一年。世事茫茫難自料,春愁黯黯獨成眠。"};
unsigned char code array7[]={"結(jié)廬在人境,而無車馬喧。問君何能爾,心遠(yuǎn)地自偏,,,,,,,,,,,,,,,,,"};
unsigned char code array8[]={"采菊東籬下,悠然見南山。山氣日夕佳,飛鳥相與還................."};
unsigned char code array9[]={"此中有真意,欲辨已忘言....................................................."};
unsigned char code array10[]={"月落烏啼霜滿天,江楓漁火對愁眠。姑蘇城外寒山寺,夜半鐘聲到客船。"};
unsigned char code array11[]={"楊花落盡子規(guī)啼,聞道龍標(biāo)過五溪,我寄愁心與明月,隨風(fēng)直到夜郎西。"};
unsigned char code array12[]={"天空的蔚藍(lán),愛上了大地的碧綠,他們之間的微風(fēng)嘆了聲:唉!!!!!!!!!"};
/******************************************************************
/* 液晶初始化-字庫 */
/******************************************************************/
void init(void) //LCD字庫初始化程序
{
delay(40); //大于40MS的延時程序
LCDPSB=1; //設(shè)置為8BIT并口工作模式
delay(1); //延時
LCDRST=0; //復(fù)位
delay(1); //延時
LCDRST=1; //置高運行
delay(10);
OrderData(0x30,0); //基本指令集
//delay(100); //大于100uS的延時程序
//OrderData(0x30,0); //Function Set
//delay(37); //大于37uS的延時程序
//OrderData(0x08,0); //Display on Control
//delay(100); //大于100uS的延時程序
OrderData(0x02,0); //光標(biāo)設(shè)置
delay(100); //大于100uS的延時程序
OrderData(0x0C,0); //Display Control,D=1,整體顯示開,光標(biāo)關(guān)閉
delay(100); //大于100uS的延時程序
OrderData(0x01,0); //Display Clear清屏
delay(10); //大于10mS的延時程序
OrderData(0x06,0); //光標(biāo)從右向左加1位移動
delay(100); //大于100uS的延時程序
}
/******************************************************************/
/* 主程序 */
/******************************************************************/
int main(void)
{
while(1)
{
init(); //調(diào)用LCD字庫初始化程序
delay(100); //大于100uS的延時程序
lcd_mesg(array1); //顯示中文數(shù)組1
delayms(240);
delayms(240);
init();
delay(100);
lcd_mesg(array2); //顯示中文數(shù)組2
delayms(240);
delayms(240);
init();
delay(100);
lcd_mesg(array3); //顯示中文數(shù)組3
delayms(240);
delayms(240);
init();
delay(100);
lcd_mesg(array4); //顯示中文數(shù)組4
delayms(240);
delayms(240);
init();
delay(100);
lcd_mesg(array5); //顯示中文數(shù)組5
delayms(240);
delayms(240);
init();
delay(100);
lcd_mesg(array6); //顯示中文數(shù)組6
delayms(240);
delayms(240);
init();
delay(100);
lcd_mesg(array7); //顯示中文漢字7
delayms(240);
delayms(240);
init();
delay(100);
lcd_mesg(array8); //顯示中文漢字8
delayms(240);
delayms(240);
init();
delay(100);
lcd_mesg(array9); //顯示中文漢字9
delayms(240);
delayms(240);
init();
delay(100);
lcd_mesg(array10); //顯示中文漢字10
delayms(240);
delayms(240);
init();
delay(100);
lcd_mesg(array11); //顯示中文漢字11
delayms(240);
delayms(240);
init();
delay(100);
lcd_mesg(array12); //顯示中文漢字12
delayms(240);
delayms(240);
}
}
void lcd_mesg(unsigned char code *adder1)
{
unsigned char i;
OrderData(0x80,0); //設(shè)置顯示的 RAM Address,在液晶屏的第一行顯示
delay(100);
for(i=0;i<16;i++)
{
OrderData(*adder1,1);
adder1++;
}
OrderData(0x90,0); //設(shè)置為在液晶屏的第二行顯示
delay(100);
for(i=0;i<16;i++)
{
OrderData(*adder1,1);
adder1++;
}
OrderData(0x88,0); //設(shè)置為在液晶屏的第三行顯示
delay(100);
for(i=0;i<16;i++)
{
OrderData(*adder1,1);
adder1++;
}
OrderData(0x98,0); //設(shè)置為在液晶屏的第四行顯示
delay(100);
for(i=0;i<16;i++)
{
OrderData(*adder1,1);
adder1++;
}
}
/******************************************************************/
/* 函數(shù)聲明 */
/******************************************************************/
void OrderData(char data1,bit DI) //傳送數(shù)據(jù)或者命令,當(dāng)DI=0是,傳送命令,當(dāng)DI=1,傳送數(shù)據(jù).
{
LCDRW=0;
LCDRS=DI;
delay(1);
P0=data1;
LCDEN=1;
delay(1);
LCDEN=0;
}
void delayms(unsigned int n) //延時10×n毫秒程序
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<3000;j++);
}
void delay(unsigned int m) //延時程序
{
unsigned int i,j;
for(i=0;i<m;i++)
for(j=0;j<10;j++);
}
疑問:void lcd_mesg(unsigned char code *adder1); 不理解code作用 |
|