LCD显示汉字.docx

上传人:b****5 文档编号:29930276 上传时间:2023-08-03 格式:DOCX 页数:15 大小:113.14KB
下载 相关 举报
LCD显示汉字.docx_第1页
第1页 / 共15页
LCD显示汉字.docx_第2页
第2页 / 共15页
LCD显示汉字.docx_第3页
第3页 / 共15页
LCD显示汉字.docx_第4页
第4页 / 共15页
LCD显示汉字.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

LCD显示汉字.docx

《LCD显示汉字.docx》由会员分享,可在线阅读,更多相关《LCD显示汉字.docx(15页珍藏版)》请在冰豆网上搜索。

LCD显示汉字.docx

LCD显示汉字

 

/***************************************************************\

|*12864LCD显示程序proteus6.9仿真AMPIRE128*64*|

|*制作人:

熊涛*|

|*时间:

2007年4月12日*|

|*接口定义:

P1接数据DB7~DB0*|

|*P2.0P2.1P2.2P2.3P2.4接控制线*|

|*具体见定义*|

\***************************************************************/

/***************************************************************\

|*注:

本程序只能写16*16的汉字并且有一个小问题就是   *|

|*当字库中汉字的代码的第一个数据不是0x00时该汉字就不*|

|*能显示出来调试时发现是因为不能检索到那个汉字具体原*|

|*因还在调试中直接写汉字句子时注意两个字节一个字,不要*|

|*弄半角的字符或标点符号否则后面的汉字将找不到*|

|*2007年4月14日1时修改熊涛*|

\***************************************************************/

#include

#include//包含字库该字库采用晓奇工作室液晶字模提取软件默认保存的文件采用结构体数组定义的方法

#include

typedefunsignedcharuchar;

typedefunsignedintuint;

structword_BUFFER

{ucharword[2];};

structword_BUFFERword_buf[33];//定义结构体数组用来存储待显示的汉字 共32个

ucharbank=0;//设置第几行反显0表示不反显1~4表示各行的反显

ucharkey=0;//第几个键被按下

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

sbitRW=P3^6;//读\写选择

sbitE=P3^5;//读\写使能

sbitCS2=P3^4;//片选1

sbitCS1=P3^3;//片选2

sbitRST=P3^2;//复位

keych(void)//检测是否有键按下子程序//

{uintn;

if(P2==0xf0)return(0);

elsewhile(P2&0xf0!

=0xf0)for(n=0;n<60000;n++);

return

(1);}

keyscan()//检测是哪个键按下子程序//

{ucharm,n;

ucharcodek[4]={0xfe,0xfd,0xfb,0xf7};

for(m=0;m<4;m++)

{P2=k[m];

n=P2+(m*m+5)*m/6;//此处要注意m为整型

switch(n)

{case0x7e:

key=0+m*4;break;

case0xbe:

key=1+m*4;break;

case0xde:

key=2+m*4;break;

case0xee:

key=3+m*4;break;}

}}

/**********************************************\

|*写命令子程序*|

|*入口参数:

cmd控制命令数据*|

|*出口参数:

null*|

|*调用函数:

null*|

\**********************************************/

voidwrite_cmd(ucharcmd)//写命令子程序

{RW=0;

DI=0;//DI=0写命令

E=1;

P1=cmd;

E=0;//RW="L",E="H->L"DB7~DB0的数据被写到IR或DR

}

/**********************************************\

|*写数据子程序*|

|*入口参数:

dat显示字符的数据*|

|*oppo标志位1:

显示阳文*|

|*0:

显示阴文*|

|*出口参数:

null*|

|*调用函数:

null*|

\**********************************************/

voidwrite_dat(uchardat,bitoppo)//写数据子程序

{RW=0;

DI=1;//DI=1写数据

E=1;

if(oppo==0)P1=~dat;//按位取反得阴文

if(oppo==1)P1=dat;

oppo=1;

E=0;//RW="L",E="H->L"DB7~DB0的数据被写到IR或DR

}

/**********************************************\

|*设置显示起始行X地址和Y地址*|

|*入口参数:

st_line显示起始行0~63*|

|*x_add页地址8行为一页0~7*|

|*y_addY地址0~128*|

|*出口参数:

null*|

|*调用函数:

write_cmd()*|

\**********************************************/

voidset_dis(ucharst_line,ucharx_add,uchary_add)//设置显示起始行X地址和Y地址

{

write_cmd(st_line+0xc0);//+0xc0是参照设置起始行的格式

write_cmd(x_add+0xb8);//+0xb8是参照设置页地址的格式

if(y_add<64){CS1=0;CS2=1;write_cmd(y_add+0x40);}//Y_add地址实际上只有0~63采用CS1和CS2选左右半屏

else{CS1=1;CS2=0;write_cmd(y_add);}

}

/***********************************************\

|*写汉字子程序1可以在任意位置写入*|

|*入口参数:

st_line显示起始行0~63*|

|*x_add页地址8行为一页0~7*|

|*y_addY地址0~128*|

|*Index[2]字符串数组用来存储汉字*|

|*出口参数:

null*|

|*调用函数:

write_cmd()set_dis()*|

|*strcmp()write_dat()*|

\***********************************************/

voidwrite_word_all(ucharst_line,ucharx_add,uchary_add,ucharIndex[2])//写入汉字

{uchari,j;

bitoppo=1;

if(y_add<64){CS1=0;CS2=1;write_cmd(y_add+0x40);}

else{CS1=1;CS2=0;write_cmd(y_add);}

set_dis(st_line,x_add,y_add);

if(bank%5==0)oppo=1;

if(bank%5==1&&(x_add==0||x_add==1))oppo=0;

if(bank%5==2&&(x_add==2||x_add==3))oppo=0;

if(bank%5==3&&(x_add==4||x_add==5))oppo=0;

if(bank%5==4&&(x_add==6||x_add==7))oppo=0;

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

{if(GB_16[i].Index[0]==Index[0]&&GB_16[i].Index[1]==Index[1])//汉字作为双字节字符串处理采用顺序检索方式查找结构体名

{for(j=0;j<16;j++)write_dat(GB_16[i].Msk[j],oppo);//逐字节写入

set_dis(st_line,x_add+1,y_add);//下一页写字的下半部分

for(j=16;j<32;j++)write_dat(GB_16[i].Msk[j],oppo);break;}//此处用break是为了能跳出for循环

}

}

/***********************************************\

|*写汉字子程序2只能在指定位置写入*|

|*入口参数:

n指定地址0~31全屏32字(16*16)*|

|*Index[2]字符串数组用来存储汉字*|

|*出口参数:

null*|

|*调用函数:

write_word_all()*|

|**|

\***********************************************/

voidwrite_word(ucharn,ucharIndex[2])//写入汉字

{ucharst_line=0,x_add=n%32/8*2,y_add=n%32%8*16;

write_word_all(st_line,x_add,y_add,Index);

}

/***********************************************\

|*写句子子程序*|

|*入口参数:

sentence[]待写入汉字组成字符串*|

|*按照0~31的顺序写入*|

|*出口参数:

null*|

|*调用函数:

strlen()write_word()*|

|**|

\***********************************************/

voidwrite_sentence(ucharsentence[255])

