新闻中心

EEPW首页>嵌入式系统>设计应用> 单片机GUI编程显示汉字

单片机GUI编程显示汉字

作者: 时间:2016-11-26 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/201611/322062.htm

uint8 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如何根据需求编写应用软件。


上一页 1 2 下一页

评论


技术专区

关闭