📄 lcd.c
字号:
#include <reg51.h>
sbit DI=P2^2; // 数据\指令 选择
sbit RW=P2^1; // 读\写 选择
sbit E=P2^0; // 读\写使能
sbit CS1=P2^4; // 片选1
sbit CS2=P2^3; // 片选2
unsigned int number=0,mstcnt=0;
unsigned char code ziku[]={
/*-- 文字: 广 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xFC,0x04,0x04,0x04,0x04,0x05,0x06,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 西 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0xF2,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0xF2,0x02,0x00,
0x00,0x7F,0x28,0x24,0x22,0x21,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00,
/*-- 文字: 民 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0xF2,0x92,0x92,0x92,0x9E,0x80,0x80,0x00,0x00,
0x00,0x00,0xFF,0x40,0x20,0x10,0x00,0x00,0x03,0x0C,0x10,0x20,0x40,0xF0,0x00,0x00,
/*-- 文字: 族 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x08,0xF9,0x4E,0x48,0xC8,0x20,0x98,0x6F,0x4A,0xC8,0x48,0x48,0x48,0x08,0x00,
0x40,0x38,0x07,0x40,0x80,0x7F,0x40,0x42,0x22,0x12,0x0F,0x12,0x22,0x42,0x42,0x00,
/*-- 文字: 大 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,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 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x58,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 环 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x22,0x22,0xFE,0x22,0x22,0x00,0x02,0xC2,0x32,0xFE,0x42,0x82,0x02,0x02,0x00,
0x00,0x04,0x04,0x03,0x12,0x0A,0x04,0x03,0x00,0x00,0xFF,0x00,0x00,0x03,0x0E,0x00,
/*-- 文字: 境 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x20,0xFE,0x20,0x20,0x00,0x24,0xAC,0xB4,0xA5,0xA6,0xB4,0xAC,0x24,0x00,0x00,
0x10,0x30,0x1F,0x08,0x08,0x00,0x80,0x4F,0x3A,0x0A,0x0A,0x7A,0x8F,0x80,0xE0,0x00,
/*-- 文字: 优 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x20,0xF8,0x17,0x02,0x10,0x10,0xF0,0x1F,0xF0,0x12,0x1C,0x14,0x10,0x00,0x00,
0x00,0x00,0xFF,0x00,0x40,0x20,0x18,0x07,0x00,0x3F,0x40,0x40,0x40,0x78,0x20,0x00,
/*-- 文字: 美 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x84,0x84,0x94,0x95,0x96,0x94,0xFC,0x94,0x96,0x95,0x94,0x94,0x84,0x80,0x00,
0x80,0x80,0x44,0x44,0x24,0x14,0x0C,0x07,0x0C,0x14,0x24,0x64,0xC4,0x44,0x00,0x00,
/*-- 文字: , --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x58,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 历 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xFE,0x02,0x22,0x22,0x22,0x22,0xFA,0x22,0x22,0x22,0xE2,0x02,0x02,0x00,
0x40,0x30,0x0F,0x00,0x40,0x20,0x18,0x06,0x01,0x00,0x20,0x60,0x3F,0x00,0x00,0x00,
/*-- 文字: 史 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,
0x80,0x80,0x41,0x40,0x22,0x14,0x08,0x17,0x20,0x20,0x20,0x40,0x41,0xC0,0x40,0x00,
/*-- 文字: 悠 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x10,0xFC,0x03,0xF8,0x20,0x10,0x0C,0x17,0xA4,0x44,0xB4,0x0C,0x04,0x04,0x00,
0x40,0x70,0x03,0x00,0x38,0x40,0x40,0x45,0x59,0x40,0x40,0x70,0x01,0x13,0x61,0x00,
/*-- 文字: 久 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x80,0x40,0x30,0x0C,0x0B,0x08,0xC8,0xBC,0x08,0x00,0x00,0x00,0x00,0x00,
0x40,0x41,0x20,0x20,0x10,0x08,0x04,0x03,0x00,0x01,0x06,0x18,0x30,0x60,0x20,0x00,
/*-- 文字: 。 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x18,0x24,0x24,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 欢 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x14,0x24,0x44,0x84,0x64,0x1C,0x20,0x18,0x0F,0xE8,0x08,0x08,0x28,0x18,0x08,0x00,
0x20,0x10,0x4C,0x43,0x43,0x2C,0x20,0x10,0x0C,0x03,0x06,0x18,0x30,0x60,0x20,0x00,
/*-- 文字: 迎 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x41,0xCE,0x04,0x00,0xFC,0x04,0x02,0x02,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
0x40,0x20,0x1F,0x20,0x40,0x47,0x42,0x41,0x40,0x5F,0x40,0x42,0x44,0x43,0x40,0x00,
/*-- 文字: 你 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x80,0x40,0xF0,0x2C,0x43,0x20,0x98,0x0F,0x0A,0xE8,0x08,0x88,0x28,0x1C,0x08,0x00,
0x00,0x00,0x7F,0x00,0x10,0x0C,0x03,0x21,0x40,0x3F,0x00,0x00,0x03,0x1C,0x08,0x00,
/*-- 文字: 的 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xF8,0x8C,0x8B,0x88,0xF8,0x40,0x30,0x8F,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,
0x00,0x7F,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x03,0x26,0x40,0x20,0x1F,0x00,0x00,
/*-- 文字: 到 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x22,0x72,0x2A,0x26,0xE2,0x2A,0x72,0x22,0x00,0xF8,0x00,0x00,0xFF,0x00,0x00,
0x00,0x42,0xC2,0x42,0x22,0x3F,0x22,0x12,0x12,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,
/*-- 文字: 来 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x80,0x84,0x84,0x94,0xA4,0xC4,0xFF,0x84,0xC4,0xB4,0x94,0x84,0x84,0x80,0x00,
0x20,0x20,0x10,0x10,0x08,0x04,0x02,0xFF,0x01,0x02,0x04,0x08,0x18,0x30,0x10,0x00,
/*-- 文字: ! --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 计 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x21,0x2E,0xE4,0x00,0x00,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x00,
0x00,0x00,0x00,0x7F,0x20,0x10,0x08,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 算 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x07,0xFA,0xAA,0xAE,0xAA,0xAA,0xA8,0xAC,0xAB,0xAA,0xFE,0x0A,0x02,0x02,0x00,
0x08,0x08,0x8B,0x6A,0x1E,0x0A,0x0A,0x0A,0x0A,0xFE,0x0A,0x0B,0x08,0x08,0x08,0x00,
/*-- 文字: 机 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x08,0xC8,0xFF,0x48,0x88,0x08,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,
0x04,0x03,0x00,0xFF,0x00,0x41,0x30,0x0C,0x03,0x00,0x00,0x00,0x3F,0x40,0x78,0x00,
/*-- 文字: 科 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x12,0x92,0x72,0xFE,0x51,0x91,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00,
0x04,0x02,0x01,0x00,0xFF,0x00,0x04,0x04,0x04,0x02,0x02,0x02,0xFF,0x01,0x01,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 --*/
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,
/*-- 文字: --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
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,
};
void checkstate()
{
unsigned char dat;
DI=0;
RW=1;
do
{
P1=0x00;
E=1;
dat=P1;
E=0;
dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号)
}while(!(dat==0x00));
}
void writecommand(unsigned char command) //写命令
{
checkstate();
RW=0;
P1=command;
E=1;
E=0;
}
void writedate(unsigned char date) //写数据
{
checkstate();
DI=1; RW=0;
P1=date;
E=1; E=0;
}
void cleanscreen() //清屏
{
unsigned char page,i;
for(page=0xb8;page<0xc0;page++)
{
writecommand(page);
writecommand(0x40);
for(i=0;i<64;i++)
writedate(0x00);
}
}
void choosescreen(unsigned char NO) //选择屏幕
{
switch (NO)
{
case 0:
CS1=0;
CS2=0;
break;
case 1:
CS1=0;
CS2=1;
break;
case 2:
CS1=1;
CS2=0;
break;
default:
break;
}
}
void lce_init(void)
{
writecommand(0xc0);
writecommand(0x3f);
}
void display(unsigned char count)
{
unsigned int i,m;
choosescreen(1);
writecommand(0xb8);
writecommand(0x40);
for(i=0;i<count*16;i++)
{
if(i!=0&&i%16==0)
m++;
switch (i)
{
case 64:
choosescreen(2);
writecommand(0xb8);
writecommand(0x40);
break;
case 128:
choosescreen(1);
writecommand(0xba);
writecommand(0x40);
break;
case 192:
choosescreen(2);
writecommand(0xba);
writecommand(0x40);
break;
case 256:
choosescreen(1);
writecommand(0xbc);
writecommand(0x40);
break;
case 320:
choosescreen(2);
writecommand(0xbc);
writecommand(0x40);
break;
case 384:
choosescreen(1);
writecommand(0xbe);
writecommand(0x40);
break;
case 448:
choosescreen(2);
writecommand(0xbe);
writecommand(0x40);
break;
default:
break;
}
writedate(*(ziku+i+m*16));
}
choosescreen(1);
writecommand(0xb9);
writecommand(0x40);
m=0;
for(i=0;i<count*16;i++)
{
if(i!=0&&i%16==0)
m++;
switch (i)
{
case 64:
choosescreen(2);
writecommand(0xb9);
writecommand(0x40);
break;
case 128:
choosescreen(1);
writecommand(0xbb);
writecommand(0x40);
break;
case 192:
choosescreen(2);
writecommand(0xbb);
writecommand(0x40);
break;
case 256:
choosescreen(1);
writecommand(0xbd);
writecommand(0x40);
break;
case 320:
choosescreen(2);
writecommand(0xbd);
writecommand(0x40);
break;
case 384:
choosescreen(1);
writecommand(0xbf);
writecommand(0x40);
break;
case 448:
choosescreen(2);
writecommand(0xbf);
writecommand(0x40);
break;
default:
break;
}
writedate(*(ziku+i+m*16+16));
}
m=0;
}
void t0(void) interrupt 1 using 0
{
mstcnt++;
if(mstcnt==2000)
{
mstcnt=0;
number++;
}
}
main()
{
TMOD=0x02;
TH0=0x06;
TL0=0x06;
TR0=1;
ET0=1;
EA=1;
E=1;
choosescreen(0);
cleanscreen();
lce_init();
while(1)
{
display(number);
if(number==33)
{
number=0;
choosescreen(0);
cleanscreen();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -