第十个要介绍的是字符显示函数LCD_ShowChar,该函数同前面OLED 模块的字符显示函数差不多,但是这里的字符显示函数多了1 个功能,就是可以以叠加方式显示,或者以非叠加方式显示。叠加方式显示多用于在显示的图片上再显示字符。非叠加方式一般用于普通的显示。
该函数实现代码如下:
//在指定位置显示一个字符
//x,y:起始坐标
//num:要显示的字符:" "--->"~"
//size:字体大小 12/16/24
//mode:叠加方式(1)还是非叠加方式(0)
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{
u8 temp,t1,t; u16 y0=y;
u8 csize=(size/8+((size%8)?1:0))*(size/2);//得到字体一个字符对应点阵集所占的字节数
//设置窗口
num=num-' ';//得到偏移后的值
for(t=0;t
{
if(size==12)temp=asc2_1206[num][t]; //调用 1206 字体
else if(size==16)temp=asc2_1608[num][t]; //调用 1608 字体
else if(size==24)temp=asc2_2412[num][t]; //调用 2412 字体
else return; //没有的字库
for(t1=0;t1<8;t1++)
{
if(temp&0x80)LCD_Fast_DrawPoint(x,y,POINT_COLOR);
else if(mode==0)LCD_Fast_DrawPoint(x,y,BACK_COLOR);
temp<<=1;
y++;
if(y>=lcddev.height)return; //超区域了
if((y-y0)==size)
{
y=y0; x++;
if(x>=lcddev.width)return; //超区域了
break;
}
}
}
}
在 LCD_ShowChar 函数里面,我们采用快速画点函数 LCD_Fast_DrawPoint 来画点显示字符,该函数同LCD_DrawPoint一样,只是带了颜色参数,且减少了函数调用的时间,详见本例程源码。该代码中我们用到了三个字符集点阵数据数组 asc2_2412、asc2_1206 和 asc2_1608,这几个字符集的点阵数据的提取方式,同十七章介绍的提取方法是一模一样的。详细请参考第十七章。
最后,我们再介绍一下TFTLCD 模块的初始化函数LCD_Init,该函数先初始化STM32与TFTLCD 连接的 IO口,并配置 FSMC 控制器,然后读取 LCD 控制器的型号,根据控制 IC 的型号执行不同的初始化代码,其简化代码如下:
void LCD_Init(void)
{
vu32 i=0;
GPIO_InitTypeDef GPIO_InitStructure;
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDef readWriteTiming;
FSMC_NORSRAMTimingInitTypeDef writeTiming;
// GPIO,FSMC 时钟使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOD
|RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF|RCC_AHB1Periph_GPIOG,
ENABLE);//使能 PD,PE,PF,PG时钟
RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC,ENABLE);//使能 FSMC 时钟
// GPIO 初始化设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;//PB15 推挽输出,控制背光
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化 //PB15 推挽输出,控制背光
GPIO_InitStructure.GPIO_Pin = (3<<0)|(3<<4)|(7<<8)|(3<<14);
//PD0,1,4,5,8,9,10,14,15 AF OUT
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化
GPIO_InitStructure.GPIO_Pin = (0X1FF<<7);//PE7~15,AF OUT
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;//PF12,FSMC_A6
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;//PF12,FSMC_A6
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化
上一篇:STM32f4---TFTLCD显示实验代码(05)
下一篇:STM32f4---TFTLCD显示实验代码(04)
推荐阅读
史海拾趣
展望未来,飞虹高科公司将继续秉承“创新、质量、服务”的企业精神,致力于CMOS技术的研发和应用。公司将密切关注市场动态和技术发展趋势,不断调整和优化产品结构和市场布局。同时,公司还将加强与国际同行的合作与交流,共同推动电子行业的进步与发展。飞虹高科坚信,在全体员工的共同努力下,公司一定能够在电子行业中取得更加辉煌的成就。
随着业务的不断发展,Apacer宇瞻科技开始在全球范围内布局。除了在台湾设立总部外,公司还在上海设立了宇瞻电子(上海)有限公司,并在美国、欧洲、日本、印度等地设立了分公司。这一全球布局使得宇瞻科技能够更好地服务全球客户,拓展市场份额。
CIRCUITCO公司深知人才是企业发展的核心。因此,公司一直注重人才引进和团队建设。公司积极招聘具有丰富经验和专业技能的人才,为他们提供良好的工作环境和待遇。同时,公司也注重员工的培训和发展,鼓励员工不断创新和学习。通过这些措施,CIRCUITCO公司逐渐建立起一支高素质、专业化的团队,为公司的长远发展提供了有力保障。
面对全球经济波动和行业竞争加剧的挑战,Heimann Optoelectronics Gmbh果断实施转型升级战略。公司加大在物联网、人工智能等新兴技术领域的研发投入,成功开发出了一系列智能光电传感器和解决方案。这些产品能够实时监测环境变化、智能控制设备运行,为智慧城市、智能家居等领域提供了强有力的支持。通过转型升级,公司不仅巩固了传统市场的领先地位,还成功开拓了新的增长点。
随着全球对环境保护意识的增强,Heimann Optoelectronics Gmbh积极响应,将绿色环保理念融入产品设计和生产中。公司投入大量资源研发出低功耗、长寿命的光电传感器,这些产品在使用过程中能够显著减少能源消耗和废弃物产生。此外,公司还采用环保材料进行包装,确保从生产到废弃的整个生命周期都符合环保标准。这一举措不仅赢得了市场的广泛赞誉,还为公司树立了良好的企业形象。
一、概述 在编写单片机程序的过程中,键盘作为一种人机接口的实现方式,是很常用的。 而一般的实现方法大概有: 1、外接键盘扫描芯片(例如8279,7279等等),然后由该芯片来完成去抖、键值读取、中断请求等功能。然后单片机响应中断并读取 ...… 查看全部问答∨ |
不知道大家有没有兴趣啊,我们想搞一个ucos在avr单片机上面的移植的活动,或者在51单片机上面的移植活动,因为这样的好处是: 1、让熟悉单片机的人尽快进入操作系统这个概念上来; 2、为进入嵌入式系统开始做铺垫; 3、利用自己现成的低廉的平台 ...… 查看全部问答∨ |
STM32F103xCDE系列的FSMC多主访问冲突的bug什么时候能解决啊,ST还准备解决这个问题吗?通过对STM32市场定位的了解,似乎ST不是很急于解决这个bug,毕竟用到的人比较少,但是如果解决了,STM32的应用范围不是会更广吗 一直在用STM32系列的产 ...… 查看全部问答∨ |
zstack中很多例程使用到了串行口,初学者如果有修改串行口波特率的放,可以参考我给出的方法。这里SerialApp为例来作说明,其他例程修改方法类似。… 查看全部问答∨ |
免费从TI申请了DK-LM3S8962这块板,放在手边玩了很久,感觉内置以太网比较爽,还有CAN,但是没有USB,且没有并行总线无法扩展RAM 和NAND FLASH,及大尺寸LCD屏(SPI口的太慢)。也许这就是8962的定位吧。LM3S9B96就比较好主频到了80MHz ...… 查看全部问答∨ |
|
写程序的时候在f169开发板上测试的,开发板上的单片机用转接板贴片转直插后烧录。 但是自己做的板子上贴片的f169是直接焊上去的,没法在开发板上烧录,应该怎么做呢???急急急!!!… 查看全部问答∨ |
利用AD7266的单端对一个0-5V的量进行采集,如何保证0-5V的直流量,在某一时刻固定的时候,我这边能完美的采集出来,误差不超过3mV.试验中,我在电路板以外用REF3125搭建了一个直流量的输出,让AD7266采集它输出的电压值,这个也是有波动的。但是如 ...… 查看全部问答∨ |