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

news2024/11/18 2:52:31

文章目录

  • 需求
  • 一、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]){//过去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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分析Profiler Timeline中的算子序列,通过寻找频繁项集的办法,得到TOPK可融合的算子序列

分析Profiler Timeline中的算子序列,通过寻找频繁项集的办法,得到TOPK可融合的算子序列 1.相关链接2.代码【仅分析带通信算子的Pattern】3.在实际工程中发现 [all_gather, matrix_mm_out]频率最高4.[Ascend MC2](https://gitee.com/ascend/MindSpeed/blob/master/docs/features…

路径规划之基于二次规划的路径平滑Matlab代码

参考: 自动驾驶决策规划算法第二章第二节(上) 参考线模块_哔哩哔哩_bilibili 自动驾驶决策规划算法第二章第二节(下) 参考线代码实践_哔哩哔哩_bilibili QP函数,二次规划的逻辑 function [smooth_path_x,smooth_path_y] QP(path_x, path_y, w_cost_s…

docker也能提权??内网学习第6天 rsync未授权访问覆盖 sudo(cve-2021-3156)漏洞提权 polkit漏洞利用

现在我们来说说liunx提权的操作:前面我们说了环境变量,定时任务来进行提权的操作 rsync未授权访问覆盖 我们先来说说什么是rsync rsync是数据备份工具,默认是开启的873端口 我们在进行远程连接的时候,如果它没有让我们输入账号…

从海上长城到数字防线:视频技术在海域边防现代化中的创新应用

随着全球化和科技发展的加速,海域安全问题日益凸显其重要性。海域边防作为国家安全的第一道防线,其监控和管理面临着诸多挑战。近年来,视频技术的快速发展为海域边防场景提供了新的解决方案,其高效、实时、远程的监控特点极大地提…

【优化论】基本概念与细节

优化论(Optimization Theory)是数学和计算机科学中一个重要的分支,旨在寻找给定问题的最优解。这个领域的应用非常广泛,从经济学、工程学到机器学习、金融等各个领域都有其踪迹。我们可以通过一系列直观的比喻来理解优化论的基本概…

数据库之SQL(二)

目录 一、简述SQL中如何将“行”转换为“列” 二、简述SQL注入 三、如何将一张表的部分数据更新到另一张表 四、WHERE和HAVING的区别 一、简述SQL中如何将“行”转换为“列” 我们以MySQL数据库为例,来说明行转列的实现方式。 首先,假设我们有一张分…

2024亚太杯中文赛数学建模B题完整论文讲解(含每一问python代码+结果+可视化图)

大家好呀,从发布赛题一直到现在,总算完成了2024 年第十四届 APMCM 亚太地区大学生数学建模竞赛B题洪水灾害的数据分析与预测完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人…

【JavaWeb程序设计】JSP编程II

目录 一、输入并运行下面的import_test.jsp页面 1.1 代码运行结果 1.2 修改编码之后的运行结果 二、errorPage属性和isErrorPage属性的使用 2.1 下面的hello.jsp页面执行时将抛出一个异常,它指定了错误处理页面为errorHandler.jsp。 2.1.2 运行截图 2.2 下面…

罗剑锋的C++实战笔记学习(一):const、智能指针、lambda表达式

1、const 1)、常量 const一般的用法就是修饰变量、引用、指针,修饰之后它们就变成了常量,需要注意的是const并未区分出编译期常量和运行期常量,并且const只保证了运行时不直接被修改 一般的情况,const放在左边&…

政安晨【零基础玩转各类开源AI项目】基于Ubuntu系统部署ComfyUI:功能最强大、模块化程度最高的Stable Diffusion图形用户界面和后台

目录 ComfyUI的特性介绍 开始安装 做点准备工作 在Conda虚拟环境中进行 依赖项的安装 运行 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 零基础玩转各类开源AI项目 希望政安晨的博客能够对您有所裨益,如有不足之处&…

2024年江苏省研究生数学建模竞赛B题人造革性能优化设计研究论文和代码

经过不懈的努力, 2024年江苏省研究生数学建模竞赛B题人造革性能优化设计研究论文和代码已完成,代码为C题全部问题的代码,论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解(问题1模型的建立和求解、问题2模…

适用于 Windows的 5 个最佳 PDF 转 Word 转换器

PDF 文件是共享文档的首选格式,但是,此类文件存在限制,使其难以修改或编辑。因此,您可能会发现自己正在寻找一种将 PDF 文件转换为 Word 或其他可编辑格式的方法。 有许多不同的 PDF 转换器,每个转换器的功能略有不同…

KDTree 简单原理与实现

介绍 K-D树是一种二叉树的数据结构,其中每个节点代表一个k维点,可用于组织K维空间中的点,其中K通常是一个非常大的数字。二叉树结构允许对多维空间中的点进行非常有效的搜索,包括最近邻搜索和范围搜索,树中的每个非叶…

嵌入式系统中状态机实现详解

嵌入式开发中系统经常处于某种状态,如何处理呢?接下来分析一下,状态机的实现无非就是 3 个要素:状态、事件、响应。转换成具体的行为就 3 句话。 发生了什么事? 现在系统处在什么状态? 在这样的状态下发生了这样的事,系统要干什么? 用 C 语言实现状态机主要有 3 种方法…

机器学习——岭回归

1、岭回归与线性回归的区别 岭回归(Ridge Regression)和线性回归(Linear Regression)都是用于回归分析的统计方法,但它们在处理方式和应用场景上有一些关键的区别: a)基本概念 线性回归:目标是…

帕金森病患者在选择运动疗法时应该注意哪些事项?

帕金森病患者在选择运动疗法时,应该遵循以下几点注意事项: 个性化运动处方:根据患者的病情、年龄、健康状况、以往运动能力等因素,制定个体化的运动处方。 避免运动负荷过大:运动时间不宜过长,注意控制心率…

【优化论】约束优化算法

约束优化算法是一类专门处理目标函数在存在约束条件下求解最优解的方法。为了更好地理解约束优化算法,我们需要了解一些核心概念和基本方法。 约束优化的核心概念 可行域(Feasible Region): 比喻:想象你在一个园艺场…

量化机器人:金融市场的智能助手

引言 想象一下,在繁忙的金融市场中,有一位不知疲倦、冷静客观的“超级交易员”,它能够迅速分析海量数据,精准捕捉交易机会,并自动完成买卖操作。这位“超级交易员”不是人类,而是我们今天要聊的主角——量…

SSM家庭理财个人理财系统-JAVA【数据库设计、源码、开题报告】

第一章 绪论 1.1 课题背景、目的及意义 从 20 世纪末以来,在全球经济日趋一体化的背景之下,中国经济也得到了飞速的发展,家庭收入也快速增长。居民的消费结构发生了巨大变化,购置房产、旅游、汽车消费、教育等成为居民消费重点。…

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

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