{

uchari,j=0;

if(keych()==1)

{keyscan();

if(key==0)bank++;

if(key==1)bank--;

}

for(i=0;i

{word_buf[i].word[0]=sentence[i*2];word_buf[i].word[1]=sentence[i*2+1];

//从sentence中两个两个的取字符串即汉字注意不要弄半角的字符或标点符号,否则后面的汉字将找不到

write_word(j++,word_buf[i].word);

}}

/*voidScrolling(ucharsentence[255])//滚动显示子程序

{uchari,j=0;

intk=2000;

for(i=0;i

{for(j=0;j<=i;j++)

{word_buf[i].word[0]=sentence[i*2];word_buf[i].word[1]=sentence[i*2+1];

write_word(i,word_buf[i].word);;}}}*/

/**********************************************\

|*初始化子程序*|

|*入口参数:

null*|

|*出口参数:

null*|

|*调用函数:

null*|

\**********************************************/

/*voidinitial(void)//初始化子程序

{write_cmd(0x3e);//关显示

}*/

/****************************************************\

|*主程序入口*|

|*12864LCD显示程序proteus6.9仿真AMPIRE128*64*|

|*制作人:

熊涛*|

|*时间:

2007年4月12日*|

|**|

\****************************************************/

voidmain(void)//主程序

{P0=0xaa;

//uintn=65535;

//write_cmd(0x3e);//关显示

//故人西辞黄鹤楼,烟花三月下扬州。

孤帆远影碧空尽唯见长江天际流

//write_sentence("单片机液晶显示武汉理工大学余区熊涛制作悠悠苍天奈何独立苍茫");

//write_sentence("故人西辞黄鹤楼,烟花叁月下扬州。

");

//write_sentence("孤帆远影碧空尽,唯见长江天际流。

");

//write_word(31,"。

");

//write_word_all(0,6,112,"黄");

//Scrolling("单片机控制液晶武汉理工大学熊涛制作");

while

(1)

{P2=0xf0;

P0=~P0;

write_sentence("单片机液晶显示武汉理工大学余区熊涛制作悠悠苍天独立苍茫");

//while(n--);

//n=65535;

//while(n--);

//n=65535;

//P0=0x55;

//write_sentence("");

//write_sentence("悠悠苍天奈何独立苍茫熊涛制作单片机液晶显示");

//while(n--);

//n=65535;

//while(n--);

//write_sentence("");

//n=65535;

CS1=CS2=1;

write_cmd(0x3f);}//开显示

/*while

(1)

{write_sentence("故人西辞黄鹤楼,烟花叁月下扬州。

");

while(k--);

write_sentence("孤帆远影碧空尽,唯见长江天际流。

");

while(k--);

}*/}

//------------------汉字字模的数据结构定义------------------------//

typedefstructtypFNT_GB16//汉字字模数据结构

{

signedcharIndex[2];//汉字内码索引

charMsk[32];//点阵码数据

};

/////////////////////////////////////////////////////////////////////////

//汉字字模表//

//Font:

楷体16,纵向取模下高位,数据排列:

从左到右从上到下//

/////////////////////////////////////////////////////////////////////////

structtypFNT_GB16codeGB_16[]=//数据表

{

"",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

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

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

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

"单",0x00,0x00,0x00,0x00,0x70,0x92,0xAC,0xA8,

0xF8,0xAC,0x8A,0x69,0x18,0x00,0x00,0x00,

0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,

0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,

"片",0x00,0x00,0x00,0x00,0x00,0xFE,0x20,0x20,

0x20,0xA0,0x9F,0x10,0x10,0x00,0x00,0x00,

0x00,0x00,0x20,0x10,0x0C,0x03,0x01,0x01,

0x01,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,

"机",0x00,0x00,0x20,0x20,0xFF,0x90,0x10,0x00,

0x00,0xF0,0x08,0xE8,0x18,0x00,0x00,0x00,

0x00,0x04,0x02,0x01,0x3F,0x00,0x11,0x08,

0x06,0x01,0x00,0x07,0x08,0x08,0x08,0x0E,

"液",0x00,0x00,0x20,0x64,0x0C,0x00,0x90,0x70,

0x10,0x89,0x6A,0x48,0xC8,0x00,0x00,0x00,

0x00,0x00,0x18,0x07,0x02,0x01,0x3F,0x10,

0x11,0x0A,0x05,0x0A,0x19,0x10,0x10,0x10,

"晶",0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x2A,

0x29,0x21,0xBF,0x80,0x80,0x80,0x00,0x00,

0x00,0x00,0x00,0x3F,0x15,0x11,0x3F,0x00,

0x00,0x3F,0x14,0x14,0x10,0x3F,0x00,0x00,

"显",0x00,0x00,0x00,0x00,0x0C,0x74,0xD4,0x54,

0x2A,0xAA,0x22,0x1E,0x80,0x00,0x00,0x00,

0x00,0x20,0x20,0x22,0x24,0x20,0x1F,0x10,

0x10,0x1F,0x14,0x12,0x11,0x10,0x10,0x00,

"示",0x00,0x00,0x40,0x40,0x40,0x44,0x44,0x44,

0xC4,0x24,0x22,0x22,0x20,0x20,0x20,0x00,

0x00,0x00,0x00,0x0C,0x07,0x00,0x00,0x10,

0x3F,0x00,0x00,0x01,0x02,0x06,0x00,0x00,

"武",0x00,0x00,0x00,0x40,0x50,0x50,0xC8,0x28,

0x20,0xFF,0x10,0x12,0x14,0x00,0x00,0x00,

0x00,0x00,0x20,0x20,0x1F,0x10,0x0F,0x09,

0x09,0x00,0x03,0x0C,0x10,0x20,0x40,0x78,

"汉",0x00,0x20,0x40,0x02,0x84,0x00,0x28,0x48,

0x88,0x04,0xE4,0x1C,0x00,0x00,0x00,0x00,

0x00,0x00,0x18,0x06,0x09,0x08,0x04,0x04,

0x02,0x01,0x02,0x04,0x0C,0x08,0x08,0x00,

"理",0x00,0x00,0x88,0x88,0xF8,0x44,0x00,0x1C,

0xE4,0xA4,0xFC,0x52,0x42,0x7E,0x00,0x00,

0x00,0x08,0x08,0x04,0x07,0x12,0x12,0x10,

0x12,0x12,0x0F,0x09,0x09,0x08,0x08,0x00,

"工",0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,

0xF0,0x08,0x08,0x08,0x00,0x00,0x00,0x00,

0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,

0x07,0x04,0x04,0x04,0x04,0x04,0x04,0x00,

"大",0x00,0x00,0x00,0x40,0x40,0x40,0x40,0xFF,

0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,

0x00,0x00,0x20,0x10,0x08,0x04,0x03,0x00,

0x01,0x02,0x04,0x08,0x10,0x30,0x20,0x20,

"学",0x00,0x00,0xC0,0x70,0x22,0x24,0xA0,0x52,

0x54,0xD0,0x58,0x17,0x10,0x30,0x10,0x00,

0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x24,

0x43,0x3E,0x02,0x02,0x02,0x02,0x00,0x00,

"余",0x00,0x00,0x80,0x40,0x20,0x50,0x4C,0xC3,

0x24,0x28,0x10,0x20,0x60,0x40,0x40,0x40,

0x00,0x01,0x00,0x22,0x1A,0x02,0x22,0x7F,

0x01,0x01,0x05,0x09,0x10,0x00,0x00,0x00,

"区",0x00,0x00,0x00,0x04,0xFC,0x04,0x04,0x24,

0x44,0x82,0x42,0x3A,0x02,0x02,0x00,0x00,

0x00,0x00,0x00,0x00,0x3F,0x20,0x14,0x12,

0x11,0x10,0x11,0x12,0x14,0x10,0x00,0x00,

"熊",0x00,0x00,0x00,0x10,0xD8,0xB4,0x2B,0xEC,

0x00,0x0F,0xD4,0x14,0x92,0x18,0x00,0x00,

0x00,0x00,0x20,0x30,0x07,0x02,0x14,0x27,

0x00,0x10,0x23,0x05,0x04,0x14,0x23,0x00,

"涛",0x00,0x10,0x20,0x82,0x0C,0x40,0x40,0xD4,

0x74,0x5F,0x2A,0xAA,0x22,0x20,0x00,0x00,

0x00,0x08,0x0C,0x23,0x10,0x08,0x06,0x03,

0x06,0x2A,0x4

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

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1