AMPIRE12864液晶屏显示汉字
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit LCD_RS=P3^5;//数据和命令端
sbit LCD_EN=P3^4;//使能端
sbit LCD_RW=P3^3;
sbit CS1=P2^1;
sbit CS2=P2^2;
uchar code a[]={
/*-- 文字: 中 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00, 0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00,
/*-- 文字: 国 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFE,0x02,0x0A,0x8A,0x8A,0x8A,0xFA,0x8A,0x8A,0x8A,0x0A,0x02,0xFE,0x00,0x00, 0x00,0xFF,0x40,0x48,0x48,0x48,0x48,0x4F,0x48,0x49,0x4E,0x48,0x40,0xFF,0x00,0x00,
/*-- 文字: 湖 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x21,0x86,0x60,0x90,0x90,0xFF,0x90,0x90,0x00,0xFE,0x92,0x92,0xFE,0x00,0x00, 0x04,0xFC,0x03,0x00,0x1F,0x10,0x10,0x90,0x5F,0x30,0x0F,0x40,0x80,0x7F,0x00,0x00,
/*-- 文字: 北 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x20,0x20,0x20,0x20,0xFF,0x00,0x00,0x00,0xFF,0x40,0x20,0x30,0x18,0x10,0x00, 0x10,0x30,0x18,0x08,0x04,0x7F,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x78,0x00,
/*-- 文字: 省 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x10,0x90,0x88,0x86,0xC0,0xC0,0xBF,0xA0,0x90,0x90,0x8A,0x84,0x18,0x00,0x00, 0x01,0x01,0x00,0x00,0xFF,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0xFF,0x00,0x00,0x00,
/*-- 文字: 襄 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x02,0xA2,0xAE,0xAA,0xFA,0xAE,0xA3,0xA2,0xFE,0xAA,0xAA,0xAE,0x22,0x02,0x00, 0x22,0x22,0x12,0x12,0x0A,0xFF,0x42,0x22,0x06,0x0B,0x12,0x2A,0x66,0xC2,0x42,0x00,
/*-- 文字: 阳 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFE,0x02,0x22,0x5A,0x86,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00, 0x00,0xFF,0x04,0x08,0x04,0x03,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,
/*-- 文字: 市 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x04,0x04,0x04,0xE4,0x24,0x24,0x25,0xFE,0x24,0x24,0x24,0x24,0xE4,0x04,0x04,0x00, 0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0xFF,0x00,0x00,0x10,0x20,0x1F,0x00,0x00,0x00,
/*-- 文字: 襄 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x02,0xA2,0xAE,0xAA,0xFA,0xAE,0xA3,0xA2,0xFE,0xAA,0xAA,0xAE,0x22,0x02,0x00, 0x22,0x22,0x12,0x12,0x0A,0xFF,0x42,0x22,0x06,0x0B,0x12,0x2A,0x66,0xC2,0x42,0x00,
/*-- 文字: 樊 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x80,0x48,0x28,0xFF,0x28,0x02,0xAC,0x44,0xAA,0x00,0x48,0x28,0xFF,0x28,0x48,0x00, 0x02,0x42,0x42,0x23,0x22,0x12,0x0A,0x07,0x0A,0x12,0x22,0x62,0xC3,0x42,0x02,0x00,
/*-- 文字: 学 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
/*-- 文字: 院 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0xFE,0x02,0x32,0x4A,0x86,0x0C,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x00, 0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,0x01,0x01,0x7F,0x81,0x81,0x81,0xF1,0x00,
};
void xunhuan (uint x)
{
int y,z;
for(y=x;y>0;y--)
for (z=120;z>0;z--);
}
void write_c(uchar c) //写指令端
{
LCD_RW=0;
LCD_RS=0;
LCD_EN=1;
P1=c;
LCD_EN=0;
xunhuan(1);
LCD_EN=1;
//xunhuan(5);
}
void write_d(uchar d)//写数据 {
LCD_RW=0; LCD_RS=1;
LCD_EN=1;
P1=d;
LCD_EN=0;
xunhuan(1); LCD_EN=1;
//xunhuan(5); }
void pianxuan(screen) //片选
{
switch(screen)
{
case 0:
CS1=0;
CS2=0;
break;
case 1:
CS1=1;
CS2=0;
break;
case 2:
CS1=0;
CS2=1;
break;
case 3:
CS1=1;
CS2=1;
break;
}
}
void qinping(screen)//清屏,从第一行第一列开始
{
uint x,y; //页的设置位
pianxuan(screen);//选择哪个清屏
for(x=0xb8;x<0xc0;x++)
{
write_c(x);//页初始值为0XB8到0xc0共八页
write_c(0x40);//列的初始地址为0x40,共64列
for(y=0;y<64;y++)
{
write_d(0x00);//选择全部清屏
}
}
}
/*
LCD显示汉字字库函数
*/
void lcd_display_hanzi(uchar screen,uchar page,uchar lie,uint mun)
{ //screen:选择屏幕参数,page:选择页参数0-3,lie列参数0-3,mun:显示第几个汉字
的参数
int i; //page页其实就是行,是行计数器页指针 共九位计数器,高三位
为X,低六位为Y
mun=mun*32;
pianxuan(screen) ; //片选看哪个段
write_c(0x40+(lie*16)); //一个汉字占用两个字节
write_c(0xb8+(page*2)); //一个字节显示
for ( i=0;i<16;i++)
{
write_d(a[mun++]);
}
write_c(0x40+(lie*16));
write_c(0xb8+(page*2)+1);
for (i=0;i<16;i++)
{
write_d(a[mun++]);
}
}
void LCD_init()
{
write_c(0x3f);// 显示开启
write_c(0xc0); //显示起始行,从第一位开始 ,从0到63
write_c(0xb8);// 设置页得地址从0到7 write_c(0x40); //设置列的地址,从第一位开始 ,从0到63
}
void main()
{
LCD_init();
qinping(0);
lcd_display_hanzi(0,0,0,0); //LCD显示汉字 lcd_display_hanzi(0,0,1,1); //LCD显示汉字 lcd_display_hanzi(0,0,2,2); //LCD显示汉字 lcd_display_hanzi(0,0,3,3); //LCD显示汉字 lcd_display_hanzi(1,0,0,4); //LCD显示汉字 lcd_display_hanzi(1,0,1,5); //LCD显示汉字 lcd_display_hanzi(1,0,2,6); //LCD显示汉字 lcd_display_hanzi(1,0,3,7); //LCD显示汉字 lcd_display_hanzi(2,1,0,8); //LCD显示汉字 lcd_display_hanzi(2,1,1,9); //LCD显示汉字 lcd_display_hanzi(2,1,2,10); //LCD显示汉字 lcd_display_hanzi(2,1,3,11); //LCD显示汉字
while(1);
}
在protues中的仿真原理图,
真实情况下的仿真效果