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

📄 lcd_driver_user.c

📁 彩色LCD资料
💻 C
📖 第 1 页 / 共 2 页
字号:
//========================================================================
// 文件名: LCD_Driver_User.c
// 作  者: Xinqiang Zhang(email: Xinqiang@Mzdesign.com.cn)
//			www.Mzdesign.com.cn
// 日  期: 2007/03/15
// 描  述: 底层接口驱动扩展程序集
//
// 参  考: 请参考具体显示器的硬件描述说明书或者是DataSheet,并以此来编写底
//			层接口驱动程序,以及LCD的初始化代码
// 版  本:
//      2007/03/15      First version    Mz Design
//		2007/04/08		V1.2			For SPFD5408   by Mzdesign
// 注  意: 
//========================================================================
#include "LCD_Config.h"
#include "LCD_PortConfig.h"
//========================================================================
// 函数: void LCD_DataWrite(unsigned int Data)
// 描述: 写一个字(16bit)的显示数据至LCD中的显示缓冲RAM当中
// 参数: Data 写入的数据 
// 返回: 无
// 备注: 无
// 版本:
//      2007/03/15      First version
//========================================================================
void LCD_DataWrite(unsigned int Dat)//,_Fill_Dot_LCD
{
	unsigned int uiTemp;
	unsigned int uiTemp2;
	*LCD_CMD_Buffer = *LCD_CMD_Buffer&(~(LCD_CS+LCD_RS));
	//先将操作寄存器指向数据写入的寄存器R22h当中
	uiTemp = *LCD_CMD_Buffer;
	uiTemp2 = uiTemp&(~LCD_WR);
	*LCD_CMD_Buffer = uiTemp2;						//WD = 0
	*LCD_CMD_Buffer = uiTemp;						//WD = 1
#if	LCD_Data_BUS_Byte==1
	*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0x00ff)|0x2200;
#endif
#if LCD_Data_BUS_Byte==0
	*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0xff00)|0x0022; 
#endif
	uiTemp = *LCD_CMD_Buffer;
	uiTemp2 = uiTemp&(~LCD_WR);
	*LCD_CMD_Buffer = uiTemp2;						//WD = 0
	*LCD_CMD_Buffer = uiTemp;						//WD = 1
	uiTemp |= LCD_RS;								//RS = 1
	*LCD_CMD_Buffer = uiTemp;
#if	LCD_Data_BUS_Byte==1
	*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0x00ff)|(Dat&0xff00);
#endif
#if LCD_Data_BUS_Byte==0
	*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0xff00)|(Dat>>8); 
#endif	
	uiTemp = *LCD_CMD_Buffer;
	uiTemp2 = uiTemp&(~LCD_WR);
	*LCD_CMD_Buffer = uiTemp2;						//WD = 0
	*LCD_CMD_Buffer = uiTemp;						//WD = 1
#if	LCD_Data_BUS_Byte==1
	*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0x00ff)|(Dat<<8);
#endif
#if LCD_Data_BUS_Byte==0
	*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0xff00)|(Dat&0x00ff); 
#endif
	uiTemp = *LCD_CMD_Buffer;
	uiTemp2 = uiTemp&(~LCD_WR);
	*LCD_CMD_Buffer = uiTemp2;						//WD = 0
	*LCD_CMD_Buffer = uiTemp;						//WD = 1
	
	uiTemp = uiTemp|LCD_CS;
	*LCD_CMD_Buffer = uiTemp;
}
//========================================================================
// 函数: void LCD_RegWrite(unsigned char Addr,unsigned int Command)
// 描述: 写一个字节的数据至LCD中的控制寄存器当中
// 参数: Addr			要写入的寄存器的地址,低八位有效(byte)
//		Command			写入的数据 
// 返回: 无
// 备注: 
// 版本:
//      2007/03/15      First version
//========================================================================
void LCD_RegWrite(unsigned char Addr,unsigned int Command)
{
	unsigned int uiTemp;
	unsigned int uiTemp2;
	*LCD_CMD_Buffer = *LCD_CMD_Buffer&(~(LCD_CS+LCD_RS));
	//先将操作寄存器指向数据写入的寄存器地址
	uiTemp = *LCD_CMD_Buffer;
	uiTemp2 = uiTemp&(~LCD_WR);
	*LCD_CMD_Buffer = uiTemp2;						//WD = 0
	*LCD_CMD_Buffer = uiTemp;						//WD = 1
#if	LCD_Data_BUS_Byte==1
	*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0x00ff)|(Addr<<8);
#endif
#if LCD_Data_BUS_Byte==0
	*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0xff00)|(Addr&0x00ff); 
#endif
	uiTemp = *LCD_CMD_Buffer;
	uiTemp2 = uiTemp&(~LCD_WR);
	*LCD_CMD_Buffer = uiTemp2;						//WD = 0
	*LCD_CMD_Buffer = uiTemp;						//WD = 1
	uiTemp |= LCD_RS;								//RS = 1
	*LCD_CMD_Buffer = uiTemp;
	
#if	LCD_Data_BUS_Byte==1
	*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0x00ff)|(Command&0xff00);
#endif
#if LCD_Data_BUS_Byte==0
	*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0xff00)|(Command>>8); 
#endif	
	uiTemp = *LCD_CMD_Buffer;
	uiTemp2 = uiTemp&(~LCD_WR);
	*LCD_CMD_Buffer = uiTemp2;						//WD = 0
	*LCD_CMD_Buffer = uiTemp;						//WD = 1
#if	LCD_Data_BUS_Byte==1
	*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0x00ff)|(Command<<8);
#endif
#if LCD_Data_BUS_Byte==0
	*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0xff00)|(Command&0x00ff); 
#endif
	uiTemp = *LCD_CMD_Buffer;
	uiTemp2 = uiTemp&(~LCD_WR);
	*LCD_CMD_Buffer = uiTemp2;						//WD = 0
	*LCD_CMD_Buffer = uiTemp;						//WD = 1
	
	uiTemp = uiTemp|LCD_CS;
	*LCD_CMD_Buffer = uiTemp;
}
//========================================================================
// 函数: unsigned char LCD_DataRead(void)
// 描述: 从LCD中的显示缓冲RAM当中读一个字节的显示数据
// 参数: 无  
// 返回: 读出的数据,低八位有效(byte)
// 备注: 
// 版本:
//      2007/03/15      First version
// 注意: 
//========================================================================
unsigned char LCD_DataRead(void)
{
	unsigned int uiTemp;
	unsigned char Read_Dat;
	unsigned int uiTemp2;
	*LCD_CMD_Buffer = *LCD_CMD_Buffer&(~(LCD_CS+LCD_RS));
	//先将操作寄存器指向数据写入的寄存器R22h当中
#if	LCD_Data_BUS_Byte==1
	*LCD_Data_BUS_Out = *LCD_Data_BUS_Out&0x00ff;
#endif
#if LCD_Data_BUS_Byte==0
	*LCD_Data_BUS_Out = *LCD_Data_BUS_Out&0xff00; 
#endif
	uiTemp = *LCD_CMD_Buffer;
	uiTemp2 = uiTemp&(~LCD_WR);
	*LCD_CMD_Buffer = uiTemp2;						//WD = 0
	*LCD_CMD_Buffer = uiTemp;						//WD = 1
#if	LCD_Data_BUS_Byte==1
	*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0x00ff)|0x2200;
#endif
#if LCD_Data_BUS_Byte==0
	*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0xff00)|0x0022; 
#endif
	uiTemp = *LCD_CMD_Buffer;
	uiTemp2 = uiTemp&(~LCD_WR);
	*LCD_CMD_Buffer = uiTemp2;						//WD = 0
	*LCD_CMD_Buffer = uiTemp;						//WD = 1
	uiTemp |= LCD_RS;								//RS = 1
	*LCD_CMD_Buffer = uiTemp;
#if	LCD_Data_BUS_Byte==1
	*LCD_Data_BUS_Dir = (*LCD_Data_BUS_Dir&0x00ff);
#endif
#if LCD_Data_BUS_Byte==0
	*LCD_Data_BUS_Dir = (*LCD_Data_BUS_Dir&0xff00); 
#endif	
	uiTemp = *LCD_CMD_Buffer;
	uiTemp2 = uiTemp&(~LCD_RD);
	*LCD_CMD_Buffer = uiTemp2;						//RD = 0
	*LCD_CMD_Buffer = uiTemp;						//RD = 1
	*LCD_CMD_Buffer = uiTemp2;						//RD = 0
	*LCD_CMD_Buffer = uiTemp;						//RD = 1
	*LCD_CMD_Buffer = uiTemp2;						//RD = 0
