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 并口,自带触摸功能(本文没用到)。

二、全屏图片

首先将该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]){//过去500ms
			ledcnt[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,"欢迎使用空气质量检测仪");	//一个汉字屏幕上占16
			LCD_ShowChar(176,0,33,16,0);//显示字符!
			LCD_ShowChineseStr(0,150,WHITE,RED,"室内温度");	//一个汉字屏幕上占16
			LCD_ShowChar(64,150,58,16,0);//显示字符:
			LCD_ShowString(72,150,100,16,16,(uint8_t*)D_wen);
			LCD_ShowChineseStr(0,166,WHITE,RED,"室内湿度");	//一个汉字屏幕上占16
			LCD_ShowChar(64,166,58,16,0);//显示字符:
			LCD_ShowString(72,166,100,16,16,(uint8_t*)D_shi);
			LCD_ShowChineseStr(0,220,WHITE,RED,"当前时间");	//一个汉字屏幕上占16
			LCD_ShowChar(64,220,58,16,0);//显示字符:
			LCD_ShowString(72,220,300,16,16,(uint8_t*)D_time);
		}
		Su03tDealData();//命令获取	
		
		
    }
		return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

flex布局中子元素内容超出时,子元素本身出现滚动条实现方法

flex布局中子元素宽度平均分配,并且当子元素内容超出时,子元素本身出现滚动条实现方法: 将父元素设置为display: flex,以启用Flexbox布局。将每个子元素的flex属性设置为1,以使其宽度平均分配。设置子元素的overflow属…

CVE-2019-12272 Openwrt可视页面LuCi命令注入漏洞复现(完结)

声明 本文所使用的一些源代码等内容已经上传至github,具体地址如下 Vulnerability_POC-EXP/OpenWrt/CVE-2019-12272 at main a2148001284/Vulnerability_POC-EXP GitHub 漏洞简介 参考内容: CVE-2019-12272 OpenWrt图形化管理界面LuCI命令注入分析 |…

【吴恩达机器学习-week2】可选实验:使用 Scikit-Learn 进行线性回归

支持我的工作 🎉 📃亲爱的朋友们,感谢你们一直以来对我的关注和支持! 💪🏻 为了提供更优质的内容和更有趣的创作,我付出了大量的时间和精力。如果你觉得我的内容对你有帮助或带来了欢乐&#xf…

springboot项目jar包修改数据库配置运行时异常

一、背景 我将软件成功打好jar包了,到部署的时候发现jar包中数据库配置写的有问题,不想再重新打包了,打算直接修改配置文件,结果修改配置后,再通过java -jar运行时就报错了。 二、问题描述 本地项目是springBoot项目…

Git使用——首次创建本地仓库、配置、初始化、关联远程仓库

1、安装 Git软件 官网:git-scm.com 有时候官网打不开,这里留存个之前下载过的安装包: https://download.csdn.net/download/weixin_43908355/89502977 2、配置本地仓库 在准备建仓库的文件夹里,右键点击:Git Bash …

Cybervadis认证是什么?

Cybervadis认证是一种全面且深入的网络安全评估和认证服务,旨在帮助组织提高其网络安全实践的成熟度,并有效应对不断变化的网络威胁和攻击。以下是关于Cybervadis认证的一些关键信息: 认证目的: 评估和验证组织在网络安全方面的能…

HMI 的 UI 风格成就经典

HMI 的 UI 风格成就经典

SAR目标检测

Multi-Stage with Filter Augmentation 多阶段滤波器增强(MSFA) 对SAR合成孔径雷达目标检测性能的改善 MSFA ON SAR 传统方法: 预训练:传统方法开始于在通用数据集上预训练一个基础模型。 微调:这个预训练的模型会被微调以适应特定的SAR图像,试图缩小域间的差距 …

git命令含有中文,终端输出中文乱码的问题

目录 1、[当前代码页] 的936 (ANSI/OEM - 简体中文 GBK) 是导致中文乱码的原因 2、这样会导致什么问题呢? (1) 问题一: 【属性】选项的【字体】无法识别自定义文字样式,【默认值】选项可选自定义字体样式,却无法覆盖【属性】选项 (2) 问题…

