📄 lcd24064-c.c
字号:
#include <stdio.h>
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit CD=P3^2;
sbit RESET=P3^3;
sbit W=P3^0;
sbit R=P3^1; //定义各控制口
void delay(void); //声明延迟函数
void state01(void); //声明S0S1状态检查函数
void state3(void); //声明S3状态检查函数
void writed1d2(uchar,uchar); //声明参数写入函数
void writecom(uchar); //声明指令写入函数
void writedat(uchar); //声明数据写入函数
void writedatauto(void); //声明数据自动写函数
void charshow(void); //声明字型显示函数
void charflash(void); //声明字型闪烁控制函数(PT:死循环)
void writebyte(void); //声明写入一个字符函数
void readycharshow(void); //声明字型写入准备函数
void clear(void); //声明清屏函数(全屏写空格)
void blank(void); //声明写空格函数
void delay(void)
{
uchar data i;
uint data j;
for(i=0;i<100;i++)
for(j=0;j<300;j++);
}
void state01(void)
{
uchar idata i;
P1=0xff;
do
{
R=0;
i=P1;
R=1;
}
while((i&0x03)!=0x03);
}
void state3(void)
{
uchar idata i;
P1=0xff;
do
{
R=0;
i=P1;
R=1;
}
while((i&0x08)!=0x08);
}
void writed1d2(uchar d1,uchar d2)
{
state01();
CD=0;
P1=d1;
W=0;
W=1;
CD=1;
state01();
CD=0;
P1=d2;
W=0;
W=1;
CD=1;
}
void writecom(uchar com)
{
state01();
CD=1;
P1=com;
W=0;
W=1;
}
void writedat(uchar dat)
{
state01();
CD=0;
P1=dat;
W=0;
W=1;
CD=1;
}
void writedatauto(void)
{
uchar data n;
writecom(0xb0); //数据自动写开
for(n=0;n<30;n++) //数据自动写段,文字属性
{
state3();
writedat(0x27);
}
writecom(0xb2); //数据自动写关
}
void clear(void)
{
uint data n;
writed1d2(0x00,0x00); //地址指针
writecom(0x24);
writecom(0xb0); //数据自动写开
for(n=0;n<10000;n++) //数据自动写段,文字属性
{
state3();
writedat(0x00);
}
writecom(0xb2); //数据自动写关
}
void charflash(void)
{
while(1) //字型闪烁控制(死循环)
{
state01();
writecom(0x98);
delay();
state01();
writecom(0x90);
delay();
};
}
void writebyte(void)
{
state01(); //写一个字符,文字属性
writedat(0x28);
state01();
writecom(0xc0);
}
void readycharshow(void) //静态显示可调用
{
uchar idata number;
number=30; //写入字型图象数
state01();
writed1d2((number=(number<<1)),0x00); //图象区宽度 240的LCD横向字节数为30个
writecom(0x43);
}
void blank(void)
{
uchar idata i;
for(i=0;i<30;i++)
{
state01();
writedat(0x00);
state01();
writecom(0xc0);
}
}
void main(void)
{
uchar idata i,a,b; //可随意支配参数
P3=0xff; //P3控制口置位
RESET=0; //LCD上电复位
delay();
RESET=1;
delay();
/*
writed1d2(0x00,0x00); //光标设置
writecom(0x21);
writecom(0x93);
writecom(0xa7);
*/
writed1d2(0x00,0x00); //地址指针
writecom(0x24);
writed1d2(0x00,0x00); //文字首地址
writecom(0x40);
writed1d2(0x1e,0x00); //文字区宽度 注意进制换算 C中0x1e=汇编中30
writecom(0x41);
writed1d2(0x00,0x00); //图象首地址
writecom(0x42);
// writed1d2(0x1e,0x00); //图象区宽度 240的LCD横向字节数为30个
// writecom(0x43); //(后面有设置)
writecom(0x98); //文字开/关 图象开/关
writecom(0x80); //启用内部文字 (逻辑选择)
// writebyte();
/*清全屏幕,注意文字、图形参数不同,文字图形都有时以图形为准,参数可取大些*/
clear();
writed1d2(0x00,0x00); //地址指针
writecom(0x24);
/* */
readycharshow();
while(1)
{
charshow();
writed1d2(0x00,0x00); //地址指针
writecom(0x24);
};
/*
writecom(0xb0); //数据自动写开
for(b=0;b<30;b++) //数据自动写段,文字属性
{
state3();
writedat(0x21);
}
writecom(0xb2); //数据自动写关
*/
while(1);
}
void charshow(void)
{
uchar data i,j,k;
/* uchar *pni; //显示 你好
uchar *phao;
uchar ni[32]={0x09,0x00,0x09,0x80,0x11,0x04,0x13,0xFE,
0x22,0x04,0x34,0x48,0x68,0x40,0xA2,0x50,
0x23,0x48,0x22,0x48,0x24,0x44,0x24,0x46,
0x28,0x44,0x21,0x40,0x20,0x80,0x00,0x00};
uchar hao[32]={0x10,0x00,0x11,0xFC,0x10,0x08,0x10,0x10,
0xFC,0x20,0x24,0x20,0x24,0x20,0x27,0xFE,
0x44,0x20,0x64,0x20,0x18,0x20,0x08,0x20,
0x14,0x20,0x26,0x20,0x44,0xA0,0x80,0x40};
pni=ni;
phao=hao;
//横向取模
/*-- 文字: 昆 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
// uchar code kun[32]={0x00,0x00,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x20,0x40,0x20,0x40,
// 0x20,0x44,0x3E,0x4C,0x20,0x70,0x20,0x40,0x26,0x42,0x38,0x42,0x20,0x3E,0x00,0x00};
/*-- 文字: 山 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
// uchar code shan[32]={0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x21,0x04,0x21,0x04,0x21,0x04,
// 0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x7F,0xFC,0x20,0x04,0x00,0x00};
/*-- 文字: 市 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
// uchar code shi[32]={0x02,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x1F,0xF8,0x11,0x08,0x11,0x08,
// 0x11,0x08,0x11,0x08,0x11,0x08,0x11,0x08,0x11,0x28,0x11,0x10,0x01,0x00,0x01,0x00};
/*-- 文字: 创 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
// uchar code chuang[32]={0x08,0x02,0x08,0x02,0x14,0x12,0x13,0x12,0x21,0xD2,0x40,0x92,0xBF,0x12,0x21,0x12,
// 0x21,0x12,0x25,0x12,0x22,0x12,0x20,0x82,0x20,0x82,0x20,0x8A,0x1F,0x84,0x00,0x00};
/*-- 文字: 新 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
// uchar code xin[32]={0x10,0x00,0x08,0x0E,0x7F,0x70,0x22,0x40,0x14,0x40,0xFF,0x7E,0x08,0x48,0x08,0x48,
// 0xFF,0x48,0x08,0x48,0x2C,0x48,0x2A,0x88,0x4A,0x88,0x89,0x08,0x2A,0x08,0x10,0x08};
/*-- 文字: 科 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
// uchar code ke[32]={0x06,0x08,0x78,0x88,0x08,0x48,0x08,0x48,0xFE,0x08,0x18,0x88,0x1C,0x48,0x2A,0x48,
// 0x28,0x0E,0x48,0x78,0x8B,0x88,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08};
/*-- 文字: 技 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
// uchar code ji[32]={0x10,0x20,0x10,0x20,0x10,0x20,0xFD,0xFE,0x10,0x20,0x14,0x20,0x19,0xFC,0x31,0x08,
// 0xD0,0x88,0x10,0x90,0x10,0x60,0x10,0x60,0x10,0x90,0x11,0x0E,0x56,0x04,0x20,0x00};
/*-- 文字: 检 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
// uchar code jian[32]={0x10,0x40,0x10,0x40,0x10,0xA0,0xFD,0x10,0x12,0x0E,0x38,0x00,0x35,0xF8,0x50,0x00,
// 0x50,0x88,0x92,0x4C,0x11,0x48,0x11,0x50,0x10,0x20,0x17,0xFE,0x10,0x00,0x00,0x00};
/*-- 文字: 测 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
// uchar code ce[32]={0x40,0x02,0x27,0xC2,0x24,0x42,0x84,0x52,0x45,0x52,0x55,0x52,0x15,0x52,0x25,0x52,
// 0x25,0x52,0x25,0x52,0xC5,0x52,0x41,0x02,0x42,0x82,0x42,0x42,0x44,0x4A,0x48,0x04};
/*-- 文字: 仪 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
// uchar code yi[32]={0x08,0x80,0x08,0x40,0x10,0x68,0x12,0x48,0x22,0x08,0x62,0x10,0xA1,0x10,0x21,0x10,
// 0x20,0xA0,0x20,0xA0,0x20,0x40,0x20,0xA0,0x21,0x10,0x22,0x0E,0x2C,0x04,0x20,0x00};
/*-- 文字: 器 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
// uchar code qi[32]={0x3E,0x7C,0x22,0x44,0x22,0x44,0x3E,0x7C,0x01,0x10,0x01,0x08,0xFF,0xFC,0x06,0xC0,
// 0x18,0x30,0xE0,0x0E,0x3E,0xFC,0x22,0x88,0x22,0x88,0x22,0x88,0x3E,0xF8,0x00,0x00};
/*-- 文字: 有 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
// uchar code you[32]={0x01,0x00,0x01,0x00,0x7F,0xFE,0x02,0x00,0x04,0x00,0x0F,0xF0,0x18,0x10,0x28,0x10,
// 0x4F,0xF0,0x88,0x10,0x08,0x10,0x0F,0xF0,0x08,0x10,0x08,0x90,0x08,0x70,0x08,0x20};
/*-- 文字: 限 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
// uchar code xian[32]={0x00,0x00,0xFB,0xF8,0x92,0x08,0x93,0xF8,0xA2,0x08,0xA2,0x08,0x93,0xF8,0x8A,0x80,
// 0x8A,0x48,0xAA,0x50,0x92,0x20,0x82,0x20,0x82,0x10,0x82,0x8E,0x83,0x04,0x82,0x00};
/*-- 文字: 公 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
// uchar code gong[32]={0x00,0x00,0x04,0x40,0x06,0x40,0x04,0x40,0x08,0x20,0x08,0x10,0x10,0x18,0x22,0x0E,
// 0x43,0x04,0x02,0x00,0x04,0x20,0x08,0x10,0x11,0xF8,0x3F,0x18,0x10,0x10,0x00,0x00};
/*-- 文字: 司 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
// uchar code si[32]={0x00,0x00,0x3F,0xFC,0x00,0x04,0x00,0x04,0x7F,0xE4,0x00,0x04,0x00,0x04,0x3F,0xC4,
// 0x20,0x44,0x20,0x44,0x3F,0xC4,0x20,0x44,0x20,0x04,0x00,0x14,0x00,0x08,0x00,0x00};
//数组数据大 放ROM里 用code定义 否则要超出idata范围
/*
uchar code *pkun,code *pshan,code *pshi;
uchar code *pchuang,code *pxin,code *pke,code *pji; //数组指针可以不用存放在 code里
uchar code *pjian,code *pce,code *pyi,code *pqi;
uchar code *pyou,code *pxian,code *pgong,code *psi;
/*一维数组显示法,程序过长不方便修改*/
/*
pkun=kun;
pshan=shan;
pshi=shi;
pchuang=chuang;
pxin=xin;
pke=ke;
pji=ji;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -