/**********************************************************
128是由两块*的液晶屏组成的。当中页是通过自己去定义的。
**********************************************************/
#include\"reg51.h\"
#define uchar unsigned char
#define uint unsigned int
sbit lcdrst=P3^0;
sbit cs2=P3^5;
sbit cs1=P3^4;
sbit e=P3^2;
sbit rw=P3^3;
sbit rs=P3^1;
/************************************************
代码:字模生成可以在取模软件生成 。
方法是阴码 列行式 逆向
************************************************/
uchar code
qin[]={0x04,0x04,0xC4,0x5F,0x54,0xF4,0x54,0x5F,0xC4,0x14,0x10,0xFF,0x10,0x10,0xF0,
0x00,0x00,0x80,0x95,0x95,0x95,0x7F,0x55,0x55,0x95,0x60,0x1C,0x03,0x20,0x60,0x3F,0x00};
// 勤
uchar code
mian[]={0x00,0xF0,0x2C,0x27,0xE4,0x34,0x2C,0xE4,0x08,0x08,0xFF,0x08,0x08,0xF8,
0x00,0x00,0x40,0x21,0x11,0x0F,0x01,0x3F,0x41,0x49,0x44,0x43,0x40,0x44,0x48,0x47,0x70,0x00}; //勉
uchar code
li[]={0x44,0x44,0xFC,0x44,0x44,0x00,0xFE,0x92,0x92,0xFE,0x92,0x92,0x92,0xFE,
0x00,0x00,0x10,0x10,0x0F,0x08,0x48,0x40,0x45,0x44,0x44,0x7F,0x44,0x44,0x44,0x45,0x40,0x00};
//理
uchar code
gong[]={0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,
0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00}; //工
uchar code
xue[]={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};
//学
uchar code
yuan[]={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};
//院
uchar code
dian[]={0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,
0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00};
//电
uchar code
zi[]={0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xE2,0x12,0x0A,0x06,0x02,0x00,0x80,0x00,
0x00,0x01,0x01,0x01,0x01,0x01,0x41,0x81,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00};
//子
uchar code
cheng[]={0x10,0x12,0xD2,0xFE,0x91,0x11,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,
0x00,0x00,0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00}; //程
uchar code
tong[]={0x40,0x41,0xC6,0x00,0x00,0xF2,0x52,0x52,0x56,0xFA,0x5A,0x56,0xF2,0x00,
0x00,0x00,0x40,0x20,0x1F,0x20,0x40,0x5F,0x42,0x42,0x42,0x5F,0x4A,0x52,0x4F,0x40,0x40,0x00};
//通
uchar code
xin[]={0x80,0x40,0x30,0xFC,0x07,0x0A,0xA8,0xA8,0xA9,0xAE,0xAA,0xA8,0xA8,0x08,0x08,
0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x7E,0x22,0x22,0x22,0x22,0x22,0x7E,0x00,0x00,0x00};
//信
uchar code
ban[]={0x42,0x42,0xFE,0x42,0x42,0xE0,0x00,0xFF,0x00,0x42,0x42,0xFE,0x42,0x42,0x42,
0x00,0x10,0x10,0x0F,0x88,0x49,0x20,0x18,0x07,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x00};
//班
uchar code
ling[]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00}; //0
uchar code
ba[]={0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00};
//8
uchar code
yi[]={0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00}; //1
uchar code
kongge[]={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};
//不显示任何内容
uchar code
kong[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //不显示任何内容
uchar code
huo[]={0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0xFF,0x02,0x40,0x20,0x18,0x10,0x00,0x00,0x00,
0x00,0x80,0x41,0x20,0x10,0x0C,0x03,0x00,0x03,0x04,0x18,0x30,0x60,0x20,0x00,0x00};
//火
uchar code
yun[]={0x40,0x40,0x44,0x44,0x44,0x44,0xC4,0xC4,0x44,0x44,0x46,0x46,0x,0x60,0x40,0x00,
0x00,0x20,0x70,0x38,0x2C,0x27,0x23,0x31,0x10,0x12,0x14,0x18,0x70,0x20,0x00,0x00};
//云
uchar code
xie[]={0x00,0x22,0x3E,0x22,0x22,0xA2,0xFE,0x22,0x00,0xFE,0x02,0x22,0x5A,0x86,0x02,
0x00,0x10,0x10,0x08,0x04,0x23,0x40,0x3F,0x00,0x00,0xFF,0x00,0x04,0x08,0x08,0x07,0x00};
//邪
uchar code
shen[]={0x08,0x08,0x,0xCE,0xA8,0x18,0x00,0xF8,0x48,0x48,0xFF,0x48,0x48,0xF8,
0x00,0x00,0x02,0x01,0x00,0xFF,0x00,0x03,0x00,0x07,0x02,0x02,0xFF,0x02,0x02,0x07,0x00,0x00};
//神
/*************************************************
延时函数
**************************************************/
void delay(uchar z)
{
uchar i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
/********************************************
检查状态
*********************************************/
void checkbusy()
{
uchar dat;
rs=0; //数据\\指令选择
rw=1; //允许读
do
{
P2=0x00; //清零P2口
delay(5);
e=1;
dat=P2; //读P2口
e=0;
dat>>=7; //仅当第7位为0时才可操作(判别busy信号)
}
while(!(dat==0x00));
}
/*************************************
写命令
***********************************/
void write_com(uchar com)
{
checkbusy(); //检查是否忙
rs=0; //写命令
rw=0;
P2=com;
e=1;
e=0;
}
/*************************************
写数据
***********************************/
void write_data(uchar date)
{
checkbusy(); //检查是否忙
rs=1; //写数据
rw=0;
P2=date;
e=1;
e=0;
}
/*************************************
显示汉字
***********************************/
void hanzi(uchar ye,uchar lie,uchar *daima)
{
uchar i,j;
for(i=0;i<2;i++)
{
write_com(0xb8+ye+i); // ye页与 ye+1页
write_com(0x40+lie); //确定初始行
for(j=0;j<16;j++)
{
write_data(daima[i*16+j]); //写数据(汉字)
}
}
}
/*************************************
显示数字
***********************************/
void shuzi(uchar ye,uchar lie,uchar *daima)
{
uchar i,j;
for(i=0;i<2;i++)
{
write_com(0xb8+ye+i); // ye页与 ye+1页
write_com(0x40+lie); //确定初始行
for(j=0;j<8;j++)
{
write_data(daima[i*8+j]); //写数据(数字)
}
}
}
/***************************************
清屏
***************************************/
void clearlcd()
{
uchar i,j;
cs1=0; //清全屏cs2=0;
for(i=0;i<8;i++)
{
write_com(0xb8+i);
write_com(0x40);
for(j=0;j<;j++)
write_data(0x00);
}
}
有cs1=0 cs2=0 与无 cs1=0 cs2=0 效果不同
/****************************************
初始化LCD
****************************************/
void init()
{
write_com(0x3e); //关显示
delay(1);
write_com(0x3f); //开显示
write_com(0xc0); //行初始地址
write_com(0xb8); //页初始地址
write_com(0x40); //列初始地址
}
/****************************************
显示数据
****************************************/
void display()
{
cs1=0; //左半屏 cs1=0 cs2=1;
hanzi(0,0,qin);
hanzi(0,16,mian);
hanzi(0,32,li);
hanzi(0,48,gong);
cs1=1; //右半屏 cs1=1 cs2=0;
hanzi(0,0,xue);
cs2=1
cs2=0
hanzi(0,16,yuan);
//hanzi(0,32,kongge); 加上
// 如果清屏时加上cs1=0 cs2=0则可以不用,否则要
//hanzi(0,48,kongge);
cs1=0;
cs2=1;
hanzi(2,0,dian);
hanzi(2,16,zi);
hanzi(2,32,gong);
hanzi(2,48,cheng);
cs1=1;
cs2=0;
hanzi(2,0,xue);
hanzi(2,16,yuan);
//hanzi(2,32,kongge);
//hanzi(2,48,kongge);
cs1=0;
cs2=1;
shuzi(4,0,ling);
shuzi(4,8,ba);
hanzi(4,16,tong);
hanzi(4,32,xin);
hanzi(4,48,gong);
cs1=1;
cs2=0;
hanzi(4,0,cheng);
shuzi(4,16,yi);
hanzi(4,24,ban);
//hanzi(4,40,kongge);
shuzi(4,56,kong);
cs1=0;
cs2=1;
hanzi(6,0,huo);
hanzi(6,16,yun);
hanzi(6,32,xie);
hanzi(6,48,shen);
cs1=1;
cs2=0;
//hanzi(6,0,kongge);
//hanzi(6,16,kongge);
//hanzi(6,32,kongge);
//hanzi(6,48,kongge);
}
/****************************************
主函数
****************************************/
void main()
{
init();
clearlcd();
while(1)
{
display();
}
}