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

📄 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
//		2007/08/27		V1.21			For LPC2148
// 注  意: 
//========================================================================
#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
{
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	LCD_Ctrl_Clr = (LCD_CS+LCD_RS); 		//CS RS to low
	//先将操作寄存器指向数据写入的寄存器R22h当中
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
	LCD_WR_CLR();
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
	LCD_WR_SET();
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
	LCD_Data_BUS_Clr();
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
#if	LCD_Data_BUS_Byte==0				  ///
	LCD_Data_BUS_Set = 0x22;
#endif
#if LCD_Data_BUS_Byte==1
	LCD_Data_BUS_Set = (0x00000022<<8); 
#endif
#if LCD_Data_BUS_Byte==2
	LCD_Data_BUS_Set = (0x00000022<<16); 
#endif
#if LCD_Data_BUS_Byte==3
	LCD_Data_BUS_Set = (0x00000022<<24); 
#endif
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
	LCD_WR_CLR();
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
	LCD_WR_SET();
//	__asm("nop");__asm("nop"); __asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
	LCD_RS_SET();
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
	LCD_Data_BUS_Clr();
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
#if	LCD_Data_BUS_Byte==0
	LCD_Data_BUS_Set = ((Dat>>8)&0x000000ff);
#endif
#if LCD_Data_BUS_Byte==1
	LCD_Data_BUS_Set = (Dat&0x0000ff00);
#endif	
#if LCD_Data_BUS_Byte==2
	LCD_Data_BUS_Set = ((Dat<<8)&0x00ff0000);
#endif
#if LCD_Data_BUS_Byte==3
	LCD_Data_BUS_Set = ((Dat<<16)&0xff000000);
#endif	
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
	LCD_WR_CLR();
//	__asm("nop");__asm("nop"); __asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
	LCD_WR_SET();			 // __asm("nop");__asm("nop");__asm("nop");__asm("nop");
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
	LCD_Data_BUS_Clr();
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
#if	LCD_Data_BUS_Byte==0
	LCD_Data_BUS_Set = (Dat&0x000000ff);
#endif
#if LCD_Data_BUS_Byte==1
	LCD_Data_BUS_Set = ((Dat<<8)&0x0000ff00); 
#endif
#if LCD_Data_BUS_Byte==2
	LCD_Data_BUS_Set = ((Dat<<16)&0x00ff0000); 
#endif
#if LCD_Data_BUS_Byte==3
	LCD_Data_BUS_Set = ((Dat<<24)&0xff000000); 
#endif
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
	LCD_WR_CLR();
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
	LCD_WR_SET();
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
	LCD_CS_SET();
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");	
}
//========================================================================
// 函数: 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)
{
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	LCD_Ctrl_Clr = (LCD_CS+LCD_RS); 		//CS RS to low
	//先将操作寄存器指向数据写入的寄存器地址
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	LCD_WR_CLR();
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	LCD_WR_SET();
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	LCD_Data_BUS_Clr();
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
#if	LCD_Data_BUS_Byte==0
	LCD_Data_BUS_Set = Addr;
#endif
#if LCD_Data_BUS_Byte==1
	LCD_Data_BUS_Set = (Addr<<8);
#endif
#if LCD_Data_BUS_Byte==2
	LCD_Data_BUS_Set = (Addr<<16);
#endif
#if LCD_Data_BUS_Byte==3
	LCD_Data_BUS_Set = (Addr<<24);
#endif
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	LCD_WR_CLR();__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	LCD_WR_SET();__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	LCD_RS_SET();__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	LCD_Data_BUS_Clr();
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
#if	LCD_Data_BUS_Byte==0
	LCD_Data_BUS_Set = ((Command>>8)&0x00ff);
#endif
#if LCD_Data_BUS_Byte==1
	LCD_Data_BUS_Set = (Command&0xff00);
#endif
#if LCD_Data_BUS_Byte==2
	LCD_Data_BUS_Set = ((Command<<8)&0xff0000);
#endif
#if LCD_Data_BUS_Byte==3
	LCD_Data_BUS_Set = ((Command<<16)&0xff000000);
#endif	
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	LCD_WR_CLR();
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	LCD_WR_SET();
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	LCD_Data_BUS_Clr();
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
#if	LCD_Data_BUS_Byte==0
	LCD_Data_BUS_Set = (Command&0x00ff);
#endif
#if LCD_Data_BUS_Byte==1
	LCD_Data_BUS_Set = ((Command<<8)&0xff00);
#endif
#if LCD_Data_BUS_Byte==2
	LCD_Data_BUS_Set = ((Command<<16)&0xff0000);
#endif
#if LCD_Data_BUS_Byte==3
	LCD_Data_BUS_Set = ((Command<<24)&0xff000000);
#endif
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	LCD_WR_CLR();
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	LCD_WR_SET();
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	
	LCD_CS_SET();
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
}

//========================================================================
// 函数: unsigned char LCD_DataRead(void)
// 描述: 从LCD中的显示缓冲RAM当中读一个字节的显示数据
// 参数: 无  
// 返回: 读出的数据,低八位有效(byte)
// 备注: 
// 版本:
//      2007/03/15      First version
// 注意: 
//========================================================================
unsigned short LCD_DataRead(void)
{
	unsigned int Read_Data = 0;
//	unsigned char Hight_b=0,Low_b=0;
	LCD_Ctrl_Clr = (LCD_CS+LCD_RS); 		//CS RS to low
	LCD_WR_CLR();
	LCD_WR_SET();
	LCD_Data_BUS_Clr();
#if	LCD_Data_BUS_Byte==0
	LCD_Data_BUS_Set = 0x22;
#endif
#if LCD_Data_BUS_Byte==1
	LCD_Data_BUS_Set = (0x00000022<<8); 
#endif
#if LCD_Data_BUS_Byte==2
	LCD_Data_BUS_Set = (0x00000022<<16); 
#endif
#if LCD_Data_BUS_Byte==3
	LCD_Data_BUS_Set = (0x00000022<<24); 
#endif
	LCD_WR_CLR();
	LCD_WR_SET();
	LCD_RS_SET();
	LCD_Data_BUS_Clr();

	LCD_Data_In();
	LCD_RD_CLR();
	LCD_RD_SET();
	LCD_RD_CLR();
	LCD_RD_SET();
	LCD_RD_CLR();
//	LCD_RD_SET();
	
#if	LCD_Data_BUS_Byte==0
	Read_Data = (LCD_Data_Read())<<8;
#endif
#if LCD_Data_BUS_Byte==1
	Read_Data = LCD_Data_Read(); 
#endif
#if LCD_Data_BUS_Byte==2
	Read_Data = (LCD_Data_Read())>>8; 
#endif
#if LCD_Data_BUS_Byte==3
	Read_Data = (LCD_Data_Read())>>16; 
#endif
	LCD_RD_SET();
	__asm("nop");
	LCD_RD_CLR();
#if	LCD_Data_BUS_Byte==0
	Read_Data += LCD_Data_Read();
#endif
#if LCD_Data_BUS_Byte==1
	Read_Data += ((LCD_Data_Read())>>8); 
#endif
#if LCD_Data_BUS_Byte==2
	Read_Data += ((LCD_Data_Read())>>16); 
#endif
#if LCD_Data_BUS_Byte==3
	Read_Data += ((LCD_Data_Read())>>24); 
#endif

	LCD_CS_SET();
	__asm("nop");
	LCD_RD_SET();
	__asm("nop");
	LCD_Data_Out();
	__asm("nop");
	return Read_Data;
}
//========================================================================
// 函数: void LCD_Reg22(void)
// 描述: MzT24-1 LCD模块当中,依据控制器SPFD5408的特性,将操作寄存器指向数
//		据寄存器R22h当中,以便于后面的数据连续写操作
// 参数:
// 返回: 无
// 备注: 
// 版本:
//      2007/03/15      First version
//========================================================================
void LCD_Reg22(void)
{
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	LCD_Ctrl_Clr = (LCD_CS+LCD_RS); 		//CS RS to low
//	*LCD_CMD_Buffer = *LCD_CMD_Buffer&(~(LCD_CS+LCD_RS));
	//先将操作寄存器指向数据写入的寄存器R22h当中
//	__asm("nop");__asm("nop"); __asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
	LCD_WR_CLR();
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
	LCD_WR_SET();
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
	LCD_Data_BUS_Clr();
//	__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
	__asm("nop");__asm("nop");//__asm("nop");//__asm("nop");__asm("nop");__asm("nop");
#if	LCD_Data_BUS_Byte==0
	LCD_Data_BUS_Set = 0x22;
#endif
#if LCD_Data_BUS_Byte==1
	LCD_Data_BUS_Set = (0x00000022<<8); 
#endif
#if LCD_Data_BUS_Byte==2
	LCD_Data_BUS_Set = (0x00000022<<16); 
#endif
#if LCD_Data_BUS_Byte==3
	LCD_Data_BUS_Set = (0x00000022<<24); 
#endif

⌨️ 快捷键说明

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