STM32之TFT触摸屏(ILI9320):通过LCD_ShowChar显示

发布者:未来架构师最新更新时间:2021-03-01 来源: eefocus关键字:STM32  TFT触摸屏  ILI9320  LCD_ShowChar 手机看文章 扫描二维码
随时随地手机看文章

使用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  TFT触摸屏  ILI9320  LCD_ShowChar 引用地址:STM32之TFT触摸屏(ILI9320):通过LCD_ShowChar显示

上一篇:STM32f103的电阻触摸屏的五点校正算法
下一篇:基于STM32 的FSMC接口驱动TFT彩屏的设计

推荐阅读最新更新时间:2024-11-06 15:18

STM32测量外部电池电压值时参考电压解决方法
STM32 的ADC模块是一个12位的逐次逼近型 模拟数字转换器 。他有18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式储存在16位数据寄存器中。 其中,ADC的供电要求是2.4V到3.6V,ADC输入范围:VREF- VIN VREF+。但是,对于小于64引脚封装的STM32芯片中,没有VREF-和VREF+引脚,采用的ADC参考电压是内部电源引脚上的输入电压,所以,这也可能造成,对于不同的锂电池、 LDO 造成不同的参考电压值,虽然STM32是可以正常工作,但是参考电压的不同,也就造成我们使用ADC采集外部模拟信号值时,无法还原真实数据。所以
[单片机]
STM32从入门到精通—I2C 简介
I2C端口,即内部集成电路接口,I2C总线接口用作微控制器和I2C串行总线之间的接口,提供多主模式功能,可以控制所有I2C总线特定的序列、协议、仲裁和时序。它支持标准和快速模式。 I2C可用于多种用途,包括CRC生成和验证、SMBus(系统管理总线)以及PMBus(电源管理总线)。 I2C主要特性 并行总线/I2C协议转换器 多主模式功能:同一接口既可用作主模式也可用作从模式 I2C主模式特性: 1. 时钟生成 2. 起始位和停止位生成 I2C从模式特性: 1. 可编程I2C地址检测 2. 双寻址模式,可对2个从地址应答 3. 停止位检测 7位/10位寻址以及广播呼叫的生成和检测 支持不同的通信速度: 1
[单片机]
关于STM32中CAN1_RX0_IRQn和CAN1_RX1_IRQn的使用
如果你用的CAN引脚是PA11和PA12,接收中断用CAN1_RX0_IRQn。如果CAN引脚用的是PB8和PB9,也就是用重定义的引脚,接收中断用CAN1_RX1_IRQn。由于PA11和PA12也是USB的引脚,所以非互联型且带CAN控制器的微控制器的库文件在起名字时用了USB_LP_CAN1_RX0_IRQn。 以上内容参考于网络,后经证实,以上说法是不正确的,理由如下: STM32有2个3级深度的接收缓冲区:FIFO0和FIFO1,每个FIFO都可以存放3个完整的报文,它们完全由硬件来管理。如果是来自FIFO0的接收中断,则用CAN1_RX0_IRQn中断来处理。如果是来自FIFO1的接收中断,则用CAN1_
[单片机]
stm32 dac库函数解读
1、简述: 12位数字输入,电压输出,DAC可以配置为8位或12位模式。有2个输出通道。在双DAC模式下,两个通道可以独立地工作。 特殊功能: 噪声波形生成,三角波形生成,外部触发转换,双DAC同时或者分别转换;每个通道都有DMA功能; 参考电压:2.4V~ 3.3V 因为一旦使能DAC通道,那么相应的GPIO便自动地连接到DAC转换器,因此,模拟输出前应该设置成模拟输入,目的是避免寄生的干扰和额外的功耗; 2、函数介绍: (1)缺省函数 DAC_Init(); (2)DAC_Init(DAC_Channel_1,&DAC_InitStructure);初始化函数 DAC_InitTypeDef DA
[单片机]
STM32高级开发-在GCC和GNU中使用printf打印串口数据
在大家使用keil或是iar开发stm32等arm芯片的时候,想来最不陌生的就是使用print通过串口输出一些数据,用来调试或是其他作用。但是要明确的是由于keil iar gcc 他们使用的标准C语言库虽然都遵循一个标准,但他们底层的函数实现方式都是不同的,那么在GCC中我们能否像在keil中一样重映射print的输出流到串口上呢?答案是肯定的。 keil中的重映射方式及原理 #include //include stm32f10x.h #pragma import(__use_no_semihosting) //标准库需要的支持函数 struct __FILE {
[单片机]
意法半导体推出STM32WB1MMC Bluetooth® LE 认证模块 简化并加快无线产品开发
意法半导体推出STM32WB1MMC Bluetooth® LE 认证模块 简化并加快无线产品开发 2023 年 3 月 28 日, 中国——意法半导体新推出的STM32 Bluetooth® 无线模块让设计人员能够在无线产品尤其是中低产量项目中发挥STM32WB双核微控制器(MCU) 的优势。 该模块取得Bluetooth Low Energy 5.3认证和全球无线电设备许可证,支持STM32Cube 生态系统,有助于简化应用开发,加快产品研发周期。 STM32WB1MMC多合一模块缓解了供应链紧张难题和交货时间问题,并有助于避免认证成本和认证延误产品开发。 STM32WB1MMC是一个LGA 封装的功能完整
[单片机]
意法半导体推出STM32WB1MMC Bluetooth® LE 认证模块  简化并加快无线产品开发
基于STM32的传感器接口模块的设计
摘要:基于STM32实现了电流型、电压型以及数字IO型传感器接口模块;进行了接口模块的软件设计,说明了详细的固件代码设计。除传统串口外,提供以太网接口,嵌入UDP协议,提供后期开发的便利接口。 关键词:信号接口;传感器接口模块;UDP协议 0 引言 物联网将会是未来很长一段时间内IT产业的发展趋势,一个完整的物联网系统的构成或产业链的划分,目前业界比较统一的观点基本都认为应该包括三个层面:末端设备或子系统、通信连接系统、以及管理和应用系统。即Device-设备、Connect-连接和Manage-管理。由于数字整合的需求日益增长,对作为感知层核心组成元素的传感器数据融合提出了更高要求。如何将传感器连入网络成为一个尤其重要的问题
[工业控制]
基于<font color='red'>STM32</font>的传感器接口模块的设计
STM32 ucos 下添加CAN模块
1.CAN IO RX TX 的设定和重映射 GPIO_PinRemapConfig(GPIO_Remap2_CAN, ENABLE); //端口重映射到PD0,PD1 2.clock CAN IO CLOCK 的开启 、*-------gpio for can------------*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE); CAN 自身CLOCK 的开启、 /* CAN Periph clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved