📄 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
// 注 意:
//========================================================================
#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 + -