AutoCAD Mechanical下载安装;Mechanical针对机械设计领域开发的CAD软件下载安装!

在AutoCAD Mechanical的助力下,用户能够轻松应对二维绘图与三维建模两大核心任务。二维绘图方面,软件提供了精准且灵活的绘图工具,使得工程师能够迅速勾勒出机械部件的轮廓与细节,大大提高了工作效率。 而在三维建模方面&#xff…

继承QAbstractListModel,结合QListView

这里想要写一个QAbstractListModel的子类&#xff0c;学习一下如何实例化QAbstractListModel。 QAbstractListModel子类化-CSDN博客 QVariant与自定义类型互转之奇巧淫技_qt 类型转 qvariant-CSDN博客 #pragma once#include <QStyledItemDelegate> #include <qmeta…

React+TS 从零开始教程(4):useEffect

上一节传送门&#xff1a;ReactTS 从零开始教程&#xff08;3&#xff09;&#xff1a;useState 源码链接&#xff1a;https://pan.quark.cn/s/c6fbc31dcb02 上一节&#xff0c;我们已经学会了React的第一个Hook&#xff1a;useState。 这一节&#xff0c;我们要学习的是另一…

聊聊etsy平台,一个年入百万的项目

聊聊etsy平台&#xff0c;一个年入百万的项目 什么是etsy,这是怎样一个平台&#xff0c;怎样盈利的&#xff1f;相信现在大家满脑子都是这些疑问。 这个平台也是无意间一个学员提到的&#xff0c;据说他朋友靠这个平台年赚好几百万。苦于门槛太高&#xff0c;他也做不了。今天…

乐鑫Wi-Fi单火线开关方案,传统开关智能升级,启明云端乐鑫一级代理商

随着智能家居技术的飞速发展&#xff0c;我们的日常生活正在变得越来越便捷。今天&#xff0c;我们要探讨的是一种创新的智能家居方案——Wi-Fi单火线智能开关。 传统的机械单火线开关虽然简单可靠&#xff0c;但在现代智能家居系统中显得力不从心。它们无法远程控制&#xff…

python实现简单的三维建模学习记录

课程来源与蓝桥云课Python 实现三维建模工具_Python - 蓝桥云课和500 Lines or LessA 3D Modeller 说明 个人估计这是一个值得花一个礼拜左右时间去琢磨的一个小项目。上述网址中的代码直接拿来不一定能跑&#xff0c;需要后期自己去修改甚至在上面继续优化&#xff0c;会在其…

Java 汉诺塔问题 详细分析

汉诺塔 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小…

华为手机怎么打印文件?

关于华为手机打印的问题&#xff0c;如果您有打印机&#xff0c;并且已经成功和华为手机相连&#xff0c;在解决上就要容易很多。 具体操作如下&#xff1a; 选择文件 文件来源&#xff1a;华为手机上的文件可以来自多个应用&#xff0c;如图库、备忘录、文件管理等&#xf…

Python入门 2024/7/2 While

目录 while循环的基础应用 循环输出十次&#xff1a;键盘敲烂&#xff0c;月入过万 计算1~100的和 用while循环练习猜数字 while循环的嵌套应用 打印九九乘法表 输出不换行的功能 while循环的基础应用 格式&#xff1a; while 条件&#xff1a; 条件满足时&#xff0c…

leetcode刷题:vector刷题

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;leetcode刷题 1.只出现一次的数字 这道题很简单&#xff0c;我们只需要遍历一次数组即可通过异或运算实现。(一个数与自身异或结果为0&#xff0c;任何数与0异或还是它本身) class Solut…

Nuxt3 的生命周期和钩子函数(八)

title: Nuxt3 的生命周期和钩子函数&#xff08;八&#xff09; date: 2024/6/30 updated: 2024/6/30 author: cmdragon excerpt: 摘要&#xff1a;本文介绍了Nuxt3框架中的一些重要生命周期钩子&#xff0c;如prepare:types用于自定义TypeScript配置和类型声明&#xff0c;…