📄 lcd_driver_user.c
字号:
//========================================================================
// 文件名: 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 + -