基于proteus的不带字库的12864的仿真程序带仿真图.docx

上传人:b****6 文档编号:8056419 上传时间:2023-05-12 格式:DOCX 页数:15 大小:49.44KB
下载 相关 举报
基于proteus的不带字库的12864的仿真程序带仿真图.docx_第1页
第1页 / 共15页
基于proteus的不带字库的12864的仿真程序带仿真图.docx_第2页
第2页 / 共15页
基于proteus的不带字库的12864的仿真程序带仿真图.docx_第3页
第3页 / 共15页
基于proteus的不带字库的12864的仿真程序带仿真图.docx_第4页
第4页 / 共15页
基于proteus的不带字库的12864的仿真程序带仿真图.docx_第5页
第5页 / 共15页
基于proteus的不带字库的12864的仿真程序带仿真图.docx_第6页
第6页 / 共15页
基于proteus的不带字库的12864的仿真程序带仿真图.docx_第7页
第7页 / 共15页
基于proteus的不带字库的12864的仿真程序带仿真图.docx_第8页
第8页 / 共15页
基于proteus的不带字库的12864的仿真程序带仿真图.docx_第9页
第9页 / 共15页
基于proteus的不带字库的12864的仿真程序带仿真图.docx_第10页
第10页 / 共15页
基于proteus的不带字库的12864的仿真程序带仿真图.docx_第11页
第11页 / 共15页
基于proteus的不带字库的12864的仿真程序带仿真图.docx_第12页
第12页 / 共15页
基于proteus的不带字库的12864的仿真程序带仿真图.docx_第13页
第13页 / 共15页
基于proteus的不带字库的12864的仿真程序带仿真图.docx_第14页
第14页 / 共15页
基于proteus的不带字库的12864的仿真程序带仿真图.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于proteus的不带字库的12864的仿真程序带仿真图.docx

《基于proteus的不带字库的12864的仿真程序带仿真图.docx》由会员分享,可在线阅读,更多相关《基于proteus的不带字库的12864的仿真程序带仿真图.docx(15页珍藏版)》请在冰点文库上搜索。

基于proteus的不带字库的12864的仿真程序带仿真图.docx

基于proteus的不带字库的12864的仿真程序带仿真图

基于proteus的不带字库的12864的仿真程序(带仿真图)

作者:

心如止水(武汉工程大学)

/************************************************************

本程序为不带字库的12864汉字及英文字符的显示程序,

可以说此程序是所有12864显示程序中最简单最易懂的

显示程序。

之所以写这个程序,是因为我看很多学单片

机的人(特别是初学者)对12864有一种恐惧感,觉得它

很难,看完这个程序,相信你能明白它的显示原理。

还要注意的是:

带中文字库和不带中文字库的程序不一样,

不可混用。

************************************************************/

先上图吧,哈哈

下面看程序吧,相信你一定能看懂,很简单的哟!

#include

#defineucharunsignedchar

#defineuintunsignedint

//sbitdatabus=P1;

#definedatabusP1

//sbitReset=P3^0;//复位

sbitrs=P3^7;//指令数据选择

sbite=P3^5;//指令数据控制

sbitcs1=P3^3;//左屏幕选择,低电平有效

sbitcs2=P3^4;//右屏幕选择

sbitwr=P3^6;//读写控制

//sbitbusy=P1^7;//忙标志

voidSendCommand(ucharcommand);//写指令

voidWriteData(uchardat);//写数据

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,

/*--文字:

--*/

/*--宋体12;此字体下对应的点阵为:

宽x高=8x16--*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*--文字:

c--*/

/*--宋体12;此字体下对应的点阵为:

宽x高=8x16--*/

0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,

/*--文字:

a--*/

/*--宋体12;此字体下对应的点阵为:

宽x高=8x16--*/

0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,

/*--文字:

n--*/

/*--宋体12;此字体下对应的点阵为:

宽x高=8x16--*/

0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,

/*--文字:

--*/

/*--宋体12;此字体下对应的点阵为:

宽x高=8x16--*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*--文字:

m--*/

/*--宋体12;此字体下对应的点阵为:

宽x高=8x16--*/

0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,

/*--文字:

a--*/

/*--宋体12;此字体下对应的点阵为:

宽x高=8x16--*/

0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,

/*--文字:

k--*/

/*--宋体12;此字体下对应的点阵为:

宽x高=8x16--*/

0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,

/*--文字:

e--*/

/*--宋体12;此字体下对应的点阵为:

宽x高=8x16--*/

0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,

/*--文字:

--*/

/*--宋体12;此字体下对应的点阵为:

宽x高=8x16--*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*--文字:

i--*/

/*--宋体12;此字体下对应的点阵为:

宽x高=8x16--*/

0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,

/*--文字:

t--*/

/*--宋体12;此字体下对应的点阵为:

宽x高=8x16--*/

0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,

/*--文字:

--*/

/*--宋体12;此字体下对应的点阵为:

宽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;此字体下对应的点阵为:

宽x高=16x16--*/

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,

/*--文字:

的--*/

/*--楷体12;此字体下对应的点阵为:

宽x高=16x16--*/

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,

/*--文字:

未--*/

/*--楷体12;此字体下对应的点阵为:

宽x高=16x16--*/

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,

/*--文字:

来--*/

/*--楷体12;此字体下对应的点阵为:

宽x高=16x16--*/

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,

/*--文字:

不--*/

/*--楷体12;此字体下对应的点阵为:

宽x高=16x16--*/

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,

/*--文字:

是--*/

/*--楷体12;此字体下对应的点阵为:

宽x高=16x16--*/

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,

/*--文字:

梦--*/

/*--楷体12;此字体下对应的点阵为:

宽x高=16x16--*/

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,

/*--文字:

--*/

/*--楷体12;此字体下对应的点阵为:

宽x高=16x16--*/

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);

address+=16;

colum+=8;

}

else

{

Show1616(line,colum,address);

address+=32;

colum+=16;

}

}

}

for(i=0;i<50;i++)//延时

LcdDelay(3000);

}*/

line=1;//开始从第2页(第9行)开始显示,

colum=0;//开始从第一列开始显示

address=hzk;//给地址指针赋初值

SetOnOff

(1);//显示开,注意:

如果这里设置显示关,显示会出现错误

for(i=0;i<14;i++)//设置要显示的字符个数

{

if(i<8)//i<8时,在左半屏显示(因为每半屏最多只能显示8个英文字符即4个汉字)

{

SelectScreen(0);//选择左屏

Show_english(line,colum,address);//显示一个英文字符

address+=16;//每个英文字符需要16个十六进制数表示

colum+=8;//每个英文字符占8列

}

elseif(i>=8)//当i>8时(当然最多只能是16)在右屏显示

{

if(i<13)//本程序第一行前13个字符为英文字符,最后一个字符为中文字符,英文字符和中文字符必须分开显示

{

SelectScreen

(1);

Show_english(line,colum,address);

address+=16;

colum+=8;

}

else//显示中文字符“!

{

Show1616(line,colum,address);//显示一个汉字

address+=32;//每个汉字要用32个16进制表示

colum+=16;//每个汉字占16列

}

}

}

/*显示第二行*/

/****显示原理与第一行完全相同,这里不再赘述了****/

line=4;

colum=1;

SetOnOff

(1);

for(i=0;i<8;i++)

{

if(i<4)

{

SelectScreen(0);

Show1616(line,colum,address);

address+=32;

colum+=16;

}

else

{

SelectScreen

(1);

Show1616(line,colum,address);

address+=32;

colum+=16;

}

}

SetOnOff

(1);

for(i=0;i<50;i++)//延时

LcdDelay(30000);

if(colum>63)

colum=0;

}

}

/**********************************

延时函数

**********************************/

voidLcdDelay(uinttime)

{

while(time--);

}

/**********************************

写指令

**********************************/

voidSendCommand(ucharcommand)

{

e=1;

wr=0;

rs=0;

databus=command;

e=0;

}

/**********************************

写数据

**********************************/

voidWriteData(uchardat)

{

e=1;

wr=0;

rs=1;

databus=dat;

e=0;

}

/**********************************

显示开/关

**********************************/

voidSetOnOff(ucharonoff)

{

if(onoff==1)

{

SendCommand(0x3f);

}

else

{

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&0x3f;//xx111111,这个是要改变x位置的数据

startline=startline|0xc0;//11xxxxxx,是起始行设置的固定指令

SendCommand(startline);

}

/**********************************

选择左右屏0:

左屏,1:

右屏,2:

全屏

**********************************/

voidSelectScreen(ucharscreen)

{

switch(screen)

{

case0:

cs1=0;

LcdDelay

(2);

cs2=1;

LcdDelay

(2);

break;

case1:

cs1=1;

LcdDelay

(2);

cs2=0;

LcdDelay

(2);

break;

case2:

cs1=0;

LcdDelay

(2);

cs2=0;

LcdDelay

(2);

break;

}

}

/**********************************

显示一个汉字

**********************************/

voidShow1616(ucharlin,ucharcolum,uchar*address)

{

uchari;

SetLine(lin);

SetColum(colum);

for(i=0;i<16;i++)

{

WriteData(*address);

address++;

}

SetLine(lin+1);

SetColum(colum);

for(i=0;i<16;i++)

{

WriteData(*address);

address++;

}

}

/**********************************

显示一个英文字符

**********************************/

voidShow_english(ucharlin,ucharcolum,uchar*address)

{

uchari;

SetLine(lin);

SetColum(colum);

for(i=0;i<8;i++)

{

WriteData(*address);

address++;

}

SetLine(lin+1);

SetColum(colum);

for(i=0;i<8;i++)

{

WriteData(*address);

address++;

}

}

/**********************************

清屏

**********************************/

voidClearScreen(ucharscreen)

{

uchari,j;

SelectScreen(screen);

for(i=0;i<8;i++)

{

SetLine(i);

SetColum(0);

for(j=0;j<64;j++)

{

WriteData(0);

}

}

}

/**********************************

12864初始化

**********************************/

voidInitLcd()

{

//ResetLcd();

SetOnOff(0);//显示关

ClearScreen

(2);//清屏

SetLine(0);//页设置

SetColum(0);//列设置

SetStartLine(0);//设置起始页

SetOnOff

(1);//显示开

}

.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2