历史上的今天

今天是:2024年09月29日(星期日)

正在发生

2018年09月29日 | STM32f4---TFTLCD显示实验代码(03)

发布者:WhisperingWinds 来源: eefocus关键字:STM32f4  TFTLCD  显示实验 手机看文章 扫描二维码
随时随地手机看文章

第十个要介绍的是字符显示函数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  显示实验 引用地址:STM32f4---TFTLCD显示实验代码(03)

上一篇:STM32f4---TFTLCD显示实验代码(05)
下一篇:STM32f4---TFTLCD显示实验代码(04)

推荐阅读

在 STM32F4 标准固件库里,时钟源的选择以及时钟使能等函数都是在RCC相关固件库文件stm32f4xx_rcc.h 和 stm32f4xx_rcc.c 中声明和定义的。大家打开 stm32f4xx_rcc.h 文件可以看到文件开头有很多宏定义标识符,然后是一系列时钟配置和时钟使能函数申明。这些函数大致可以归结为三类,一类是外设时钟使能函数,一类是时钟源和分频因子配置函数,还有一类是外...
自动驾驶、无人零售,皆是近几年的大风口。当自动驾驶和无人零售叠加在一起,会产生什么火花呢?事实上,结合自动驾驶及无人零售的无人零售车已经量产并投入使用,目前在某些园区景区等场景,消费者已经能在无人零售车实现购物消费。相比无人零售车,传统的便利店和自动售货机受地点固定和运营时间限制、人工开支成本高等因素影响,早午餐高峰的潮汐效应较...
HMD Global已发布诺基亚手机Android 11时间表,奇怪的是,该公司在发布时间表后迅速将时间表撤回了。外媒推测,也许有人过早启用了它,因为Android 11在本月初刚刚问世,而这个更新时间表仍在修改中。通过表中可以看到,可以运行最新版本操作系统的首批机型是诺基亚8.3 5G、2.2、5.3和8.1。据IT之家了解,在2021年1月至3月之间,诺基亚1.3、4.2、2.4、...
9月28日午间消息,由吉利控股集团董事长李书福李书福创办的湖北星纪时代科技有限公司(以下简称“星纪时代”)与武汉经济技术开发区签署战略合作协议,正式宣布进军手机领域。该项目总部落户武汉经济技术开发区,官方称定位高端智能手机,整合全球技术和资源,服务全球市场。  武汉经开区工委副书记刘誓保与星纪时代CEO王勇代表双方签约,武汉市委...

史海拾趣

问答坊 | AI 解惑

单片机键盘扫描之状态机实现

一、概述 在编写单片机程序的过程中,键盘作为一种人机接口的实现方式,是很常用的。 而一般的实现方法大概有: 1、外接键盘扫描芯片(例如8279,7279等等),然后由该芯片来完成去抖、键值读取、中断请求等功能。然后单片机响应中断并读取 ...…

查看全部问答∨

ucos在avr单片机上面的移植

不知道大家有没有兴趣啊,我们想搞一个ucos在avr单片机上面的移植的活动,或者在51单片机上面的移植活动,因为这样的好处是: 1、让熟悉单片机的人尽快进入操作系统这个概念上来; 2、为进入嵌入式系统开始做铺垫; 3、利用自己现成的低廉的平台 ...…

查看全部问答∨

evc串口编程详解

evc串口编程详解…

查看全部问答∨

频率测试仪资料

本帖最后由 paulhyde 于 2014-9-15 03:10 编辑 频率测试仪      …

查看全部问答∨

请问版主,FSMC的问题

STM32F103xCDE系列的FSMC多主访问冲突的bug什么时候能解决啊,ST还准备解决这个问题吗?通过对STM32市场定位的了解,似乎ST不是很急于解决这个bug,毕竟用到的人比较少,但是如果解决了,STM32的应用范围不是会更广吗 一直在用STM32系列的产 ...…

查看全部问答∨

zstack中修改串口波特率的方法

zstack中很多例程使用到了串行口,初学者如果有修改串行口波特率的放,可以参考我给出的方法。这里SerialApp为例来作说明,其他例程修改方法类似。…

查看全部问答∨

TI 原装DK-LM3S8962开发板经验、心得

  免费从TI申请了DK-LM3S8962这块板,放在手边玩了很久,感觉内置以太网比较爽,还有CAN,但是没有USB,且没有并行总线无法扩展RAM 和NAND FLASH,及大尺寸LCD屏(SPI口的太慢)。也许这就是8962的定位吧。LM3S9B96就比较好主频到了80MHz ...…

查看全部问答∨

关于msp430f169下载的问题

写程序的时候在f169开发板上测试的,开发板上的单片机用转接板贴片转直插后烧录。 但是自己做的板子上贴片的f169是直接焊上去的,没法在开发板上烧录,应该怎么做呢???急急急!!!…

查看全部问答∨

ADC采集直流电压,如何保证输入的直流电压稳定波动较小呢?

利用AD7266的单端对一个0-5V的量进行采集,如何保证0-5V的直流量,在某一时刻固定的时候,我这边能完美的采集出来,误差不超过3mV.试验中,我在电路板以外用REF3125搭建了一个直流量的输出,让AD7266采集它输出的电压值,这个也是有波动的。但是如 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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