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

📄 lcd_driver_user.c

📁 mega32的1602显示程序
💻 C
字号:

#include "LCD_PortConfig.h"

//******************************************
//函数:void LCD_ReadStatue(void)
//描述:LCD控制寄存器状态字读操作
//参数:无
//返回:
//版本:V 1.0.0
//日期:2007-12-4
//******************************************
void LCD_ReadStatue(void)
{
	unsigned char ucTemp;
	DDRA = 0x00;	//PROTA为输入
	CLR_LCD_EN;	//EN为0,
	SET_LCD_RW;	//RW为高,选择读
	CLR_LCD_RS;	//RS为低,表示选择状态字 

	
	SET_LCD_EN;
	SET_LCD_EN;
	SET_LCD_EN;
	SET_LCD_EN;	
	ucTemp = LCD_Data_In&0x80;
	CLR_LCD_EN;	
	CLR_LCD_EN;	
	CLR_LCD_EN;	
	while(ucTemp)
	{
		SET_LCD_EN;
		SET_LCD_EN;
		SET_LCD_EN;
		SET_LCD_EN;
		ucTemp = LCD_Data_In&0x80;
		CLR_LCD_EN;	
		CLR_LCD_EN;	
		CLR_LCD_EN;	
		CLR_LCD_EN;	
	}	
	CLR_LCD_EN;	
	DDRA = 0xff;
}


//******************************************
//函数:unsigned char LCD_ReadData(void)
//描述:LCD数据读操作,从LCD的显示缓存RAM中读一个字节的显示数据
//参数:无
//返回:读出数据存入Read_Data,低八位有效
//版本:V 1.0.0
//日期:2007-12-4
//******************************************
unsigned char LCD_ReadData(void)
{
	LCD_ReadStatue();
	CLR_LCD_EN;
	SET_LCD_RS;	//RS为高,表示选择数据
	SET_LCD_RW;
	
	SET_LCD_EN;	
	CLR_LCD_EN;
	CLR_LCD_EN;
	
	return (LCD_Data_Out);		
}

//******************************************
//函数:void LCD_WriteCommand(unsigned char Command,unsigned char BusyC)
//描述:将一个字节数据写入LCD控制寄存器中
//参数:Command,数据(byte);
//返回:
//版本:V 1.0.0
//日期:2007-12-4
//******************************************
void LCD_WriteCommand(unsigned char Command,unsigned char BusyC)
{
	if(BusyC)
		LCD_ReadStatue();	
	CLR_LCD_EN;
	CLR_LCD_RS;	
	CLR_LCD_RW;	//Rw为低,表示选择写操作
		
	LCD_Data_Out = Command;	//装载数据到总线
	SET_LCD_EN;	//产生上升沿
	SET_LCD_EN;	//产生上升沿
	SET_LCD_EN;	//产生上升沿
	SET_LCD_EN;	//产生上升沿
	CLR_LCD_EN;
	CLR_LCD_EN;
	CLR_LCD_EN;
	CLR_LCD_EN;	
}

//******************************************
//函数:void LCD_Write(Dataunsigned char Data)
//描述:LCD将一个字节数据写入显示缓存RAM中
//参数:Data,数据(byte)
//返回:
//版本:V 1.0.0
//日期:2007-12-4
//******************************************
void LCD_WriteData(unsigned char Data)
{
	LCD_ReadStatue();	
	CLR_LCD_EN;
	CLR_LCD_RW;	//Rw为低,表示选择写操作
	SET_LCD_RS;	//RW为高,表示选择写数据
	
	LCD_Data_Out = Data;
	SET_LCD_EN;	//产生上升沿
	SET_LCD_EN;	//产生上升沿
	SET_LCD_EN;	//产生上升沿
	CLR_LCD_EN;
	CLR_LCD_EN;
	CLR_LCD_EN;
}


//******************************************
//函数:void LCD_Init(void)
//描述:LCD初始化程序
//参数:
//返回:
//版本:V 1.0.0
//日期:2007-12-4
//******************************************
//延时程序
void Delay_ms(unsigned int uTime)
{
	unsigned int i;
	while(uTime > 0)
	{
		for(i=0;i<800;i++)
		{
			;
		}
		uTime --;
	}
}


void LCD_Init(void)
{
	LCD_Data_Out = 0x00;				//初始化数据端口
	PORTB = 0x00;
	PORTD = 0x00;
	
	LCD_WriteCommand(0x30,0);	//写指令0x30,不检测BF
	Delay_ms(10);
	LCD_WriteCommand(0x30,0);	//写指令0x30,不检测BF
	Delay_ms(10);
	LCD_WriteCommand(0x30,0);	//写指令0x30,不检测BF
	Delay_ms(10);

	LCD_WriteCommand(0x38,1);	//写指令0x38设置显示模式,检测BF
	LCD_WriteCommand(0x08,1);	//写指令0x08关闭显示,检测BF
	LCD_WriteCommand(0x01,1);	//写指令0x01清屏,检测BF
	LCD_WriteCommand(0x06,1);	//写指令0x38设置显示光标移动,检测BF
	LCD_WriteCommand(0x0c,1);	//写指令0x38显示开启光标移动,检测BF
			
}


⌨️ 快捷键说明

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