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;
}
相关文章:
STM32第十五课:LCD屏幕及应用
文章目录 需求一、LCD显示屏二、全屏图片三、数据显示1.显示欢迎词2.显示温湿度3.显示当前时间 四、需求实现代码 需求 1.在LCD屏上显示一张全屏图片。 2.在LCD屏上显示当前时间,温度,湿度。 一、LCD显示屏 液晶显示器,简称 LCD(Liquid Cry…...
Java--继承
1.继承的本质是对某一批类的抽象,从而实现对世界更好的建模 2.extends的意思是“扩展”,子类是父亲的扩展 3.Java中只有单继承,没有多继承 4.继承关系的两个类,一个为子类(派生类),一个为父类…...
Github与本地仓库建立链接、Git命令(或使用Github桌面应用)
一、Git命令(不嫌麻烦可以使用Github桌面应用) git clone [] cd [] git branch -vv #查看本地对应远程的分支对应关系 git branch -a #查看本地和远程所有分支 git checkout -b [hongyuan] #以当前的本地分支作为基础新建一个【】分支,命名为h…...
c++之旅第十一弹——顺序表
大家好啊,这里是c之旅第十一弹,跟随我的步伐来开始这一篇的学习吧! 如果有知识性错误,欢迎各位指正!!一起加油!! 创作不易,希望大家多多支持哦! 一,数据结构…...
深入了解 PXE:定义、架构、原理、应用场景及常见命令体系
引言 PXE(Preboot Execution Environment,预启动执行环境)是一种允许计算机通过网络启动操作系统而无需本地存储设备的技术。本文将详细介绍 PXE 的定义、架构、原理、应用场景及常见命令体系,特别是以 CentOS 为例,展…...
《每天5分钟用Flask搭建一个管理系统》第9章:API设计
第9章:API设计 9.1 RESTful API的概念 RESTful API是一种基于HTTP协议的网络服务接口设计方法,它使用标准的HTTP方法,如GET、POST、PUT、DELETE等,来执行资源的操作。 9.2 Flask-RESTful扩展的使用 Flask-RESTful是一个Flask扩…...
CCM的作用及原理
CCM调试的理论依据_ccm矩阵sat调试-CSDN博客 CCM是在WB之后,就是当AWB将白色校正之后其他颜色也会跟着有明显变化,CCM的作用就是要保持白色不变,把其他色彩校正到非常精准的地步。 校正后的颜色(target值是一个固定的值)CCM矩阵*原始的颜色…...
10.09面试题目记录
艾融软件 - 线上面试题 排序算法的时间复杂度 O(n^2):冒泡,选择,插入 O(logn):折半插入排序 O(nlogn):希尔,归并,快速,堆 O(nk):桶,…...
14-29 剑和诗人3 – 利用知识图谱增强 LLM 推理能力
知识图谱提供了一种结构化的方式来表示现实世界的事实及其关系。通过将知识图谱整合到大型语言模型中,我们可以增强它们的事实知识和推理能力。让我们探索如何实现这一点。 知识图谱构建 在利用知识图谱进行语言模型增强之前,我们需要从可靠的来源构建…...
【代码大全2 选读】看看骨灰级高手消灭 if-else 逻辑的瑞士军刀长啥样
文章目录 1 【写在前面】2 【心法】这把瑞士军刀长啥样3 【示例1】确定某个月份的天数(Days-in-Month Example)4 【示例2】确定保险费率(Insurance Rates Example)5 【示例3】灵活的消息格式(Flexible-Message-Format …...
深度学习 --- stanford cs231学习笔记八(训练神经网络之dropout)
6,dropout 6,1 线性分类器中的正则化 在线性分类器中,我们提到过正则化,其目的就是为了防止过度拟合。例如,当我们要用一条curve去拟合一些散点的数据时,常常是不希望训练出来的curve过所有的点,…...
【C++】 解决 C++ 语言报错:Undefined Reference
文章目录 引言 未定义引用(Undefined Reference)是 C 编程中常见的错误之一,通常在链接阶段出现。当编译器无法找到函数或变量的定义时,就会引发未定义引用错误。这种错误会阻止生成可执行文件,影响程序的正常构建。本…...
【博士每天一篇文献-算法】Adult neurogenesis acts as a neural regularizer
阅读时间:2023-12-20 1 介绍 年份:2022 作者:Lina M. Tran,Adam Santoro,谷歌DeepMind 期刊: Proceedings of the National Academy of Sciences 引用量:13 代码:https://github.c…...
在Spring Boot项目中引入本地JAR包的步骤和配置
在Spring Boot项目中,有时需要引入本地JAR包以便重用已有的代码库或者第三方库。本文将详细介绍如何在Spring Boot项目中引入本地JAR包的步骤和配置,并提供相应的代码示例。 1. 为什么需要本地JAR包 在开发过程中,可能会遇到以下情况需要使…...
Android Studio中使用命令行gradle查看签名信息
Android Studio中使用命令行gradle查看签名信息: 使用 Gradle 插件生成签名报告 打开 Android Studio 的 Terminal。 运行以下命令:./gradlew signingReport 将生成一个签名报告,其中包含 MD5、SHA1 和 SHA-256 的信息。 如果失败…...
昇思25天学习打卡营第5天 | 神经网络构建
1. 神经网络构建 神经网络模型是由神经网络层和Tensor操作构成的,mindspore.nn提供了常见神经网络层的实现,在MindSpore中,Cell类是构建所有网络的基类,也是网络的基本单元。一个神经网络模型表示为一个Cell,它由不同…...
Web缓存—Nginx和CDN应用
目录 一、代理的工作机制 二、概念 三、作用 四、常用的代理服务器 二.Nginx缓存代理服务器部署 1.在三台服务器上部署nginx 此处yum安装 2.准备测试界面 三、CDN概念及作用 1.CDN的工作过程 一、代理的工作机制 (1)代替客户机向网站请求数据…...
Linux 端口
什么是虚拟端口 计算机程序之间的通讯,通过IP只能锁定计算机,但是无法锁定具体的程序。通过端口可以锁定计算机上具体的程序,确保程序之间进行沟通。 IP地址相当于小区地址,在小区内可以有许多用户(程序)&…...
菜鸡的原地踏步史02(◐‿◑)
每日一念 改掉自己想到哪写哪的坏习惯 二叉树 二叉树的中序遍历 class Solution {/**中序遍历左 - 中 - 右*/private List<Integer> res new ArrayList<>();public List<Integer> inorderTraversal(TreeNode root) {if(root null) {return res;}tranve…...
实现Java应用的数据加密与解密技术
实现Java应用的数据加密与解密技术 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. 数据加密与解密的重要性 数据安全是当今互联网应用开发中的重要问题之…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
