历史上的今天
返回首页

历史上的今天

今天是:2025年06月03日(星期二)

正在发生

2018年06月03日 | STM32 TFT学习笔记——刷字符

2018-06-03 来源:eefocus

主机环境:Windows 7 SP1

开发环境:MDK5.14

目标板:ST NUCLEO-F303RE

TFT型号:2.4英寸,带触摸,SD卡,240*320分辨率,26万色

驱动IC:ILI9325

ST库版本:STM32Cube_FW_F3_V1.1.0


刷完图片之后,很自然就想进行刷字符实验,该刷字符实验其实跟刷12864液晶屏字符是一样的,因为都是点阵型液晶屏,需要我们把字符转换成点阵数据,这里就需要借助取字模工具了,这个网上有很多,这里使用的是PCtoLCD2002


这里需要注意的是取模方式,需要和你的ILI9325驱动相配合,这里我使用逐行式扫描,高位在前,阴码格式。如下:


刷字符和刷图片其实是一样的,唯一不同的是,对于字符来说在一块区域中不是每个点都是有值的(即不为0),因此要想在LCD上显示该字符需要设置两种颜色,前景色和背景色,当刷字符时如果当前bit为1则刷入前景色,当前bit为0时则刷入背景色,针对字符大小不同就需要设置不同的window area这样才能显示正确的字符,上图中字符点阵是16*16,因此需要调用LCD_SetDisplayWindow(0x0000,0x0000,16,16);来设置当前字符的区域地址以及宽度和高度,刷字符代码如下


for(i = 0; i < 32; i++)  

  1. {  

  2.     for(j = 0; j < 8; j++)  

  3.     {  

  4.         if(abc[i]&0x80)  

  5.         {  

  6.             ILI9325_Write_Value(LCD_BLACK);  

  7.         }  

  8.         else  

  9.         {  

  10.             ILI9325_Write_Value(LCD_WHITE);  

  11.         }  

  12.         abc[i]<<=1;  

  13.     }  

  14.       

  15. }  

abc即为用软件生成的字库代码,效果如下:


在完善LCD的过程中发现一个很有用的代码,原来在F3Cube的库里面有一个很好的LCD代码以及驱动代码供我们参考,在库里面的Drivers文件夹下的BSP目录里面,如图


里面有个stm32303e_evel_lcd.c/h文件,打开


可以看到左侧提供了很多函数,我们完全可以拿来借用,有巨人的肩膀让我们站,为啥不占呢?哈哈,同时在components目录下有个ili9328驱动文件,如图


同时库代码使用的结构也很好,lcd里面提供统一的接口由具体的驱动ic代码来实现各自具体的代码,很方便对代码进行扩展,我们只需要编辑对应ili9325代码即可,大家可以借鉴一哈。本来想借机研究以下FMC驱动LCD的可是看完相应的文档后发现NUCLEO-F303RE没有FMC引脚,只有100pin以上的芯片才有FMC引脚,没搞头了。。。FMC的学习推荐大家看官方的AN2790应用笔记——TFT LCD与FSMC的硬件连接 大容量STM32F10xxx FSMC接口,讲的就是如用使用FSMC来驱动TFT LCD。

临了看到刷字符的白色背景色很突兀特别影响美观,然后就想能不能去掉背景色,如果背景是单一颜色的纯色,那我们刷字符时只需要设置字符的背景色为底部的纯色就可以了,如果我们的底部是一副图片呢,就像之前的图,字符的背景色白色很不和谐,怎么实现呢?RGB565是没有透明度属性的,而且GRAM的AC是自动控制,因此我们只需要在刷字符背景色时重新计算游标就可以了,而不是刷入背景色,代码如下


  1. for(i = 0; i < 32; i++)  

  2. {  

  3.     for(j = 0; j < 8; j++)  

  4.     {  

  5.         if(abc[i]&0x80)  

  6.         {  

  7.             ILI9325_Write_Value(LCD_BLACK);  

  8.         }  

  9.         else  

  10.         {  

  11.             //ILI9325_Write_Value(LCD_WHITE);  

  12.             //重新计算游标地址  

  13.             LCD_SetCursor(((i%2)*8 + (j + 1))%16,i/2 + ((j+1)/8)*(i%2));  

  14.             ILI9325_Write_Address(0x22);  

  15.         }  

  16.         abc[i]<<=1;  

  17.     }  

  18.       

  19. }  

需要注意的是这个代码是有问题的,我这里的起始地址为(0,0),对于任意地址而言LCD_SetCursor里面的值是需要重新计算的,跟你的起始地址是有关系的,这里只是看效果所以没考虑那么多,效果图如下


可以看到左上角的白色背景色没有了,"中"字就像是在图片上的水印一样。然而这并没有什么卵用。。。


推荐阅读

史海拾趣

国炬(GOOGLL)公司的发展小趣事
OTL电路也是一种无输出变压器的功放电路,但它通常需要一个输出电容来耦合输出信号。相比OCL电路,OTL电路的输出阻抗较高,低频响应较差,但电路结构相对简单且成本较低。
登丰微(GSTEK)公司的发展小趣事

歌普电子不仅注重产品的品质和技术创新,还非常重视客户服务。公司始终秉承“用心服务”的理念,为客户提供全方位的售前、售中和售后服务。无论是产品咨询、技术支持还是售后保障,歌普都能迅速响应并满足客户的需求。这种高效、专业的服务赢得了客户的高度评价和信赖,也为公司的持续发展奠定了坚实的基础。

福斯特(FIRST)公司的发展小趣事
可能使用陀螺仪或加速度计等原理。
BERGQUIST公司的发展小趣事

随着产品技术的不断成熟和市场的逐步认可,BERGQUIST公司开始积极拓展市场。公司不仅在国内市场取得了显著成绩,还积极开拓国际市场,与众多知名电子企业建立了长期合作关系。通过不断提升产品质量和服务水平,BERGQUIST成功树立起了自己的品牌形象,成为热管理领域的佼佼者。

Digital Voice Systems Inc公司的发展小趣事

Digital Voice Systems, Inc.(DVSI)于1988年成立,当时正值数字通信技术的兴起阶段。公司创始人凭借对语音编解码技术的深刻理解和前瞻性的市场洞察力,决定投身于这一领域。他们开发出了具有专利保护的基于鲁棒性多带激励模型(MBE Model)的低码率语音压缩算法,如IMBE和AMBE编解码系统。这些算法在当时的市场上独树一帜,为DVSI赢得了第一桶金。

在创立初期,DVSI面临着资金、技术、市场等多方面的挑战。然而,他们凭借着坚定的信念和不懈的努力,逐步克服了这些困难。他们不断投入研发,优化算法,提高产品的性能和稳定性;同时,他们积极开拓市场,与各大通信设备制造商建立合作关系,将产品推向市场。

随着时间的推移,DVSI的产品逐渐在市场上获得了认可。他们的编解码系统被广泛应用于移动通信、卫星通信、军事通信等领域,为客户提供了高效、稳定的语音通信解决方案。DVSI也因此逐渐崭露头角,成为了电子行业中一颗耀眼的明星。

故事二至五框架概述

  1. 技术创新与突破:DVSI在语音编解码技术方面的持续创新,如推出新一代的高效压缩算法,进一步提升了产品的竞争力。
  2. 市场拓展与国际化:随着公司实力的增强,DVSI开始拓展国际市场,与全球多家知名企业建立合作关系,实现了国际化发展。
  3. 合作与竞争:在电子行业中,DVSI与其他企业的合作与竞争并存。他们通过合作共赢的方式,共同推动行业的发展;同时,也面临着来自竞争对手的挑战和竞争压力。
  4. 企业文化与团队建设:DVSI注重企业文化建设,倡导创新、协作、共赢的价值观。他们注重团队建设,吸引了一批优秀人才加入公司,为公司的发展提供了有力的人才保障。

以上故事和框架概述仅供参考,您可以根据这些线索进一步挖掘和编写关于DVSI公司的故事。

Daniel Woodhead公司的发展小趣事

为了进一步提升技术水平和市场竞争力,Daniel Woodhead公司开始寻求与国际知名企业的合作。公司与多家国际知名半导体制造商和电子产品生产商建立了战略合作关系,共同研发新技术、新产品。这些合作不仅为公司带来了先进的技术和理念,还拓宽了公司的国际视野和市场渠道。

问答坊 | AI 解惑

动态电路分析方法

比较全的动态电路分析方法…

查看全部问答>

F2812与LCM1602的连接

小弟最近刚开始学F2812,电气特性好像是写I/O输入不得超过Vddio 自己做了一块练习板,做好后发现LCM1602的RS脚上有5V的电压(还未和DSP连接),其它像RW、E、DB*上都有一些电压,怕会把DSP烧坏 请问F2812可以直接和LCM连接吗?还是要经过一些 ...…

查看全部问答>

时钟奇数分频的用途

时钟奇数分频有啥用途?…

查看全部问答>

数字视频监控硬件设计经验谈

数字视频监控系统主要包括DVR、DVS、IP-Camera等,涉及到嵌入式系统技术、视频编解码技术、音频编解码技术、联网及域名处理技术等。硬件对于系统而言,相当于建筑的地基,地基牢,建筑才可靠,才能够经历风风雨雨的考验。     概述 & ...…

查看全部问答>

LED结构、发光原理、光源特点及应用

replyreload += \',\' + 384127;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

vhdl, 怎么实现让输出维持一段时间后撤销

vhdl, 怎么实现让输出维持一段时间后撤销~~~~~ 请大侠,帮忙~…

查看全部问答>

PCI 接口 IO读写 驱动

driverStudio 生成的驱动程序 实现 IO读写功能 驱动程序代码中两个操作如下: NTSTATUS RW6070Device::RW6070_IOCTL_800_Handler(KIrp I) {         NTSTATUS status = STATUS_SUCCESS;         //t …

查看全部问答>

問,斷電保護中的備用電池一般是什麼電池?有5V的電池嗎?

查了下,好像是镍镉電池,有3.6V的,不知有沒有5V的??…

查看全部问答>

RT-Thread开源实时操作系统/STM32F103VB0.3.0b3版本

这个版本更新有些多,RT-Thread/STM32F103VB 0.3.0 beta3更改记录:- 内核,添加IAR EWARM 5.x工程,在内核定义中做相应的平台定义;- 添加文件系统组件DFS,DFS是一套虚拟文件系统(类似Linux的VFS,但几乎不占 ...…

查看全部问答>

有关2812的资料其寄存器都没有地址,谁那有?

有关2812的资料其寄存器都没有地址,所见的都是C语言的头文件,用了结构体和共用体,找不出起物理地址了,想用一段汇编,找不到外设和寄存器的地址,没法编那.谁有这方面的资料?或给指点一下…

查看全部问答>