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

📄 lcd.c

📁 该程序为图形点阵液晶显示器12232A的驱动程序
💻 C
字号:
//文件名:LCD_TEST
//说明:本文件实现了对液晶12232A的功能的测试

/************************************包含的头文件***********************************/
#include <AT898252.h>
#include <intrins.h>

/***************************************定义宏**************************************/
#define	uchar	unsigned char
#define uint	unsigned int

/*************************************端口声明**************************************/
#define DI	P2_0			//12232A的指令数据选择端,H;数据,L:指令
#define RW	P2_1			//12232A的读写选择信号端,H:读,L:写
#define E2	P2_2			//12232A的读写使能信号端(从机),H:读使能,L:写使能
#define E1	P2_3			//12232A的读写使能信号端(主机),H:读使能,L:写使能
#define DB      P0			//12232A的数据线

/***********************************全局变量的定义***********************************/
//uchar data lcd_com;			//12232A的指令缓冲器
//uchar data lcd_data;			//12232A的数据缓冲器
uchar bdata lcd_status;			//12232A的状态存贮缓冲器
sbit busy=lcd_status^7;			//12232A的忙标志

/*************************************函数声明***************************************/
void delay_s(uint x);			//延时子函数
void master_write_com(uchar lcd_com);	//主机写指令函数
void slave_write_com(uchar lcd_com);	//从机写指令函数
void master_write_data(uchar lcd_data);	//主机写显示数据子函数
void slave_write_data(uchar lcd_data);	//从机写显示数据子函数
void lcd_status_read(void);		//读液晶状态子函数
void lcd_init(void);			//液晶显示初始化子函数
void clear_display(void);		//清显示子函数
void main(void);			//显示主函数

/*********************************延时X毫秒函数**************************************/
//说明:实现功能:软件延时X毫秒
//输入:软件延时的时间:xms
//输出:无
void delay_s(uint x)
{
	uint n;
	while(x!=0)
	{
		for(n=0;n<125;n++)				//一次延时1ms
		{;}
		x--;
	}
}

/*************************************读液晶状态子函数******************************/
//说明:实现的功能:读液晶的状态
//输入:无
//输出:无
void lcd_status_read(void)
{
	DI=0;				//数据线上为指令代码
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	RW=1;				//读使能
	lcd_status=DB;			//读操作
}

/***********************************主机写指令函数**********************************/
//说明:实现功能:向主机写指令
//输入:指令代码
//输出:无
void master_write_com(uchar lcd_com)
{
	E1=1;				//主机读使能
	lcd_status_read();		//读液晶状态
	if(busy)
	{
		delay_s(5);
	}
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	E1=0;				//主机写使能
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	RW=0;				//写使能
	DB=lcd_com;			//写指令
	delay_s(5);
	E1=1;
	delay_s(5);
	E1=0;
}

/***********************************从机写指令函数**********************************/
//说明:实现功能:向从机写指令
//输入:指令代码
//输出:无
void slave_write_com(uchar lcd_com)
{
	E2=1;				//从机读使能
	lcd_status_read();		//读液晶状态
	if(busy)
	{
		delay_s(5);
	}
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	E2=0;				//从机写使能
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	RW=0;				//写使能
	DB=lcd_com;			//写指令
	delay_s(5);
	E2=1;
	delay_s(5);
	E2=0;
}

/***********************************主机写显示数据子函数**********************************/
//说明:实现功能:向主机写数据
//输入:显示数据
//输出:无
void master_write_data(uchar lcd_data)
{
	E1=1;				//主机读使能
	lcd_status_read();		//读液晶状态
	if(busy)
	{
		delay_s(5);
	}
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	DI=1;				//数据线上为数据
	delay_s(5);
	E1=0;				//主机写使能
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	RW=0;				//写使能
	DB=lcd_data;			//写显示数据
	delay_s(5);
	E1=1;
	delay_s(5);
	E1=0;
}

/***********************************从机写显示数据子函数**********************************/
//说明:实现功能:向从机写数据
//输入:显示数据
//输出:无
void slave_write_data(uchar lcd_data)
{
	E2=1;				//从机读使能
	lcd_status_read();		//读液晶状态
	if(busy)
	{
		delay_s(5);
	}
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	DI=1;				//数据线上为数据
	delay_s(5);
	E2=0;				//从机写使能
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	RW=0;				//写使能
	DB=lcd_data;			//写显示数据
	delay_s(5);
	E2=1;
	delay_s(5);
	E2=0;
}

/**************************************液晶初始化子函数************************************/
//说明:函数实现对液晶的初始化:1:复位,2:选择动态驱动,3:选择1/32的占空比,4:选择正向排列顺序
//	5:设置显示起始行为第一行,6:开显示
//输入:无
//输出:无
void lcd_init(void)
{
	master_write_com(0xe2);
	slave_write_com(0xe2);		//复位
	
	master_write_com(0xa4);
	slave_write_com(0xa4);		//选择动态驱动
	
	master_write_com(0xa9);
	slave_write_com(0xa9);		//选择占空比:1/32
	
	master_write_com(0xa0);
	slave_write_com(0xa0);		//选择正向排列顺序
	
	master_write_com(0xc0);
	slave_write_com(0xc0);		//显示起始行为第一行
	
	master_write_com(0xaf);
	slave_write_com(0xaf);		//开显示
}

/***************************************清显示子函数************************************/
//说明:清屏
//输入:无
//输出:无
void clear_display(void)
{
	uchar i;			//页数
	uchar j;			//列数
	for(i=0;i<4;i++)
	{
		master_write_com(i);
		slave_write_com(i);	//选取页地址
		
		for(j=0;j<80;j++)
		{
			master_write_com(j);
			slave_write_com(j);	//选取列地址
			
			master_write_data(0);
			slave_write_data(0);	//清列
		}
	}
}
/***************************************显示主函数***************************************/
//说明:对液晶12232A的性能测试
//输入:无
//输出:无
void main(void)
{
	uchar i;
	uchar j;
	lcd_init();			//显示初始化
	clear_display();		//清屏
	
	for(i=0;i<4;i++)
	{
		master_write_com(i);
		slave_write_com(i);	//选取页地址
		
		for(j=0;j<61;j++)
		{
			master_write_com(j);
			slave_write_com(j);	//选取列地址
			
			master_write_data(0xaa);
			slave_write_data(0xaa);	//送显示数据
		}
	}
}

⌨️ 快捷键说明

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