⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd24064-c.c

📁 液晶显示器LM24064的驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -