📄 main.c
字号:
/************************************************
*文件名称:本程序为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 + -