//	*LCD_CMD_Buffer = uiTemp;						//RD = 1
#if	LCD_Data_BUS_Byte==1
	Read_Dat = *LCD_Data_BUS_In&0xff00;
#endif
#if LCD_Data_BUS_Byte==0
	Read_Dat = *LCD_Data_BUS_In&0x00ff; 
	Read_Dat = Read_Dat<<8;
#endif
	*LCD_CMD_Buffer = uiTemp;						//RD = 1
	*LCD_CMD_Buffer = uiTemp2;						//RD = 0
//	*LCD_CMD_Buffer = uiTemp;						//RD = 1
#if	LCD_Data_BUS_Byte==1
	Read_Dat |= (*LCD_Data_BUS_In&0xff00)>>8;
#endif
#if LCD_Data_BUS_Byte==0
	Read_Dat |= *LCD_Data_BUS_In&0x00ff; 
#endif
	*LCD_CMD_Buffer = uiTemp;						//RD = 1
	uiTemp = uiTemp|LCD_CS;
	*LCD_CMD_Buffer = uiTemp;
#if	LCD_Data_BUS_Byte==1
	*LCD_Data_BUS_Dir = (*LCD_Data_BUS_Dir|0xff00);
#endif
#if LCD_Data_BUS_Byte==0
	*LCD_Data_BUS_Dir = (*LCD_Data_BUS_Dir|0x00ff); 
#endif
	return Read_Dat;
}
//========================================================================
// 函数: void LCD_Reg22(void)
// 描述: MzT24-1 LCD模块当中,依据控制器SPFD5408的特性,将操作寄存器指向数
//		据寄存器R22h当中,以便于后面的数据连续写操作
// 参数:
// 返回: 无
// 备注: 
// 版本:
//      2007/03/15      First version
//========================================================================
void LCD_Reg22(void)
{
	unsigned int uiTemp;
	unsigned int uiTemp2;
	*LCD_CMD_Buffer = *LCD_CMD_Buffer&(~(LCD_CS+LCD_RS));
	//先将操作寄存器指向数据写入的寄存器地址
	uiTemp = *LCD_CMD_Buffer;
	uiTemp2 = uiTemp&(~LCD_WR);
	*LCD_CMD_Buffer = uiTemp2;						//WD = 0
	*LCD_CMD_Buffer = uiTemp;						//WD = 1
#if	LCD_Data_BUS_Byte==1
	*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0x00ff)|0x2200);
#endif
#if LCD_Data_BUS_Byte==0
	*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0xff00)|0x0022; 
#endif
	uiTemp = *LCD_CMD_Buffer;
	uiTemp2 = uiTemp&(~LCD_WR);
	*LCD_CMD_Buffer = uiTemp2;						//WD = 0
	*LCD_CMD_Buffer = uiTemp;						//WD = 1
	uiTemp |= (LCD_RS+LCD_CS);						//RS = 1
//	uiTemp = uiTemp|LCD_CS;
	*LCD_CMD_Buffer = uiTemp;
}
//========================================================================
// 函数: void Fill_Dot_LCD(unsigned int Dat)
// 描述: 填充一个字(16bit)的显示数据至LCD中的显示缓冲RAM当中
// 参数: Data 写入的数据 
// 返回: 无
// 备注: 无
// 版本:
//      2007/03/15      First version
//========================================================================
void Fill_Dot_LCD(unsigned int Dat)
{
	unsigned int uiTemp;
	unsigned int uiTemp2;
	*LCD_CMD_Buffer = *LCD_CMD_Buffer&(~(LCD_CS));
	//先将操作寄存器指向数据写入的寄存器R22h当中
#if	LCD_Data_BUS_Byte==1
	*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0x00ff)|(Dat&0xff00);
#endif
#if LCD_Data_BUS_Byte==0
	*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0xff00)|(Dat>>8); 
#endif	
	uiTemp = *LCD_CMD_Buffer;
	uiTemp2 = uiTemp&(~LCD_WR);

⌨️ 快捷键说明

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