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

📄 9632lcd.c

📁 河北冀雅LCD9632的c语言控制程序
💻 C
字号:
/*LCD LM19264KBC显示验证程序,静态显示0x0f,即横条纹,AT89S52、11.0592MHZ晶振 090119v2*/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char//变量类型的宏定义
#define uint unsigned int//变量类型的宏定义
#define LCD_BUS P0 //DB0-DB7(9-16) databus line=P0

sbit _RST=P2^7;
sbit E1=P2^6;
sbit E2=P2^5;
sbit R_W=P2^4;
sbit A0=P2^3;
sbit LED=P1^2;

//num[10][5]="-",num[11][5]=".",num[12][5]="c",num[13][5]="+",
uchar code num[14][5]={{0xff,0x81,0x81,0xff,0x00},{0x81,0x81,0xff,0x01,0x00},{0x9f,0x91,0x91,0xf1,0x00},{0x91,0x91,0x91,0xff,0x00},{0xf8,0x08,0x7f,0x08,0x00},{0xf1,0x91,0x91,0x9f,0x00},{0xff,0x91,0x91,0x9f,0x00},{0x80,0x80,0x80,0xff,0x00},{0xff,0x91,0x91,0xff,0x00},{0xf0,0x90,0x90,0xff,0x00},{0x10,0x10,0x10,0x10,0x00},{0x00,0x06,0x06,0x00,0x00},{0x80,0x3c,0xc3,0x81,0x81},{0x10,0x10,0xff,0x10,0x10}};
uchar code time_1[11][8]={{0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00},{0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00},{0x00,0x0E,0x10,0x10,0x10,0x11,0x0E,0x00},{0x00,0x0C,0x10,0x11,0x11,0x12,0x0C,0x00},{0x00,0x00,0x03,0x04,0x08,0x1F,0x00,0x00},{0x00,0x1F,0x10,0x11,0x11,0x10,0x10,0x00},{0x00,0x07,0x08,0x11,0x11,0x18,0x00,0x00},{0x00,0x1C,0x10,0x10,0x13,0x1C,0x10,0x00},{0x00,0x0E,0x11,0x10,0x10,0x11,0x0E,0x00},{0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00},{0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00}};
uchar code time_2[11][8]={{0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00},{0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00},{0x00,0x0C,0x14,0x24,0x44,0x84,0x0C,0x00},{0x00,0x18,0x04,0x04,0x04,0x88,0x70,0x00},{0x00,0xE0,0x20,0x24,0x24,0xFC,0x24,0x00},{0x00,0x98,0x84,0x04,0x04,0x88,0x70,0x00},{0x00,0xF0,0x88,0x04,0x04,0x88,0x70,0x00},{0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00},{0x00,0x38,0x44,0x84,0x84,0x44,0x38,0x00},{0x00,0x00,0x8C,0x44,0x44,0x88,0xF0,0x00},{0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00}};
uchar time[8]={0,0,0x0a,0,0,0x0a,0,0};
uchar date[10]={2,0,0,9,0x0a,0,1,0x0a,0,1};
uchar temp[7]={0x0d,0,2,5,0x0b,5,0x0c};

//sbit CS1=P3^4;
//sbit CS2=P3^3;
//sbit CS3=P3^1;
//sbit E=P3^7;
//sbit RS=P3^6;

//-------------
//延时子程序
//-------------
void delay(uint t)
{
	uint i;
	uint j;
	for(j=0;j<t;j++);
		for(i=0;i<200;i++);
			_nop_();
}
//-------------
//E1写命令到LCD
//-------------
void CmdWrite_E1(uchar cmdcode)
{
	A0=0;
	R_W=0;
	delay(5);
	E1=1;
	LCD_BUS=cmdcode;
	delay(5);
	E1=0;				 //E从高到低下降沿将命令送入显示器
	E1=1;
}
//-------------
//E1写数据到LCD
//-------------
void DataWrite_E1(uchar dispdata)
{
	A0=1;
	R_W=0;
	delay(5);
	E1=1;
	LCD_BUS=dispdata;
	delay(5);
	E1=0;				//E从高到低下降沿将数据送入显示器
	E1=1;
}

