本文引用地址:https://www.eepw.com.cn/article/201611/322062.htmuint8 ReadSdate(void)
{
uint8checkbusy;
//LCD_BUS = 0xff;
OutData(0xff);
//CD1=1;
SCD1();
//RD1=0;
CRD1();
//checkbusy=((IO0PIN&0x00ff0000)>>16);
checkbusy = (GPIOD->IDR&0x00ff);
//RD1=1;
SRD1();
return ( checkbusy );
}
void RWcheck(void)
{
uint8databusy;
do
{
databusy=ReadSdate();
}while( !(databusy&0x03) );
}
void AutoRcheck(void)
{
uint8databusy;
do
{
databusy=ReadSdate();
}while( !(databusy&0x04) );
}
void AutoWcheck(void)
{
uint8databusy;
do
{
databusy=ReadSdate();
}while( !(databusy&0x08) );
}
//写数据
voidWriteData(uint8 dat)
{
RWcheck();
//CD1=0;
CCD1();
//LCD_BUS=dat;
OutData(dat);
//WR1=0;
CWR1();
//WR1=1;
SWR1();
}
//写指令
voidWriteCmd1(unsigned char cmd)
{
RWcheck();;
//CD1=1;
SCD1();
//LCD_BUS=cmd;
OutData(cmd);
//WR1=0;
CWR1();
//WR1=1;
SWR1();
}
//先写数据再写指令
voidWriteCmd2(uint8 dat,uint8 cmd)
{
WriteData(dat);
WriteCmd1(cmd);
}
//先写2组数据再写1组指令
voidWriteCmd3(uint8 dat1,uint8 dat2,uint8 cmd)
{
WriteData(dat1);
WriteData(dat2);;
WriteCmd1(cmd);
}
//数据自动写
voidAutoWriteData( uint8 dat)
{
AutoWcheck();;
//CD1 = 0;
CCD1();
//LCD_BUS= dat;
OutData(dat);
//WR1=0;
CWR1();
//WR1=1;
SWR1();
}
#defineOutData(dat)GPIOD->BRR = 0xff<BSRR = (dat&0xff)<
#defineLCM_WR112
#defineSWR1()GPIOB->BSRR = 1<#defineCWR1()GPIOB->BRR= 1<
#defineLCM_RD113
#defineSRD1()GPIOB->BSRR = 1<#defineCRD1()GPIOB->BRR= 1<
#defineLCM_CE114
#defineSCE1()GPIOB->BSRR = 1<#defineCCE1()GPIOB->BRR= 1<
#defineLCM_CD115
#defineSCD1()GPIOB->BSRR = 1<#defineCCD1()GPIOB->BRR= 1<
图形显示的操作,最根本是对缓存的操作。
从应用层到底层的整个过程解析如下:
1、调用写字函数在LCD上显示一个汉字。
GUI_PutHZ(x1,y1,(uint8*)gb12Dot[GetGB12_Address(ptr)].Msk,12, 12);
l参数参考上面的函数说明,其中要显示的字需要通过一个数组查找。
l该数组是一个结构体数组,每一个结构体中有两个分量,第一个是要显示的汉字,第二个是该汉字的字库。
l把需要写入的汉字及字库先存放在数组中,根据汉字的内容查找到相应字库。
2、在GUI_PutHZ函数中调用了GUI_LoadLine(x, y, dat, hno);
字库的实质是点矩阵,写字的实质就是把字库里安排的点阵写进缓存里。
这里调用画线函数,对矩阵进行操作。
3、在GUI_LoadLine函数中调用了GUI_Point(x, y, bakc);
l对画线的操作,实质就是对线上的每一点进行操作。
l对于黑白屏来说,点的操作就是点亮与熄灭。
l对于彩色屏就是对像素位的操作来实现颜色的变化。
l所有的图案及字,都是不同颜色组合后给人的一种感官视觉。
lgui_disp_buf[y][x>>3] |=DCB_HEX_TAB[x&0x07];改变显示缓存中的数据。
lLCD_UpdatePoint(x, y);调用更新点函数实现刷屏。
4、LCD_UpdatePoint函数中,调用了WriteCmd3和WriteCmd2函数
WriteCmd3这两个函数是对底层最基本的IO口操作,涉及硬件原理,涉及时序。
GUI的操作原理及程序例子基本完成。操作关键总结归纳如下:
l如何设计外围接口。
l如何编写底层驱动函数。
l如何根据需求编写应用软件。
评论