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