//-------------
//E2写命令到LCD
//-------------
void CmdWrite_E2(uchar cmdcode)
{
	A0=0;
	R_W=0;
	delay(5);
	E2=1;
	LCD_BUS=cmdcode;
	delay(5);
	E2=0;				 //E从高到低下降沿将命令送入显示器
	E2=1;
}
//-------------
//E2写数据到LCD
//-------------
void DataWrite_E2(uchar dispdata)
{
	A0=1;
	R_W=0;
	delay(5);
	E2=1;
	LCD_BUS=dispdata;
	delay(5);
	E2=0;				//E从高到低下降沿将数据送入显示器
	E2=1;
}

//-------------
//初始化
//-------------
void init9632(void)
{
	_RST=0;
	delay(300);
	_RST=1;
	delay(100);

	CmdWrite_E1(0xa4);
	CmdWrite_E2(0xa4);//正常显示

	CmdWrite_E1(0xa9);
	CmdWrite_E2(0xa9);//选择占空比1/32

	CmdWrite_E1(0xa1);
	CmdWrite_E2(0xa1);//选择ADC counterclockwise output

	CmdWrite_E1(0xc0);
	CmdWrite_E2(0xc0);//选择起始行

	CmdWrite_E1(0xaf);
	CmdWrite_E2(0xaf);//显示开
}

//-------------
//清屏,参数可选
//-------------
void Clearscr(uchar w)
{
	uchar i,j;
	for(i=0;i<4;i++)	   //显示器存储空间(页/行)选择设置.i<4
	{
		CmdWrite_E1(0xb8+i);  //E1页地址设置
		CmdWrite_E2(0xb8+i);  //E2页地址设置
		CmdWrite_E1(0x20);   //E1列地址设置  列地址从32开始(0x20),到4F,共48列
		CmdWrite_E2(0x20);   //E2列地址设置  列地址从32开始(0x20),到4F,共48列
		for(j=0;j<48;j++)  
		{
			DataWrite_E1(w);
			DataWrite_E2(w);
		}
	}
}

//-------------
//写E1屏幕
//-------------

//定位数据需要写到哪一位置,后续数据若接着往下写则直接调用WriteScreen_E1()
void WriteScreen_E1_position(uchar i,uchar j) //i:页地址(行),i<4;j列地址.
{
	CmdWrite_E1(0xb8+i);  //E1页地址设置
	CmdWrite_E1(0x20+j);   //E1列地址设置  
}

//写数据
void WriteScreen_E1(uchar **w,uchar x,uchar y) //**w数据指针数组, x:数组一维第x个数,指代数字1-9;y:数组二维个数
{
	uchar h;  
	for(h=0;h<y;h++)
	{
		DataWrite_E1(*((uchar *)w + x*y + h));  //写数据
	}
}

//-------------
//写E2屏幕
//-------------

//定位数据需要写到哪一位置,后续数据若接着往下写则直接调用WriteScreen_E1()
void WriteScreen_E2_position(uchar i,uchar j) //i:页地址(行),i<4;j列地址.
{
	CmdWrite_E2(0xb8+i);  //E1页地址设置
	CmdWrite_E2(0x20+j);   //E1列地址设置  
}

//写数据
void WriteScreen_E2(uchar **w,uchar x,uchar y) //**w数据指针数组, x:数组一维第x个数,指代数字1-9;y:数组二维个数
{
	uchar h;  
	for(h=0;h<y;h++)
	{
		DataWrite_E2(*((uchar *)w + x*y + h));  //写数据
	}
}

/*
//---------------------------------
//显示第二行信息:时:分:秒
//---------------------------------
void display(void)
{
	
}
*/

