12864程序,字库与自定义字符的显示.doc
文本预览下载声明
/*------------------------------------
12864并口输入,在输入输出数据是注意时序
之前由于忙检测时序写错,而无法显示字库文字
自定义字符注意地址与编码方式对应,不然会
显示乱码
--------------------------------------*/
#includereg52.h
sbit RS = P2^4;
sbit RW = P2^5;
sbit E = P2^6;
sbit RES = P2^3;
sbit PSB = P2^1;
#define data_port P0
#define uchar unsigned char
#define uint unsigned int
uchar code display[]={西华};
uchar code user[]={
/*-- 文字: 我 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x06,0x40,0x38,0x50,0x08,0x48,0x08,0x48,0x08,0x40,0xFF,0xFE,0x08,0x40,0x08,0x48,
0x0E,0x28,0x38,0x30,0xC8,0x20,0x08,0x50,0x09,0x92,0x08,0x0A,0x28,0x06,0x10,0x02
};
uchar code user1[]={
/*-- 文字: 你 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x08,0x80,0x08,0x80,0x08,0x80,0x11,0x38,0x11,0xC8,0x32,0x10,0x50,0x40,
0x90,0x40,0x12,0x50,0x12,0x4C,0x14,0x44,0x11,0x40,0x10,0xC0,0x00,0x00,0x00,0x00
};
void delay(uint xms)
{
uint i,j;
for(i=0;ixms;i++)
for(j=0;j125;j++);
}
void check_busy(void)
{
RW=1;
RS=0;
E=1;
data_port=0xff;
while((data_port0x80)==0x80);//data_port0x80必须加上括号
E=0;
}
void w_cmd(uint dat)
{check_busy();
RS=0;
RW=0;
E=1;
data_port=dat;
delay(1);
E=0;
delay(1);
}
void w_dat(uint dat)
{check_busy();
RS=1;
RW=0;
E=1;
data_port=dat;
delay(1);
E=0;
delay(1);
}
void init_lcd(void)
{
delay(40);
PSB=1;
RES=0;
delay(1);
RES=1;
delay(10);
w_cmd(0x30);//功能设置,选着8位元模式
delay(1);
w_cmd(0x30);//选择基本指令集,因为DL与RE不能同时改变需要两个指令
delay(1);
w_cmd(0x0c);//开显示(无游标、不反白)
delay(1);
w_cmd(0x01);//clear print
delay(13);
w_cmd(0x06);//指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位,光标从右向左加1位移动,屏幕不移动
delay(1);
}
/*------------------------------------------------
显示字符串
x:横坐标值,范围0~8
y:纵坐标值,范围1~4
------------------------------------------------*/
void post(uchar x,uchar y)
{ uchar add;
switch(y)
{case 1:add=0x80;break;
case 2:add=0x90;break;
case 3:add=0x88;break;
case 4:add=0x98;break;
default:break;
}
add+=x;
w_cmd(add);
}
/*---------------------------------
写入自定义字符
四种编码与写入的地址是一一对应关系;
显示全部