STM32f4---TFTLCD显示实验代码(03)

发布者:WhisperingWinds最新更新时间:2018-09-29 来源: 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)

推荐阅读最新更新时间:2024-03-16 16:14

STM32F4更新W25Q16字库源程序
一开始我下载了读取SD卡的程序,但液晶显示屏幕上没反应,于是我就下载了这个关于更新字库的程序,就有反应了。 本实验将实现如下功能:开机的时候先检测W25Q16中是否已经存在字库,如果存在,则按次序显示汉字(三种字体都显示)。如果没有,则检测SD卡和文件系统,并查找SYSTEM文件夹下的FONT文件夹,在该文件夹内查找UNIGBK.BIN、GBK12.FON、GBK16.FON (这几个文件的由来,我们前面已经介绍了)。在检测到这些文件之后,就开始更新字库,更新完毕才开始显示汉字。通过按按键KEY0,可以强制更新字库。同样我们也是用DS0来指示程序正在运行。 需要拷贝到SD卡根目录文件 1,在系统(或字库)更新的时候,必须用到SY
[单片机]
<font color='red'>STM32F4</font>更新W25Q16字库源程序
STM32F4xx_GPIO常用设置
1、初始化时钟:   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE, ENABLE); 2、输出设置:   GPIO_InitTypeDef GPIO_InitStructure;   GPIO_StructInit(&GPIO_InitStructure);   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_9;   GPIO_Init
[单片机]
S3C2440 测试程序(六) LCD显示实验2_触摸小图片切换大图片
实验效果: 点击屏幕中的6副小图片,可将该小图片切换成全屏图片。 1、欲实现小图片,需将原来图片压缩,此处压缩成原来的1/8。代码如下: void Paint_Bmp_Small(int x0,int y0,int h,int l,int k,unsigned char bmp ) { //从 至 为止被显示被压缩了1/k的图片 int x,y; U32 c; int p = 0; h = h/k; l = l/k; for( y = 0 ; y l ; y++ ) // l=240/k { for( x = 0 ; x
[单片机]
第16章 STM32F429必备的HAL库API
16.1 初学者重要提示 对于一些常用的函数,大家一定要熟练的掌握都实现了什么功能,比如HAL_Init,HAL_RCC_OscConfig,HAL_RCC_ClockConfig等。最好的办法是把这些函数的源码读一遍。 16.2 那些是必备的API 这里我们通过一个简单的初始化流程来了解STM32F4的工程模板所必备的库文件和API: 第1步:系统上电复位,进入启动文件startup_stm32f429xx.s,在这个文件里面执行复位中断服务程序。 在复位中断服务程序里面执行函数SystemInit,此函数在文件system_stm32f4xx.c里面。 之后是调用编译器封装好的函数,比如用于MDK的启动文件是调
[单片机]
第16章 <font color='red'>STM32F4</font>29必备的HAL库API
stm32f4 定时捕获
Ⅰ、概述 本文基于上一篇文章“TIM输入波形捕获(脉冲频率)”的基础上进行拓展,上一篇文章主要是捕获波形的频率,本文主要拓展捕获波形的占空比。 笔者实验测试的方法和上一篇文章一样,通过信号发生器产生PWM信号,通过串口发送频率和占空比到上位机(上位机串口助手显示其数值)。(没有信号发生器的朋友可以结合上一篇文章PWM输出做信号源;在同一块板子上也可以使用不同定时器,将PWM输出引脚接在捕获输入引脚) 实验现象:不同频率的实验现象请看上一篇文章(该文章提供的工程笔者也是进行了大量不同频率的测试,误差在几Hz属正常范围)。 1000Hz、20% - 80%占空比现象: 1000Hz、51% - 58%占空比现象: 关于
[单片机]
<font color='red'>stm32f4</font> 定时捕获
STM32F4XX高效驱动篇1-UART
之前一直在做驱动方面的整理工作,对驱动的高效性有一些自己的理解这里和大家分享一下。并奉驱动程序,本程序覆盖uart1-8。 串口驱动,这是在每个单片机中可以说是必备接口。可以说大部分产品中都会使用,更有甚者一个产品中用到8个串口。这样一个高效的驱动是决定您产品优劣的关键因素。本文主要针对STM32F4XX系列芯片做的一个驱动接口层。以减少您在开发项目时驱动方面所花费时间,以及为程序达到高效的处理为目的。 从51,pic到现在的STM32,个人感觉STM32这方面做的非常突出,丰富的使用模式,强大的引脚映射功能,强大的处理能力等,给我留下的深刻的印象。 关于串口的使用方式,个人总结出以下三种: 1) 中断接收,状态查询发送:
[单片机]
STM32学习之:STM32F4XX的三大主体部分
三大模块:电源、IO口、时钟。 一、 首先,我们来看一下电源,下面是电源框图 从上面我们可以看出,电源给内部的三大关键部分供电,一是给ADC供电,这块无需多说,二是电池备份域,VBAT引脚可以连接到一个可选的待机电压由电池供电或由另一个来源,当V DD是断开时保留的备份寄存器的内容和供给的RTC。还一部分主要用来给数字逻辑部分供电,像唤醒逻辑、看门狗、IO等,给内核、内存和数字外设的供电需要在VDD之后加上一个电压调整器。 接下来介绍的就是低功耗模式了 默认情况下,微控制器是在运行模式后,一个系统或一个上电复位。在运行模式的CPU的时钟HCLK和程序代码执行,一些低功耗模式是可用的,以节省电力时,不需要保持运行的中央处理器
[单片机]
STM32F4学习笔记11——CRC循环冗余校验
关于CRC校验有以下几个方面 1.模2除(也就是异或)。 2.多项式与二进制关系(x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0,x的最高幂次为R,转换成对应的二进制数有R+1位。)。 CRC基本原理 循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。 校验码的具体生成过程为:假设发送信息用信息多项式C(X)表示,将C(x)左移R位,则可表示成C(x)
[单片机]
<font color='red'>STM32F4</font>学习笔记11——CRC循环冗余校验
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved