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

📄 main.c

📁 实现了液晶基本驱动程序和功能程序
💻 C
📖 第 1 页 / 共 2 页
字号:

/************************************************
*文件名称:本程序为LM2068R 模块的基本驱动程序
*所属公司: 国扬通信有限公司 
*作    者: 
*版    本:
*说    明:
*日    期:
************************************************/
#include "config.h"
 uint8  data2[]=
			{
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,
			0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00
			}; 
    
/***********************************************
*函数名称:延时子程序
*函数功能:
*入口参数:
*出口参数:
*备    注:
***********************************************/
void Delay(uint32 m)     
{
   uint32 i;
   uint32 j;
   for(i=0;i<m;i++)
   for(j=0;j<109;j++);
}
/***********************************************
*函数名称:检查LCD忙碌子程序
*函数功能:
*入口参数:
*出口参数:
*备    注:
***********************************************/
void checkbusy(void)
{
   while(FIO0PIN2&0x20==0x20);
}
/**********************************************
*函数名称:指令代码写入子程序
*函数功能:写入寄存器地址和参数
*入口参数:
*出口参数:
*备    注:
**********************************************/
void SdCmd(uint32 command,uint32 cdate )
 {     
  
     FIO0PIN1=command;                    //写入缓存器的地址
     
     FIO0CLR2=0x04;                       //  _CS = 0
     FIO0SET2=0x02;                       //  RD=1
     FIO0CLR2=0x08;                       //  RS = 0
     FIO0CLR2=0x01; 
     Delay(12);                            // _WR = 0                          
                                          //致能读写动作
	 FIO0SET2=0x01;		                  // _WR = 1
	 FIO0SET2=0x08;	                      //  RS = 1
     FIO0SET2=0x04;		                  //  _CS = 1
     
    /***写入缓存器的数据 ***/
    
	 FIO0PIN1=cdate;                    
	 
     FIO0CLR2=0x04;                       //  _CS = 0
     FIO0SET2=0x02;                       //  RD=1
     FIO0CLR2=0x08;                       //  RS = 0
     FIO0CLR2=0x01;                       // _WR = 0 
	 Delay(12);				  
  
     FIO0SET2=0x01;		                  // _WR = 1
	 FIO0SET2=0x08;	                      //  RS = 1
     FIO0SET2=0x04;		                  //  _CS = 1    	 
 }
/*********************************************
*函数名称:显示数据传送子程序
*函数功能:写入数据
*入口参数:
*出口参数:
*备    注:
*********************************************/
void SdData(uint8 ddata)
{

	 FIO0PIN1 = ddata;                    //写入的数据
	 
	 FIO0CLR2=0x04;                       //  _CS = 0
     FIO0SET2=0x02;                       //  RD=1
     FIO0SET2=0x08;                       //  RS = 1
     FIO0CLR2=0x01;                       // _WR = 0					
	 Delay(12);                           //延时2毫秒
	 FIO0SET2=0x01;		                  // _WR = 1 
	 FIO0CLR2=0x08;	                      //  RS = 0
     FIO0SET2=0x04;		                  // _CS = 1   
   
 } 
 
/***********************************************
*函数名称:显示数据读取子程序
*函数功能:
*入口参数:
*出口参数:
*备    注:
***********************************************/
int Rddate(void)
{
  int date;
  FIO0CLR2=0x04;                       //  _CS = 0
  Delay(24000);
  FIO0PIN1 = 0xff;
  FIO0SET2=0x08;                       //  RS = 1 
  FIO0CLR2=0x02;                       //  RD=0 读有效
  date= FIO0PIN1; 
  //Delay(24000);                       //读取数据
  Delay(12); 
  FIO0SET2=0x02;                       //  RD=1 读无效
  FIO0SET2=0x04;                       //  _CS = 1
  return date;                         //返回读取数据
}
/***********************************************
*函数名称:复位ReSet子程序
*函数功能:
*入口参数:
*出口参数:
*备    注:
***********************************************/ 
void reset(void) 
{
    FIO0SET1=0xff;
    FIO0CLR2=0x04;                        //_CS=0; 
    Delay(12);
    FIO0CLR2=0x10;                       //_RST = 0;
	Delay(48000);                        //延时大于250ms(实际800ms)
	FIO0SET2=0x10;                      //_RST = 1;  
	Delay(24000);                       //延时大于50ms(实际400ms)
	
}
/***********************************************
*函数名称:初始化子程序
*函数功能:
*入口参数:
*出口参数:
*备    注:
***********************************************/
void Init(void)
{
	
	SdCmd(0x00,0xcd);  //设置电源为正常模式,所有功能都有效,写入字符模式,
	                   //正常显示;DISP_OFF高有效,设置WLCR 寄存器
	//SdCmd(0x01,0xf1);  //设置BUSY信号高有效;时钟速度为4MHz 
	SdCmd(0x01,0xf2);
	SdCmd(0x10,0xef);                   //设置WCCR 寄存器                   
	SdCmd(0x11,0x10);  //光标高度与行距 ,设置DWLR 寄存器
	SdCmd(0x12,0xb1); //设置RAM(显示)工作模式,两个显示区域逻辑或合成显示,光标自动右移动
	                  //双图层显示,page1为操作图层
	SdCmd(0x80,0x33);  //设置光标闪烁时间
	SdCmd(0x81,0x40);                   //设置FRCA 寄存器
	//SdCmd(0x90,0x04);      //设置时钟信号周期,设置SCCR 寄存器
	SdCmd(0x90,0x0c);
	SdCmd(0xF0,0xa0);  //设置字库,选择GB汉字库和ASCII块0字符库 ,设置FNCR 寄存器
	SdCmd(0xf1,0x0f);  //设置字符原大尺寸
	
	SdCmd(0xA0,0x08);    //致能BUSY信号
	
	SdCmd(0x20,0x27);   //设置工作视窗(全屏显示)
	SdCmd(0x30,0xef);                                     
	SdCmd(0x40,0x00);
	SdCmd(0x50,0x00);
	
	SdCmd(0x21,0x27);  //设置显示视窗(全屏显示)
	SdCmd(0x31,0xef);
	SdCmd(0x41,0x00);
	SdCmd(0x51,0x00);
  
    SdCmd(0x60,0x00); //设置光标位置X坐标,使用初始值
    SdCmd(0x70,0x00); //设置光标位置Y坐标,使用初始值

}

/***********************************************
*函数名称:图画写入子程序
*函数功能:
*入口参数:(x,y)为图画显示的起始坐标,x为水平字节位置,y为垂直像素行
           WHIDTH为图画水平宽度(以字节为单位),HIGH为图画的高度(以像素行为单位)
*出口参数:
*备    注:
************************************************/

void ShowBMP(uint32 x,uint32 y,uint32 width,uint32 high,uint8 bmp[])
{
 
 uint32 i, k;
 SdCmd(0x00,0xc5);
 SdCmd(0x40,x);         //设置工作窗口左边界位置
 SdCmd(0x20,x+width-1); //设置工作窗口右边界位置
 SdCmd(0x50,y);         //设置工作窗口上边界位置
 SdCmd(0x30,y+high-1);  //设置工作窗口下边界位置
 SdCmd(0x60,x);         //设置光标位置X坐标
 SdCmd(0x70,y);         //设置光标位置Y坐标
 k=width*high;                 //计算数据量
 for(i=0;i<k;i++)
    {
    SdData(bmp[i]);            //写入数据
    }
}
/***********************************************
*函数名称:清屏子程序
*函数功能:
*入口参数:
*出口参数:
*备    注:
***********************************************/
void CleanScreen(void)
{   
    SdCmd(0x12,0xb7);            // 同时写入2个显示RAM区域
	SdCmd(0xE0,0x00);            //设定将显示内存的数据全部写入0
	SdCmd(0xF0,0xa8);            //设置FNCR 寄存器,使其第三位为1,为清屏做准备
	Delay(1000);                  //硬件自动会完成复位,然后硬件把F0的第三位置1
	
}
/**********************************************
*函数名称:设定显示坐标子程序
*函数功能:
*入口参数:x:行坐标 y:列坐标
*出口参数:
*备    注:
**********************************************/
void gotoxy(uint32 x,uint32 y)
 {
     SdCmd(0x60,x);                 //设置显示起始位置X 坐标
     SdCmd(0x70,y);                 //设置显示起始位置Y 坐标
 }
/***********************************************
*函数名称:显示文本子程序
*函数功能:
*入口参数:x为显示横坐标 y为显示纵坐标
*出口参数:
*备    注:
***********************************************/
void ShowText(uint32 x, uint32 y,uint8 *text)
{
  SdCmd(0x00,0xcd); // 设置写入数据模式为字符模式
  //SdCmd(0x12,0xb1); // 打开文本RAM区域(第一显示区域)
  SdCmd(0x60,x);    // 设置光标X坐标地址,水平字符数
  SdCmd(0x70,y);    // 设置光标Y坐标地址,垂直像素行
  while(*text!='\0')
	{
		SdData(*text);
		text++;
	}
}

/**************************************************
*函数名称:应用示例程序
*函数功能:
*入口参数:
*出口参数:
*备    注:
**************************************************/
void LogoScreen(void)
{
    ShowText( 11, 30, (uint8*)"深圳国扬通信技术有限公司");
    SdCmd(0xf1,0x4f);         //字符被水平放大1倍
    ShowText(6,60,(uint8*)"welcome to our company");
    SdCmd(0xf1,0x0f);          //字符原形
    ShowText(6, 90, (uint8*)"Controller  : RA8803         ");
    ShowText(6,106, (uint8*)"Resolution  :320 x 240      ");
    ShowText(6,122, (uint8*)"Screen Size :5.7\"             ");
    ShowText(6,138, (uint8*) "Color Deepth:WHITE/BLACK/4GRAY  ");
    ShowText(6,154, (uint8*) "Outline     :166.0x109.0x11.2mm");
    ShowText(6,220, (uint8*)"http://www.fibertower.com.cn/ ");
} 
/***********************************************
*函数名称:画点子程序
*函数功能:
*入口参数:坐标Y为垂直位置,以像素行为单位,
          坐标X为屏幕上水平位置,以像素点为单位
*出口参数:
*备    注:
/
***********************************************/
void Draw_Dot(uint32 x, uint32 y)
{
    uint8 Data,m;
    SdCmd(0x00,0xc5);  // 设置写入数据模式为图形模式
    SdCmd(0x12,0xb2);  // 打开图形RAM区域(第二显示区域)
    SdCmd(0x60,x/8);   // 设置光标X坐标地址,按照字节(含8点)计算
    SdCmd(0x70,y);     // 设置光标Y坐标地址,垂直像素行
    m=x%8;                    // 计算显示位
    Data=0x80;
    Data=Data>>m;             // 求得显示点数据
   // m=RdData();               // 读该地址的数据
   // Data=Data|m;                // 合成点数据
    SdCmd(0x00,0xc5);
    SdCmd(0x12,0xb2);
    SdCmd(0x60,x/8);
    SdCmd(0x70,y);
    SdData(Data);
}                            // 写入像素数据
/**********************************************************
*函数名称:画水平线子程序
*函数功能:
*入口参数:
*出口参数:
*备    注:
**********************************************************/
void linehv(uint32 x1,uint32 y1, uint32 x2,uint32 y2)
{   
   uint32 temp;
   SdCmd(0x00,0xc5);  // 设置写入数据模式为图形模式
   SdCmd(0x12,0xb2);  // 打开图形RAM区域(第二显示区域)
   if(y1==y2) 
    {
	   if(x1>x2)
	   {
	     temp=x1;
	     x1=x2;
	     x2=temp;
	   }
	   x1=x1/8;
	   x2=x2/8;
	   while(x1<=x2)
	    {
	     gotoxy(x1,y1);
	     SdData(0xff);

⌨️ 快捷键说明

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