STM32第十五课:LCD屏幕及应用

文章目录

  • 需求
  • 一、LCD显示屏
  • 二、全屏图片
  • 三、数据显示
    • 1.显示欢迎词
    • 2.显示温湿度
    • 3.显示当前时间
  • 四、需求实现代码


需求

1.在LCD屏上显示一张全屏图片。
2.在LCD屏上显示当前时间,温度,湿度。
在这里插入图片描述


一、LCD显示屏

  液晶显示器,简称 LCD(Liquid Crystal Display),相对于上一代 CRT 显示器(阴极射线管显示器), LCD 显示器具有功耗低、体积小、承载的信息量大及不伤眼的优点,因而它成为了现在的主流电子显示设备,其中包括电视、电脑显示器、手机屏幕及各种嵌入式设备的显示器。
  显示器尺寸:显示器的大小一般以英寸表示,如 5 英寸、 21 英寸、 24 英寸等,这个长度是指屏幕对角线的长度, 通过显示器的对角线长度及长宽比可确定显示器的实际长宽尺寸。
LCD屏幕的构成:显示屏由液晶显示面板、触摸面板以及 PCB 底板构成.
本次使用的屏幕是中景园2.8 寸的 TFTLCD 显示屏,该模块支持 65K 色显示,显示分辨率为 320×240,以 16 位的 8080接口通讯,驱动为9341并自带触摸功能(本文没用到)。

二、全屏图片

首先将该LCD屏官方写好的三个文件添加进工程中的api文件夹中
在这里插入图片描述
打开图片取模软件。
在这里插入图片描述
在这里插入图片描述
找到想要设置的图片,用电脑自带的画图软件将分辨率设置为340x240。
在这里插入图片描述
然后在图片取模软件中打开该图片。
在这里插入图片描述
按照图中所示设置即可。
记得设置完宽度和高度后,点一下蓝色框起的部分。
最后点击保存,该文件会生成一个.c文件,该文件内为图片取模后的数组。
将该文件添加到工程中即可。
在这里插入图片描述
在主函数中外部声明一下该数组。
在这里插入图片描述
在官方给的bsp_lcd.c中找到LCD初始化文件并在主函数中声明。
由于我使用的图片为横图,所以将显示改为横屏显示。
在这里插入图片描述
在这里插入图片描述

最后在官方文件中找到LCD_ShowPhoto()函数,填写参数并将其添加到主函数中就可以了。
参数填写:x,y为图片左上角坐标,这里为了铺满全屏填0,0。
长宽直接最大340X240。最后就是图片的数组了,记得强转一下,以符合要求。
实现效果:
在这里插入图片描述

三、数据显示

1.显示欢迎词

在官方文件中找到hz1616数组
在这里插入图片描述
将想要显示的汉字加入进数组中。
再打开数字取模软件
在这里插入图片描述
输入所需汉字,点击生成字模。
将生成的数字添加到Hz_16_16[]数组中,再将16个数组删去中间的{},合并为32个数组。
要注意:1.汉字顺序要跟数组顺序相对应。
    2.keil5要将编码格式设置成简体中文。
在这里插入图片描述
最后在主函数找到显示汉字的函数
在这里插入图片描述
参数填写:xy坐标,字体背景颜色,字体颜色,中文字符串

2.显示温湿度

将之前写好的DHT11模块初始化,数据处理加载到主函数中,然后外部声明温湿度。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于LCD屏显示函数需要转换为字符串,而温湿度为浮点型量。
所以我们需要将浮点型转换为字符串,此处我使用的是sprintf来转换。
先声明两个字符串来承接转换后的结果:
在这里插入图片描述
再使用sprintf进行转换:
在这里插入图片描述
最后使用LCD_ShowString();函数打印即可。
参数:x,y开始坐标,字体背景颜色,字体颜色,转换后的字符串。
在这里插入图片描述
要注意数据长度要多设置点,防止小数点后的数字显示不出来。
中间字符的显示函数为LCD_ShowChar()函数。
只要是ASCII码表上有的字符都能打出来,直接填序号即可。
参数:xy开始坐标,字符序号,大小(为了和汉字保持一致,我们这里用的都是16),最后的0为不加背景。

3.显示当前时间

先将RTC模块加入进工程。

在这里插入图片描述
使用localtime处理一下当前时间,并保存到结构体里。
最后使用sprintf转换为字符串即可
在这里插入图片描述

四、需求实现代码

使用以上知识综合应用就能实现需求,关键代码如下:
main.c

#include "stm32f10x.h"
#include "usart.h"
#include "stdio.h"
#include "delay.h"
#include "string.h"
#include "pwm.h"
#include "adc.h"
#include "su03t.h"
#include "dht11.h"
#include "kqm.h"
#include "key.h"
#include "RTC.h"
#include "bsp_lcd.h"
char D_wen[20];
char D_shi[20];
char D_time[20];extern float voc;
extern float ch2o;
extern float co2;
extern float hum;
extern float tem;
extern ADCARR adcData;
extern const unsigned char gImage_hengliu[153600];
uint8_t key3flag,cntt;
uint32_t sec=0;
int main()
{NVIC_SetPriorityGrouping(5);//两位抢占两位次级Usart1_Config(); SysTick_Config(72000);Led_Init();key_Init();LCD_Init();Kqm_U4Config();Su03t_U5Config();DHT11_Config();	 RTC_Configuration();LCD_ShowPhoto(0, 0,320, 240, (uint8_t*)gImage_hengliu);while(1){	sec = RTC_GetCounter();time_t seconds=sec;struct tm *info = localtime(&seconds);if(ledcnt[0]>=ledcnt[1]){//过去500msledcnt[0]=0;Get_Smoke_Light_MidValue();//烟雾光照中位数DHT11_ReadData();//温湿度KQM_DealData();//空气质量Led_Toggle(1);printf(" LED闪烁 \r\n");printf("本地时间:%d-%02d-%02d %02d:%02d:%02d\r\n",info->tm_year + 1900, info->tm_mon + 1, info->tm_mday,info->tm_hour, info->tm_min, info->tm_sec);//LCD显示sprintf(D_wen, "%.2f", tem);sprintf(D_shi, "%.2f", hum);sprintf(D_time, "%d-%02d-%02d %02d:%02d:%02d", info->tm_year + 1900, info->tm_mon + 1, info->tm_mday,info->tm_hour, info->tm_min, info->tm_sec);LCD_ShowChineseStr(0,0,WHITE,RED,"欢迎使用空气质量检测仪");	//一个汉字屏幕上占16LCD_ShowChar(176,0,33,16,0);//显示字符!LCD_ShowChineseStr(0,150,WHITE,RED,"室内温度");	//一个汉字屏幕上占16LCD_ShowChar(64,150,58,16,0);//显示字符:LCD_ShowString(72,150,100,16,16,(uint8_t*)D_wen);LCD_ShowChineseStr(0,166,WHITE,RED,"室内湿度");	//一个汉字屏幕上占16LCD_ShowChar(64,166,58,16,0);//显示字符:LCD_ShowString(72,166,100,16,16,(uint8_t*)D_shi);LCD_ShowChineseStr(0,220,WHITE,RED,"当前时间");	//一个汉字屏幕上占16LCD_ShowChar(64,220,58,16,0);//显示字符:LCD_ShowString(72,220,300,16,16,(uint8_t*)D_time);}Su03tDealData();//命令获取	}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/370037.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vulhub靶场之DEVGURU:1

1 信息收集 1.1 主机发现 arp-scan -l 发现主机IP地址为“192.168.1.11 1.2 端口发现 nmap -sS -sV -A -T5 -p- 192.168.1.11 发现端口为:22,80,8585 1.3 目录扫描 dirsearch -u 192.168.1.11 发现存在git泄露 2 文件和端口访问 2…

【JavaEE精炼宝库】文件操作(1)——基本知识 | 操作文件——打开实用性编程的大门

目录 一、文件的基本知识1.1 文件的基本概念:1.2 树型结构组织和目录:1.3 文件路径(Path):1.4 二进制文件 VS 文本文件:1.5 其它: 二、Java 操作文件2.1 方法说明:2.2 使用演示&…

Python学习笔记29:进阶篇(十八)常见标准库使用之质量控制中的数据清洗

前言 本文是根据python官方教程中标准库模块的介绍,自己查询资料并整理,编写代码示例做出的学习笔记。 根据模块知识,一次讲解单个或者多个模块的内容。 教程链接:https://docs.python.org/zh-cn/3/tutorial/index.html 质量控制…

绿色金融相关数据合集(2007-2024年 具体看数据类型)

数据类型: 1.绿色债券数据:2014-2023 2.绿色信贷相关数据:2007-2022 3.全国各省及地级市绿色金融指数:1990-2022 4.碳排放权交易明细数据:2013-2024 5.绿色金融试点DID数据:2010-2023 数据来源&#…

基于图像处理的滑块验证码匹配技术

滑块验证码是一种常见的验证码形式,通过拖动滑块与背景图像中的缺口进行匹配,验证用户是否为真人。本文将详细介绍基于图像处理的滑块验证码匹配技术,并提供优化代码以提高滑块位置偏移量的准确度,尤其是在背景图滑块阴影较浅的情…

ES6模块化学习

1. 回顾:node.js 中如何实现模块化 node.js 遵循了 CommonJS 的模块化规范。其中: 导入其它模块使用 require() 方法 模块对外共享成员使用 module.exports 对象 模块化的好处: 大家都遵守同样的模块化规范写代码&#xff…

计算机网络体系结构详解:协议与分层

在学习计算机网络时,理解网络协议与分层体系结构是至关重要的。本文将详细介绍这些概念,帮助基础小白快速入门。 1. 什么是网络协议 网络协议是计算机网络中用于数据交换的规则和标准。这些规则规定了数据格式、时序以及发送和接收数据时的动作。网络协…

全新桌面编辑器

目录 前言 一、链接 ONLYOFFICE 8.1版本 官网下载链接: ONLYOFFICE 在线工具: 下载版本推荐: 二、使用体验 1. 界面设计: 2. 文档编辑功能: 3. 电子表格功能: 4. 演示文稿功能: 5.PDF编…

面向对象案例:电影院

TOC 思路 代码 结构 具体代码 Movie.java public class Movie {//一共七个private int id;private String name;private double price;private double score;private String director;private String actors;private String info;//get和setpublic int getId() {return id;…

【qt】如何获取网卡的信息?

网卡不只一种,有有线的,有无线的等等 我们用QNetworkInterface类的静态函数allInterfaces() 来获取所有的网卡 返回的是一个网卡的容器. 然后我们对每个网卡来获取其设备名称和硬件地址 可以通过静态函数humanReadableName() 来获取设备名称 可以通过静态函数**hardwareAddre…

在centos7上部署mysql8.0

1.安装MySQL的话会和MariaDB的文件冲突,所以需要先卸载掉MariaDB。查看是否安装mariadb rpm -qa | grep mariadb 2. 卸载mariadb rpm -e --nodeps 查看到的文件名 3.下载MySQL安装包 MySQL官网下载地址: MySQL :: Download MySQL Community Serverhttps://dev.mys…

【React Hooks原理 - useCallback、useMemo】

介绍 在实际项目中,useCallback、useMemo这两个Hooks想必会很常见,可能我们会处于性能考虑避免组件重复刷新而使用类似useCallback、useMemo来进行缓存。接下来我们会从源码和使用的角度来聊聊这两个hooks。【源码地址】 为什么要有这两个Hooks 在开始…

STM32 看门狗 HAL

由时钟图可以看出看门狗采用的是内部低速时钟,频率为40KHz 打开看门狗,采用32分频,计数1250。 结合设置的分频系数和重载计数值,我们可以计算出看门狗的定时时间: 32*1250/40kHz 1s 主函数中喂狗就行 HAL_IWDG_Ref…

SQL使用join查询方式找出没有分类的电影id以及名称

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 现有电影信息…

第一次作业

作业1 1.代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head&…

vue require引入静态文件报错

如果是通过向后端发送请求&#xff0c;动态的获取对应的文件数据流很容易做到文件的显示和加载。现在研究&#xff0c;一些不存放在后端而直接存放在vue前端项目中的静态媒体文件如何加载。 通常情况下&#xff0c;vue项目的图片jpg&#xff0c;png等都可以直接在/ass…

Android --- 新电脑安装Android Studio 使用 Android 内置模拟器电脑直接卡死,鼠标和键盘都操作不了

新电脑安装Android Studio 使用 Android 内置模拟器电脑直接卡死&#xff0c;鼠标和键盘都操作不了 大概原因就是,初始化默认Google的安卓模拟器占用的RAM内存是2048&#xff0c;如果电脑的性能和内存一般的话就可能卡死&#xff0c;解决方案是手动修改安卓模拟器的config文件&…

大数据期末复习——hadoop、hive等基础知识

一、题型分析 1、Hadoop环境搭建 2、hadoop的三大组件 HDFS&#xff1a;NameNode&#xff0c;DataNode&#xff0c;SecondaryNameNode YARN&#xff1a;ResourceManager&#xff0c;NodeManager &#xff08;Yarn的工作原理&#xff09; MapReduce&#xff1a;Map&#xff0…

机器学习 C++ 的opencv实现SVM图像二分类的训练 (二)【附源码】

本节讲机器学习 C 的opencv实现SVM图像二分类的训练&#xff0c;下节讲测试&#xff1a; 数据集合data内容如下&#xff1a; 下载地址为&#xff1a;https://download.csdn.net/download/hgaohr1021/89506900 #include <stdio.h> #include <time.h> #include…

AIGC | 在机器学习工作站安装NVIDIA CUDA® 并行计算平台和编程模型

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 0x02.初识与安装 CUDA 并行计算平台和编程模型 什么是 CUDA? CUDA&#xff08;Compute Unified Device Architecture&#xff09;是英伟达&#xff08;NVIDIA&#xff09;推出的并行计算平台和编…