使用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)的全过程。希望第一次学的小伙伴看了能明白
上一篇:stm32之滴答定时器(1):滴答定时器在内核的位置
下一篇:STM32的DMA用串口的接收
推荐阅读
史海拾趣
Alpha & Omega Semiconductor(简称AOS)是一家全球领先的半导体公司,致力于设计、制造和销售高性能、高可靠性的功率半导体产品。以下是Alpha & Omega Semiconductor公司发展的相关故事:
公司成立和早期发展: Alpha & Omega Semiconductor公司于2000年成立于美国加利福尼亚州的Santa Clara市。公司成立之初,专注于研发和生产功率半导体器件,包括功率MOSFET、IGBT、功率IC和电源管理器件等。通过不断创新和技术突破,公司迅速在市场上建立了良好的声誉,并吸引了投资者的关注。
技术创新和产品发展: Alpha & Omega Semiconductor公司在功率半导体领域不断进行技术创新和产品研发。他们不断推出新的产品系列,包括低压、中压和高压功率MOSFET、IGBT和功率集成电路等,以满足不同应用领域的需求。公司还专注于提高产品性能、降低功耗,并不断优化产品结构和工艺流程。
全球化布局和生产基地: 随着业务的不断扩张,Alpha & Omega Semiconductor公司逐步建立了全球化的运营和生产体系。除了总部位于美国的研发中心外,公司还在亚洲地区建立了多个生产基地和销售办事处,包括中国、台湾、韩国和菲律宾等地。这些生产基地不仅提高了产品供应的灵活性和效率,还加强了与当地客户和合作伙伴的合作关系。
持续投入研发和创新: Alpha & Omega Semiconductor公司持续投入大量资源用于研发和创新,致力于提供行业领先的功率半导体解决方案。公司与全球顶尖的研究机构和合作伙伴合作,共同探索新的材料、工艺和器件结构,以应对不断变化的市场需求和技术挑战。通过持续的技术创新,公司不断拓展产品线,拓展业务领域,并保持了在市场上的竞争优势。
持续发展和业务拓展: Alpha & Omega Semiconductor公司持续保持业务的稳健增长和发展态势,不断拓展业务范围和市场份额。公司在汽车电子、工业控制、通信设备、消费电子和电源供应等领域取得了广泛的应用,成为了全球领先的功率半导体供应商之一。同时,公司还通过并购和合资等方式,加速业务拓展,拓展了在新兴领域的市场地位。
以上是Alpha & Omega Semiconductor公司发展的相关故事,展示了他们在功率半导体领域的持续创新和不断发展的势头。
Brainboxes一直注重与客户建立紧密的合作关系。公司深入了解客户的需求和应用场景,为其提供定制化的解决方案。此外,Brainboxes还积极参与工业连接领域的发展,与多家知名企业建立合作关系,共同推动行业的技术进步和应用创新。这种客户亲密度和工业连接能力使得Brainboxes在市场竞争中占据有利地位。
在20世纪中期,GI作为一家新兴的电子设备制造商,以其对新兴技术的敏锐洞察力和创新精神而崭露头角。公司创始人意识到半导体技术的巨大潜力,决定投入大量资源进行研发。通过不懈努力,GI成功推出了多款基于半导体技术的创新产品,如早期的晶体管收音机和电视机,这些产品不仅在当时市场上引起了轰动,也为公司后续的快速发展奠定了坚实基础。这一阶段的成功,标志着GI在电子行业技术创新的道路上迈出了坚实的一步。
随着第二次世界大战的爆发,全球对国防电子产品的需求激增。GI凭借其在电子技术领域的深厚积累,迅速调整战略方向,积极投身于国防电子产品的研发与生产。公司开发的潜水艇探测设备和其他关键国防电子产品在战争中发挥了重要作用,赢得了军方的高度认可。这一阶段的成功不仅为GI带来了丰厚的利润,也极大地提升了公司在电子行业中的知名度和地位。
随着公司业务的不断扩大,Dongguan Jingyue Electronics Co Ltd面临着越来越复杂的供应链管理问题。为了降低成本、提高效率,公司决定对供应链进行优化。通过引入先进的供应链管理软件和系统,加强与供应商和物流公司的合作,公司成功实现了供应链的数字化和智能化管理,提高了整体运营效率。
CR Magnetics深知品质是企业的生命线。因此,公司始终坚持以质量为核心的管理理念,从原材料的采购到产品的生产、检测、包装等每一个环节都严格把控。此外,公司还通过了ISO9001:2008质量管理体系认证,并确保所有产品均符合RoHS等环保要求。这些举措使得CR Magnetics的产品赢得了客户的广泛信赖和好评。
利用本电路作为门铃时,不需在门前安装按钮开关,来客只需叩一下大门,门铃便会发声。电路如图所示。 电路最大的特点就是利用扬声器做振动输入,又做门铃声输出。 晶体管V2、电位器KP和电容C2组成控制电路,V1、V3、R2、C1组成互 ...… 查看全部问答∨ |
|
小弟今日购买了一款AD6654/PCBZ评估板,在测试过程中出现几个问题,ADI的售后服务真是不敢恭维,一点忙也帮不上,主要的问题是在使用配套的软件AD6654 Evaluation Software 的过程中,在关于NCO频率的设置的一栏中,几个参数怎么设计 ...… 查看全部问答∨ |
vs2005+PB6.0打开工程文件弹出missing catalog items in os design vs2005+PB6.0打开工程文件弹出missing catalog items in os design窗口,为什么会弹出这样的窗口?要如何选择列表里的项目? Item:MS:sysgen_dotnetv35 Item:MS:sysgen_dotnetv35_support Item:MS:sysgen_sdbus2 … 查看全部问答∨ |
我用AVR128的串口进行数据收发,接收用中断方式,单步执行时,发现数据不能全部接受到,掉了几个字节,也就造成我对这个数组的CRC校验出错,全速运行时,字节全部接收正确,但对接收数组的数据的CRC校验还是错,请问是什么原因呢??急… 查看全部问答∨ |
本帖最后由 dontium 于 2015-1-23 12:48 编辑 大家好,请问TI的产品线中有没有什么芯片可以把四对差分信号转成一对差分信号。 如有相关信息,可同我交流 Q511294874 … 查看全部问答∨ |