TR803.docx
《TR803.docx》由会员分享,可在线阅读,更多相关《TR803.docx(13页珍藏版)》请在冰豆网上搜索。
TR803
TR-80394v-0液晶资料
DB0-------------DB7ER/WD/IV0VCCGNDVDDVSSCSACSB
DB0-------------DB7:
为并行数据入口。
E:
为时钟信号,提供数据读写的脉冲。
下降沿数据写入内部寄存器,上升沿读出内部数据。
R/W:
为读写控制,0为写,1为读
VCC:
+5V电源
GND:
电源地
VDD:
背光灯电源地
VSS:
背光灯电源,连接方式背光灯与电源共地,电源接300欧电阻接VSS
CSA:
片选信号;0为选
CSB:
片选信号:
0为选
下面是自己调试后的程序:
#include
//包含字库该字库采用晓奇工作室液晶字模提取软件默认保存的文件采用结构体数组定义的方法
#include
typedefunsignedcharuchar;
typedefunsignedintuint;
structword_BUFFER
{ucharword[2];};
structword_BUFFERword_buf[33];//定义结构体数组用来存储待显示的汉字 共32个
ucharbank=0;//设置第几行反显0表示不反显1~4表示各行的反显
ucharkey=0;//第几个键被按下
sbitDI=P2^0;//数据\指令选择
sbitRW=P2^1;//读\写选择
sbitE=P2^2;//读\写使能
sbitCS2=P0^1;//片选1
sbitCS1=P0^0;//片选2
sbitRST=P3^2;//复位
//------------------汉字字模的数据结构定义------------------------//
typedefstructtypFNT_GB16//汉字字模数据结构
{
signedcharIndex[2];//汉字内码索引
charMsk[32];//点阵码数据
};
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,0x42,0x3F,0x01,0x01,0x01,0x00,
"制",0x00,0x00,0x80,0xA0,0x98,0x90,0xFE,0x48,
0x48,0x40,0x00,0xF0,0x00,0xFE,0x00,0x00,
0x00,0x00,0x00,0x0E,0x02,0x02,0x3F,0x09,
0x0F,0x00,0x00,0x03,0x10,0x3F,0x00,0x00,
"作",0x00,0x80,0x40,0x20,0xF0,0x0E,0x80,0x40,
0x30,0x1C,0xF3,0x90,0x88,0x88,0x08,0x00,
0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,
0x00,0x00,0x7F,0x04,0x04,0x04,0x00,0x00,
"悠",0x00,0x80,0x40,0x20,0xF8,0x06,0xF0,0x10,
0x88,0x57,0x24,0x5C,0x84,0x84,0x80,0x00,
0x00,0x00,0x10,0x0C,0x01,0x04,0x08,0x11,
0x22,0x24,0x20,0x28,0x30,0x22,0x04,0x00,
"苍",0x00,0x00,0x08,0x08,0x08,0x85,0x4F,0x34,
0x14,0x24,0x4F,0x84,0x84,0x04,0x00,0x00,
0x00,0x04,0x04,0x02,0x01,0x00,0x3E,0x41,
0x41,0x49,0x47,0x40,0x39,0x01,0x01,0x01,
"天",0x00,0x00,0x00,0x40,0x44,0x44,0x44,0xFC,
0x22,0x22,0x22,0x20,0x00,0x00,0x00,0x00,
0x00,0x20,0x20,0x10,0x08,0x04,0x03,0x00,
0x01,0x02,0x04,0x08,0x10,0x30,0x20,0x20,
/*"奈",0x00,0x00,0x00,0x08,0x88,0x48,0xB8,0x8F,
0x48,0x54,0x24,0x44,0x84,0x80,0x00,0x00,
0x00,0x02,0x02,0x21,0x1A,0x02,0x02,0x22,
0x7E,0x01,0x09,0x11,0x00,0x01,0x01,0x01,
//"何",0x00,0x80,0x40,0x20,0xF8,0x06,0x10,0xD0,
0x50,0x50,0xC8,0x08,0xF8,0x08,0x08,0x08,
0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x03,
0x02,0x01,0x01,0x20,0x3F,0x00,0x00,0x00,*/
"独",0x00,0x00,0x44,0x28,0x90,0xE8,0x06,0x60,
0xA0,0x20,0xFE,0x90,0x90,0xF0,0x00,0x00,
0x00,0x04,0x02,0x09,0x10,0x0F,0x00,0x10,
0x11,0x11,0x0F,0x08,0x08,0x0C,0x18,0x00,
"立",0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x22,
0x24,0x20,0xA0,0x20,0x00,0x00,0x00,0x00,
0x00,0x10,0x10,0x10,0x10,0x11,0x16,0x10,
0x08,0x0E,0x09,0x08,0x08,0x08,0x08,0x00,
"茫",0x00,0x00,0x80,0x08,0x28,0x48,0x1E,0x08,
0x04,0x24,0x5F,0x84,0x84,0x84,0x04,0x00,
0x00,0x00,0x00,0x31,0x18,0x06,0x00,0x01,
0x3F,0x21,0x21,0x10,0x10,0x10,0x00,0x00
};
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);;}}}*/
/**********************************************\
|*初始化子