历史上的今天
返回首页

历史上的今天

今天是:2025年03月01日(星期六)

2021年03月01日 | STM32之TFT触摸屏(ILI9320):通过LCD_ShowChar显示

2021-03-01 来源:eefocus

使用TFT触摸屏时,想要对字符串,图形或者数字进行显示时,发现他们的库函数中都有一个最重要的函数LCD_ShowChar,貌似目前很少有人分析这个函数,虽然简单但是还是有点绕的。


先贴一下这个函数的代码,由于函数显示分为叠加显示和非叠加显示,原理类似,所以只分析非叠加方式的部分应该就都懂了。


void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)


{


u8 temp,t1,t;


u16 y0=y;


u16 colortemp=POINT_COLOR;


num=num-' ';//得到偏移后的值


if(!mode) //非叠加方式


{


for(t=0;t


{


if(size==12)temp=asc2_1206[num][t]; //调用1206字体


else temp=asc2_1608[num][t]; //调用1608字体


for(t1=0;t1<8;t1++)


{


if(temp&0x80)POINT_COLOR=colortemp;


else POINT_COLOR=BACK_COLOR;


LCD_DrawPoint(x,y);


temp<<=1;


y++;


if(x>=lcddev.width){POINT_COLOR=colortemp;return;}//超区域了


if((y-y0)==size)


{


y=y0;


x++;


if(x>=lcddev.width){POINT_COLOR=colortemp;return;}//超区域了


break;


}


}


}


}


1206字体和1608字体是两种不同的字号,就是一个横向6点,纵向12点,一个横向8点,纵向16点,从判断语句可以看出,二者对应的码表是不一样的,这个码表在工程里搜索一下,在font.h里,是一个二维数组。我们这里使用1608字体,以字母“M”为例。查一下码表中“M”对应的数组,如下:


{0x10,0x04,0x1F,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x1F,0xFC,0x10,0x04,0x00,0x00},


' '是码表的开始,由字母减去' '得到偏移量,也就是二维数组的第几行。第一个循环开始,就给临时变量temp赋值为数组的第一个值,由于是1608字体,因此也有一个数组中有16个数,第一个循环就是为了让temp遍历这16个数。


之后第二个循环开始,由于数组中的每一个数均是8位,由于每次循环都会对temp左移一位,因此第二个循环的次数是8次。经if(temp&0x80)判断,如果数字的最高位为1,则进行描点的颜色为字体颜色,如果不是1,则描点颜色为底色。(PS:描点函数LCD_DrawPoint还是很简单滴,总的来说就是向写GRAM寄存器R20h,R21h写入我们希望写的点颜色,基本操作O(∩_∩)O)


每次移位,y都会自加,第二个循环是8次,而size为16,也就是说数组中每读过两个数,y自加16次之后都会清零,然后x加1,就像列扫描一样,一列16个点结束后会进行到下一列。


超区域那部分就是说超过size了,描个点就返回啦。下面以“M”为例描述下描点的过程。


码表前8个


0x10 (0,3)


0x04 (0,13)


0x1F (1,3),(1,4),(1,5),(1,6),(1,7)


0xFC (1,8),(1,9),(1,10),(1,11),(1,12),(1,13)


0x1F (2,3),(2,4),(2,5),(2,6),(2,7)


0x00 无


0x00 无


0xFC (3,8),(3,9),(3,10),(3,11),(3,12),(3,13)


码表后8个


0x1F (4,3),(4,4),(4,5),(4,6),(4,7)


0x00 无


0x1F (5,3),(5,4),(5,5),(5,6),(5,7)


0xFC (5,8),(5,9),(5,10),(5,11),(5,12),(5,13)


0x10 (6,3)


0x04 (6,13)


0x00 无


0x00 无


这个不直观啊,用matlab的scatter(x,y)描个点,正好就是TFT屏幕显示的“M”图形


以上就是ILI9320描点函数LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)的全过程。希望第一次学的小伙伴看了能明白

推荐阅读

史海拾趣

上海国芯(Gcore)公司的发展小趣事
结合其他传感器(如红外传感器、雷达传感器等)实现更全面的安全监控。
Abilis Systems公司的发展小趣事
监测生产线上的机械臂、传送带等设备的运行速度,防止超速导致的安全事故。
Circuit Technology Inc公司的发展小趣事

随着国内市场的饱和,CTI开始将目光投向海外市场。公司制定了国际化发展战略,积极开拓国际市场。通过设立海外分支机构、参加国际展会等方式,CTI的产品逐渐打入国际市场,并获得了良好的口碑。同时,公司还与国外企业开展技术合作和产品研发,进一步提升了公司的国际化水平。

Chipcon AS公司的发展小趣事

面对日益激烈的市场竞争,Chipcon AS公司积极寻求与其他企业的技术合作。通过与一家知名的半导体公司建立战略合作关系,双方共同研发了一款具有划时代意义的智能传感器芯片。这款芯片不仅集成了多种传感器功能,还具备高度集成和智能化的特点,为物联网领域的发展提供了有力支持。通过技术合作,Chipcon AS公司不仅提升了自身的技术实力,还拓展了市场份额。

Cree(科瑞)公司的发展小趣事

2015年初,Cree曾计划将其射频产品线独立出来,并以近3.5亿美金卖给英飞凌。然而,由于某些限制原因,收购计划最终终止。面对这一变故,Cree不得不重新建立射频微波器件团队,并创立了新的品牌wolfspeed。这一举措不仅彰显了Cree的应变能力和创新精神,也为其在射频领域的发展注入了新的活力。

Electronic Transistors Corp公司的发展小趣事

在技术创新的基础上,ETC公司开始积极拓展市场。公司通过优化产品线,满足不同客户的需求,逐渐打开了国际市场的大门。同时,ETC还加大了品牌宣传力度,通过参加国际电子展会、发布技术白皮书等方式,提升品牌知名度和影响力。这些举措使ETC在全球范围内的市场份额不断扩大,品牌影响力也日益增强。

问答坊 | AI 解惑

嵌入式Linux的GDB远程调试的实现

远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接。使用GDB标准远程串行 协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。调试stub是嵌入式系统中的 一段代码,作为宿主机GDB和目标机调试程序间的一 ...…

查看全部问答>

电动机选型参考

在购置电动机时怎样选型,如何来选则!下面我就这方面涉及的问题作出以下的介绍,希望对您有所帮助!首先,就是电机结构形式的选择:我们主要是根据使用环境来选择电动机结构形式:1.在正常环境条件下,一般采用防护式电动机;在粉尘较多的工作场所,采 ...…

查看全部问答>

初学嵌入式,有几个小小问题

环境:ARM7(S3C44B0X)+uclinux struct unit{     struct semaphore lock;     u32* PCONB;     u32* PDATB;     u32* PCONF;     u32* PDATF;     u32 b;     u32 f; }; s ...…

查看全部问答>

高科技大型上市公司招聘: 嵌入式系统设计工程师 /通信产品设计工程师 / 系统软件设计工程师 工作地点 深圳

本公司是深圳一家高科技大型上市公司,主要经营电力系统产品生产研发,微电子产品生产研发,光磁设备,公司内有员工高层公寓,食堂,文体活动中心,员工家属楼多处,座落于美丽的深圳市福田区笔架山与莲花山之间,公司目前有员工6000多人,工程师及 ...…

查看全部问答>

选型 qt/e 或者minigui

大家好 ,我想做一个工业控制领域的人机界面 ,我不知道是选用minigui还是QT/E,请帮我参考一下。简单需求如下: 1、界面美观(最好有皮肤控件) 2、有实时曲线 3、有多个窗口(同一时间可以显示多个窗口) 4、移植后不要太大 5、如果需要商业 ...…

查看全部问答>

谁有TMS320F28335的LQFP176的封装啊?

偷懒不想画,谁有这个99SE版本的封装啊?…

查看全部问答>

请问各位,使用74HC165进行开关信号并转串时,只有第5位读不出来是什么情况?

如题,我想要使用74HC165将8个按键信号扫入,但在测试时发现5号按键按键按下时无反应,请问只是什么原因?读数程序如下:CommandCode=0;   //按键信息   PORTB.3=0;            &nbs ...…

查看全部问答>

如何有效解决ESD静电问题

1 产品的结构设计 如果将释放的静电看成是洪水的话,那么主要的解决方法与治水类似,就是“堵”和“疏”。如果我们设计的产品有一个理想的壳体是密不透风的,静电也就无从而入,当然不会有静电问题了。但实际的壳体在合盖处常有缝隙,而且许多还有 ...…

查看全部问答>

ARM9中断程序问题

typedef void __irq (* Isr)(void); extern Isr ISRVector[32];   extern Isr ISRVector[32]这个数组怎么解释啊?…

查看全部问答>