我最近刚刚学单片机,找人借了快QC12864b想显示汉字,但折腾了一天多还没弄出来,我查了资料,这个是带字库的,但不晓得怎样弄,使用说明也有,试了半天没反应,希望哪位高手教一下显示汉字的步骤,感谢了。
------解决方案--------------------
找液晶厂家要例程,或者上厂家的网站上,一般都有相应的例程下载的
------解决方案--------------------
字库一般都是个文件 按照你要显示汉字的编码索引(可能不同方式) 找到相应的数据位置,根据汉字大小读取里面的数据,然后按照点阵的方式发到屏幕上就可以了。
可以自己写函数,如果有现成的 可以直接用,但要明白原理,这样遇到问题也好解决。
------解决方案--------------------
网上找例程,先尝试点亮几个点,画条线什么的,然后再开始显示数字,汉字,
------解决方案--------------------
首先看看该模块的说明文档 再看例程代码就能懂了
------解决方案--------------------
#include<reg52.h>
#define uchar unsigned char
sfr WDT_CONTR=0x0C1;
/***********************端口定义*************************/
#define DAT P1
sbit RS=P3^5;
sbit RW=P3^4;
sbit E=P3^3;
int inBUF=0; //接收标志,用以显示工作状态
int newBUF=0; //初始化为1,用于显示开机
int newflag=1; //用于检测开机时发出的第一个字符,延时用
/***********************函数声明*************************/
void busy();
void write(bit,uchar);
void INIT_LCD();
void display(bit ,uchar *dat); //参考帮助文档 c235 error
void displayzt(uchar *dat);
/*UART接收,使用中断方式*/
void inteReceive (void) interrupt 4 using 1
{
if(RI == 1)
{
RI = 0;
inBUF=SBUF;
newBUF=1;
}
}
//单字符发送
void sendChar(unsigned char ch)
{
SBUF = ch;
while(TI == 0);
TI = 0;
}
/*22.1184MHZ下精确延时1ms*/
void delayms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<2000;j++)
{
WDT_CONTR=0x3F;
}
}
/*void delay10us(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<11;j++)
{
}
}
*/
/***********************主函数****************************/
void main()
{
int timeus=0; //计时标志
int times=0; //
WDT_CONTR=0x3F;
SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD = 0x20; //TMOD: timer 1, mode 2, 8-bit reload
// PCON = 0x00; //SMOD=0;
TH1 = 0xfd; //Baud:19200 fosc=22.1184MHz
IE = 0x90; //interrupt enable
TR1 = 1; //Run
INIT_LCD();
display(0,"XXXXXXXX");
display(1,"XXXX:XX..");
while(inBUF!=170);
{
WDT_CONTR=0x3F; //清看门狗
}
while(1)
{
WDT_CONTR=0x3F; //清看门狗
///////////////用于计时/////////////////////////
timeus++;
if(timeus>2001)
{
times++;
timeus=0;
if(times>10000) //计时约30秒,显示异常
{
newBUF=1;
inBUF=85;
times=0;
}
}
///////////////用于计时/////////////////////////
if(newBUF)
{
if(newflag)
{
delayms(8000);
newflag=0;
}
switch(inBUF)