12864液晶屏与单片机连接图Word文件下载.docx
《12864液晶屏与单片机连接图Word文件下载.docx》由会员分享,可在线阅读,更多相关《12864液晶屏与单片机连接图Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
//写数据
voidLcdDelay(uinttime);
//延时
voidSetOnOff(ucharonoff);
//开关显示
voidClearScreen(ucharscreen);
//清屏
voidSetLine(ucharline);
//置页地址
voidSetColum(ucharcolum);
//置列地址
voidSetStartLine(ucharstartline);
//置显示起始行
voidSelectScreen(ucharscreen);
//选择屏幕
voidShow1616(ucharlin,ucharcolum,uchar*address);
//显示一个汉字
voidInitLcd();
//初始化
voidResetLcd();
voidShow_english(ucharlin,ucharcolum,uchar*address);
constucharcodehzk[]={
/*--文字:
I--*/
/*--宋体12;
此字体下对应的点阵为:
宽x高=8x16--*/
0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
--*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
c--*/
0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,
a--*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,
n--*/
0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,
m--*/
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,
k--*/
0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,
e--*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,
i--*/
0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
t--*/
0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,
!
宽x高=16x16--*/
0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
我--*/
/*--楷体12;
0x00,0x00,0x80,0x90,0xF0,0x48,0x40,0x7F,0xC0,0x20,0x24,0xA8,0x00,0x00,0x00,0x00,
0x08,0x08,0x04,0x14,0x3F,0x02,0x09,0x08,0x05,0x06,0x09,0x10,0x20,0x78,0x00,0x00,
的--*/
0x00,0xC0,0x60,0x50,0x2C,0xE0,0x80,0x40,0xA0,0x38,0x26,0x10,0xF0,0x00,0x00,0x00,
0x00,0x07,0x19,0x09,0x08,0x1F,0x00,0x00,0x00,0x03,0x10,0x20,0x1F,0x00,0x00,0x00,
未--*/
0x00,0x00,0x80,0x80,0x90,0x90,0xFF,0xC8,0x48,0x48,0x40,0x40,0x00,0x00,0x00,0x00,
0x10,0x10,0x08,0x04,0x02,0x01,0x7F,0x00,0x01,0x02,0x04,0x08,0x18,0x10,0x10,0x00,
来--*/
0x00,0x80,0x80,0xA8,0xC8,0x88,0xFF,0x84,0x64,0x54,0x40,0x40,0x00,0x00,0x00,0x00,
0x00,0x10,0x10,0x08,0x04,0x02,0x7F,0x01,0x02,0x04,0x0C,0x08,0x08,0x08,0x08,0x00,
不--*/
0x00,0x00,0x08,0x08,0x08,0x88,0x48,0xE4,0x14,0x8C,0x84,0x04,0x04,0x04,0x00,0x00,
0x00,0x04,0x04,0x02,0x01,0x00,0x00,0x3F,0x00,0x00,0x00,0x01,0x03,0x06,0x00,0x00,
是--*/
0x00,0x00,0x80,0x80,0x82,0x9E,0xAA,0xAA,0xA1,0x5D,0x43,0x40,0x00,0x00,0x00,0x00,
0x20,0x20,0x10,0x08,0x06,0x04,0x08,0x1F,0x12,0x22,0x22,0x20,0x20,0x20,0x20,0x00,
梦--*/
0x00,0x90,0x50,0x30,0xFE,0x28,0x48,0x28,0x18,0xFF,0x14,0x24,0x24,0x40,0x40,0x00,
0x00,0x00,0x40,0x48,0x44,0x26,0x2B,0x12,0x0A,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x19,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
voidmain()
{
uchari,line,colum/*,j*/;
uchar*address;
InitLcd();
while
(1)
/*显示第一行*/
/**********************************
下面这段程序用来卷页
**********************************/
/*line=0;
for(j=0;
j<
4;
j++)
{
ClearScreen
(2);
//清屏
line=line+1;
colum=0;
address=hzk;
SetOnOff
(1);
for(i=0;
i<
14;
i++)
if(i<
8)
SelectScreen(0);
Show_english(line,colum,address);
address+=16;
colum+=8;
}
elseif(i>
=8)
if(i<
13)
{
SelectScreen
(1);
Show_english(line,colum,address);
}
else
Show1616(line,colum,address);
address+=32;
colum+=16;
}
for(i=0;
i<
50;
i++)//延时
LcdDelay(3000);
}*/
line=1;
//开始从第2页(第9行)开始显示,
//开始从第一列开始显示
//给地址指针赋初值
//显示开,注意:
如果这里设置显示关,显示会出现错误
i++)//设置要显示的字符个数
8)//i<
8时,在左半屏显示(因为每半屏最多只能显示8个英文字符即4个汉字)
SelectScreen(0);
//选择左屏
//显示一个英文字符
//每个英文字符需要16个十六进制数表示
//每个英文字符占8列
=8)//当i>
8时(当然最多只能是16)在右屏显示
13)//本程序第一行前13个字符为英文字符,最后一个字符为中文字符,英文字符和中文字符必须分开显示
else//显示中文字符“!
”
//每个汉字要用32个16进制表示
//每个汉字占16列
/*显示第二行*/
/****显示原理与第一行完全相同,这里不再赘述了****/
line=4;
colum=1;
8;
4)
Show1616(line,colum,address);
address+=32;
colum+=16;
else
SelectScreen
(1);
LcdDelay(30000);
if(colum>
63)
}
延时函数
voidLcdDelay(uinttime)
while(time--);
写指令
voidSendCommand(ucharcommand)
e=1;
wr=0;
rs=0;
databus=command;
e=0;
写数据
voidWriteData(uchardat)
rs=1;
databus=dat;
显示开/关
voidSetOnOff(ucharonoff)
if(onoff==1)
SendCommand(0x3f);
SendCommand(0x3e);
选择页
voidSetLine(ucharline)//12864总共有8页(0~7),每页有8行
line=line&
0x07;
//只取后三位xxxxx111,这3个是要改变位置的数据
line=line|0xb8;
//页设置的固定格式
SendCommand(line);
选择列
voidSetColum(ucharcolum)//12864每半屏有64列(0~63),分为左右2屏
colum=colum&
0x3f;
//xx111111,这个是要改变Y位置的数据
colum=colum|0x40;
//固定格式
SendCommand(colum);
选择起始行
voidSetStartLine(ucharstartline)
startline=startline&
//xx111111,这个是要改变x位置的数据
startline=startline|0xc0;
//11xxxxxx,是起始行设置的固定指令
SendCommand(startline);
选择左右屏0:
左屏,1:
右屏,2:
全屏
voidSelectScreen(ucharscreen)
switch(screen)
case0:
cs1=0;
LcdDelay
(2);
cs2=1;
break;
case1:
cs1=1;
cs2=0;
case2:
}
显示一个汉字
voidShow1616(ucharlin,ucharcolum,uchar*address)
uchari;
SetLine(lin);
SetColum(colum);
16;
WriteData(*address);
address++;
SetLine(lin+1);
显示一个英文字符
voidShow_english(ucharlin,ucharcolum,uchar*address)
清屏
**********************************/
voidClearScreen(ucharscreen)
uchari,j;
SelectScreen(screen);
SetLine(i);
SetColum(0);
for(j=0;
64;
WriteData(0);
12864初始化
voidInitLcd()
//ResetLcd();
SetOnOff(0);
//显示关
SetLine(0);
//页设置
SetColum(0);
//列设置
SetStartLine(0);
//设置起始页
//显示开
仿真实图: