以下是在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作用 |