LCD显示汉字.docx
- 文档编号:29930276
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:15
- 大小:113.14KB
LCD显示汉字.docx
《LCD显示汉字.docx》由会员分享,可在线阅读,更多相关《LCD显示汉字.docx(15页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LCD 显示 汉字