//-------------
//主程序
//-------------
void main()
{
	uchar i;
	E1=0;
	E2=0;
	for(i=0;i<=20;i++)
	{
		LED=0;
		delay(3000);
		LED=1;
		delay(3000);	
	}
	init9632();
//	while(1)
//	{
		Clearscr(0xff);
		LED=1;
		delay(9000);
		Clearscr(0xf0);
		LED=0;
		delay(9000);
		LED=1;
		Clearscr(0x0f);
		delay(9000);
		LED=0;
		Clearscr(0x55);
		LED=1;
		delay(9000);
		LED=0;
		Clearscr(0x00);
		delay(9000);
		LED=1;
	while(1)
	{
		WriteScreen_E1_position(0,0);
		WriteScreen_E1((uchar **)num,0x09,0x05); //
		LED=0;
		delay(9000);
		WriteScreen_E2_position(0,0);
		WriteScreen_E2((uchar **)num,0x09,0x05); //
		LED=1;
		delay(9000);
		WriteScreen_E2_position(3,3);//显示第一行日期、温度信息
		for(i=0;i<9;i++)
		{
			WriteScreen_E2((uchar **)num,date[i],0x05);
		}
		WriteScreen_E1_position(3,0);
		WriteScreen_E1((uchar **)num,date[9],0x05);

		WriteScreen_E1_position(3,12);
		for(i=0;i<7;i++)
		{
			WriteScreen_E1((uchar **)num,temp[i],0x05);
		}

		WriteScreen_E2_position(2,16);//显示第二行信息:时:分:秒
		for(i=0;i<4;i++)
		{
			WriteScreen_E2((uchar **)time_1,time[i],0x08);
		}
		WriteScreen_E2_position(1,16);
		for(i=0;i<4;i++)
		{
			WriteScreen_E2((uchar **)time_2,time[i],0x08);
		}
		WriteScreen_E1_position(2,0);//显示第二行信息:时:分:秒
		for(i=4;i<8;i++)
		{
			WriteScreen_E1((uchar **)time_1,time[i],0x08);
		}
		WriteScreen_E1_position(1,0);
		for(i=4;i<8;i++)
		{
			WriteScreen_E1((uchar **)time_2,time[i],0x08);
		}
	}
}



/*
//-------------
//写E1屏幕
//-------------
void WriteScreen_E1(uchar i,uchar j,uchar **w,uchar x,uchar y) //i:页地址(行),i<4;j列地址;w:数据 ,uchar w x:数组一维个数;y:数组二维个数
{
	uchar n,h;
	CmdWrite_E1(0xb8+i);  //E1页地址设置
	CmdWrite_E1(0x20+j);   //E1列地址设置  
for(n=0;n<x;n++)
{
	for(h=0;h<y;h++)
	{
		DataWrite_E1(*((uchar *)w + n*y + h));  //写数据
	}
}
}
*/

/*
//-------------
//写E1屏幕
//-------------
void WriteScreen_E1(uchar i,uchar j,uchar w[][5],uchar x,uchar y) //i:页地址(行),i<4;j列地址;w:数据 ,uchar w x:数组一维个数;y:数组二维个数
{
	uchar n,h;
	CmdWrite_E1(0xb8+i);  //E1页地址设置
	CmdWrite_E1(0x20+j);   //E1列地址设置  
	for(h=0;h<5;h++)
	{
		DataWrite_E1(w[n][h]);  //写数据
	}
}
*/

/*
//-------------
//写E1屏幕
//-------------
void WriteScreen_E1(uchar i,uchar j,uchar w[][5],uchar x,uchar y) //i:页地址(行),i<4;j列地址;w:数据 ,uchar w x:数组一维个数;y:数组二维个数
{
	uchar n,h;
	CmdWrite_E1(0xb8+i);  //E1页地址设置
	CmdWrite_E1(0x20+j);   //E1列地址设置  
for(n=0;n<x;n++)
{
	for(h=0;h<y;h++)
	{
		DataWrite_E1(w[n][h]);  //写数据
	}
}
}
*/

/*
//-------------
//写E1屏幕
//-------------
void WriteScreen_E1(uchar i,uchar j,uchar (*w)[5],uchar x,uchar y) //i:页地址(行),i<4;j列地址;w:数据 ,uchar w x:第x个数字;y:数组二维个数
{
	uchar h;
	CmdWrite_E1(0xb8+i);  //E1页地址设置
	CmdWrite_E1(0x20+j);   //E1列地址设置  
	for(h=0;h<y;h++)
	{
		DataWrite_E1(*(*(w+n)+h));  //写数据
	}
}
*/
/*
//-------------
//写E2屏幕
//-------------
void WriteScreen_E2(uchar k,uchar m,uchar v) //k:页地址(行),k<4;m列地址;v:数据
{
	uchar p;
	CmdWrite_E2(0xb8+k);  //E2页地址设置
	CmdWrite_E2(0x20+m);   //E2列地址设置  
	for(p=0;p<8;p++)
	{
		DataWrite_E2(v);  //写数据
	}
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -