STM32屏幕计时器
目录
- 一、最终效果
- 二、实现思想
- 三、实现过程
- 3.1 屏幕显示
- 3.2 中断处理
一、最终效果
显示屏显示计时时间,格式为 00:00:00,依次为 时:分:秒,程序运行之后自动计时,当按下按键,计时清零,按下按键采用外部中断。
二、实现思想
调用lcd驱动代码让屏幕显示时间信息,
三、实现过程
3.1 屏幕显示
屏幕为SPI协议的128x128的LCD屏幕,查看原理图,找到对应接口


在STM32CubeMX中进行引脚配置
由于所调用的LCD驱动代码中引脚名称已经确定,不好直接更改代码,所以在配置引脚时,要将对应的引脚重命名

在对应引脚上右键改名,改名后👇

因为屏幕显示需要高的刷新率,需更改引脚输出速度为高速👇


按键设置为外部中断,配置按键为外部中断👇


STM32CubeMX中进行引脚配置👇

将lcd驱动代码放入工程文件对应位置👇


在工程文件中添加屏幕驱动程序 lcd.c👇

添加完要编译一下,将其关联文件添加进来,编译完后👇

给图片添加一个背景,利用图片取模软件将一个图片进行取模转换,生成一个十六进制元素的二维数组

生成一个.h文件并放入项目文件中,对lcd.h和刚生成的文件进行引用👇


在keil中打开生成的图模文件,保存数组名,下面会用👇

调用屏幕驱动代码中所定义好的一些函数对屏幕初始化和图片的显示👇

给计时器添加一个标题和时间显示区域👇

显示效果如下👇

Gui_DrawFont_GBK16字符串显示函数的第三个参数为一个字符串首地址,那如何让显示的字符串能够动起来呢??这时我们可以想到一个函数sprintf,这个函数可以对一个字符串进行格式化改变,时间一改变,就可以接着改变字符串内容。

接下来写计时的程序,逻辑很好理解,时间每增加1秒,接着就将改变好的字符串输出到屏幕如下👇

3.2 中断处理
找到中断向量表,追找到外部中断的处理函数



追到了外部中断回调函数👇

进行重写回调函数,每次按键触发的外部中断会回调以下重写的回调函数👇

在该函数中要对时、分、秒变量进行清零,同时更新屏幕显示,若不重新写回屏幕(没有上面的地183行代码),则会出现下面情况,按下按键后不能清零,而是从第一秒1秒开始计时👇🤔🤔🤔

🔍原因是:程序大部分时间都处于延时状态,而你在按下按键时是处在延时状态,延时状态程序收到中断信号,保存现场,进行中断处理函数的执行,此时虽然时间变量都给清零了,但是没有立即写回屏幕显示时间,中断返回,恢复现场,主程序又回到延时状态,此时程序执行到了下面这里👇

这样,秒数就会加 1 变成1,下面再写回屏幕就会显示1了😄
改正之后就没有问题了😆😆😆👇

相关文章:
STM32屏幕计时器
目录 一、最终效果二、实现思想三、实现过程3.1 屏幕显示3.2 中断处理 一、最终效果 显示屏显示计时时间,格式为 00:00:00,依次为 时:分:秒,程序运行之后自动计时,当按下按键,计时清零,按下按键采用外部中…...
MRI多任务技术及应用
目录 一、定量心血管磁共振成像(CMR)的改进方法二、磁共振多任务三、磁共振多任务的成像框架四、磁共振多任务的图像模型和采样和重建策略五、利用MR多任务进行快速三维稳态CEST(ss-CEST)成像5.1 利用MR多任务进行快速三维稳态CEST(ss-CEST)成像介绍5.2 …...
app自动化测试(Android)
Capability 是一组键值对的集合(比如:"platformName": "Android")。Capability 主要用于通知 Appium 服务端建立 Session 需要的信息。客户端使用特定语言生成 Capabilities,最终会以 JSON 对象的形式发送给 …...
【力扣每日一题】2023.9.3 消灭怪物的最大数量
目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目比较长,我概括一下就是有一群怪物,每只怪物离城市的距离都不一样,并且靠近的速度也不一样&#x…...
Python入门教程 | Python3 列表(List)
Python3 列表 序列是 Python 中最基本的数据结构。 序列中的每个值都有对应的位置值,称之为索引,第一个索引是 0,第二个索引是 1,依此类推。 Python 有 6 个序列的内置类型,但最常见的是列表和元组。 列表都可以进…...
Java低代码开发:jvs-list(列表引擎)功能(一)配置说明
在低代码开发平台中,列表页是一个用于显示数据列表的页面。它通常用于展示数据库中的多条记录,并提供搜索、排序和筛选等功能,以方便用户对数据进行查找和浏览。 jvs-list是jvs快速开发平台的列表页的配置引擎,它和普通的crud 具…...
UI自动化之关键字驱动
关键字驱动框架:将每一条测试用例分成四个不同的部分 测试步骤(Test Step):一个测试步骤的描述或者是测试对象的一个操作说明测试步骤中的对象(Test Object):指页面的对象或者元素对象执行的动…...
前端高性能渲染 — 虚拟列表
虚拟列表,实际上就是在首屏加载的时候,只加载可视区域内需要的列表项,当滚动发生时,动态通过计算获得可视区域内的列表项,并将非可视区域内存在的列表项删除。该技术是解决渲染大量数据的一种解决方法。 实现虚拟列表&…...
防水出色的骨传导耳机,更适合户外运动,南卡Runner Pro 4S体验
已经接近尾声的夏季依然酷热,对于运动爱好者来说,这确实也是锻炼的好时机,无论是一会儿就能大汗淋漓的HIIT,还是是各种清凉的水上运动,在健身的同时,戴上一副耳机享受音乐,都会更加痛快一些。 相…...
docker快速安装-docker一键安装脚本
1.下载/配置安装脚本 touch install-docker.sh #!/bin/bash #mail:ratelcloudqq.com #system:centos7 #integration: docker-latestclear echo "######################################################" echo "# Auto Install Docker …...
1584 - Circular Sequence (UVA)
题目链接如下: Online Judge 我的代码如下: #include <cstdio> #include <string.h> const int maxN 101;int T, len, pivot; char a[maxN];int main(){scanf("%d", &T);for(int i 0; i < T; i){scanf("%s"…...
Revit SDK:Selections 选择
前言 Revit 作为一款成熟的商业软件,它将自己的UI选择功能也通过 API 暴露出来。通过 API 可以按照特定的过滤规则来选择相应的元素,能力和UI基本上是等价的。这个 SDK 用四个例子展示了 API 的能力,内容如下。 内容 PickforDeletion 核心…...
K8s中的RBAC(Role-Based Access Control)
摘要 RBAC(基于角色的访问控制)是一种在Kubernetes中用于控制用户对资源的访问权限的机制。以下是RBAC的设计实现说明: 角色(Role)和角色绑定(RoleBinding):角色定义了一组权限&am…...
肖sir__设计测试用例方法之经验测试方法09_(黑盒测试)
设计测试用例方法之经验测试方法 一、经验的测试技术 (1)基于经验的测试技术之错误推测法 错误推测法也叫错误猜测法,就是根据经验猜想,已有的缺陷,测试经验和失败数据等可能有什么问题并依此设计测试用例 ࿰…...
Python爬虫:下载小红书无水印图片、视频
该代码只提供学习使用,该项目是基于https://github.com/JoeanAmier/XHS_Downloader的小改动 1.下载项目 git clone https://github.com/zhouayi/XHS_Downloader.git2.找到需要下载的文章的ID 写入main.py中 3.下载 python main.py最近很火的莲花楼为例<嘿嘿…...
【小沐学Unity3d】3ds Max 多维子材质编辑(Multi/Sub-object)
文章目录 1、简介2、精简材质编辑器2.1 先创建多维子材质,后指定它2.2 先指定标准材质,后自动创建多维子材质 3、Slate材质编辑器3.1 编辑器简介3.2 编辑器使用 结语 1、简介 多维子材质(Multi/Sub-object)是为一个模形࿰…...
# Go学习-Day8
文章目录 Go学习-Day8单元测试Goroutine进程和线程并发和并行Go协程和主线程MPG模式CPU相关协程并行的资源竞争 Go学习-Day8 个人博客:CSDN博客 单元测试 testing框架会将xxx_test.go的文件引入,调用所有TestXxx的函数 在cal_test.go文件里面写这个 …...
Maven编译java及解决程序包org.apache.logging.log4j不存在问题
1、首先新建一个文件夹,比如hello Hello里新建pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi…...
【小吉测评】高效简洁的数据库管控平台—CloudQuery
文章目录 🎄CloudQuery是什么🛸CloudQuery支持的数据源类型🍔CloudQuery社区地址🌺如何使用🛸参考官方文档🛸参考视频教程🎈点击免费下载🎈立即下载即可🎈使用服务器完成…...
获取微信小程序二维码的bug
项目场景: 获取微信小程序二维码的bug,原来测试一直是没问题的,上线后也没啥问题,这次突然爆错 问题描述 access_token已失效或已过期 {"errcode":40001,"errmsg":"invalid credential, access_token is invalid…...
基于单相全波晶闸管的基本交流电压控制器,带电阻负载(Simulink仿真实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
从Prompt到生产力:收藏这5个Agent工程要素,让大模型成为你的得力助手!
本文深入探讨了Agent在大模型应用中的工程要素,指出许多团队仅将Agent视为高级Prompt,导致工具调用脱节、状态丢失等问题。文章详细解析了函数/工具调用、工作流编排、RAG、记忆与状态管理、权限与安全边界这五个关键方面,强调了从Demo到产品…...
【智能体核心功能解析与落地实践指南】
智能体核心功能解析与落地实践指南 引言:智能体为何成为技术焦点 在人工智能技术飞速发展的今天,智能体(Agent)已经从学术概念走向产业应用的核心。无论是个人助手、企业自动化流程,还是复杂的决策支持系统,…...
CircuitPython HID实战:用Python轻松打造自定义键盘鼠标与数据记录仪
1. 项目概述与核心价值如果你玩过一些老游戏,或者用过一些专业软件,可能会遇到一个头疼的问题:你想用一个自制的硬件控制器来操作它,但软件根本不支持外接硬件,只认键盘鼠标。以前遇到这种情况,要么放弃&am…...
FPGA加速储层计算:DPRR设计与时序数据处理优化
1. 储层计算与FPGA加速概述储层计算(Reservoir Computing)作为递归神经网络(RNN)的一种高效训练范式,近年来在时序数据处理领域展现出独特优势。与传统RNN需要调整所有连接权重不同,储层计算的核心思想是仅…...
【使用高斯原理推导缆绳-拖曳伞系统的动态模型】使用拖缆系统进行微型空中飞行器的空中回收研究附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。 🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 &…...
OpenWebUI智能管道:连接本地AI模型与高性能推理后端
1. 项目概述:一个连接OpenWebUI与本地AI模型的智能管道最近在折腾本地大语言模型(LLM)的朋友,估计都绕不开OpenWebUI(原名Ollama WebUI)这个项目。它提供了一个极其美观、功能强大的Web界面,让我…...
基于ESP32与NeoPixel的智能灯光控制系统:从硬件选型到Web控制全解析
1. 项目概述:打造你的专属智能光效中心几年前,我为了给家里的节日装饰增添点科技感,琢磨着怎么让一串普通的LED灯带变得“听话”——能从手机或电脑上随意切换颜色和动画。当时市面上成品的智能灯带要么价格不菲,要么功能受限&…...
listmonk容器资源监控告警:资源使用率阈值
listmonk容器资源监控告警:资源使用率阈值 你是否遇到过listmonk邮件列表管理器在高负载时突然卡顿?或者因服务器资源耗尽导致邮件发送中断?本文将详细介绍如何为listmonk容器配置资源监控与告警阈值,帮助你提前识别并解决资源瓶…...
【2026年拼多多暑期实习/春招- 5月17日-第四题- 多多的道路修建Ⅱ】(题目+思路+JavaC++Python解析+在线测试)
题目内容 多多现在在负责多多乡村的修建。 道路修建问题可以看作是在一条直线上,有NNN个单位。 经过认真分析,他发现每一段路有两种修建的方案,分别为“修111”和“修22...
