完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用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)的全过程。希望第一次学的小伙伴看了能明白 end |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1641 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1562 浏览 1 评论
988 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
691 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1608 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
655浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
525浏览 3评论
541浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
514浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 07:13 , Processed in 0.931073 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号