stm32利用CubeMX实现外部中断触发数码管加减数

首先打开proteus绘制电路图,如下:

然后打开CubeMX,配置晶振和GPIO:

接下来就是生成keil工程文件,用keil打开。

新建一个desplay.h文件:下面是全部代码

#ifndef __DESPLAY_H
#define __DESPLAY_H
#endif

#include "main.h"

// 数码管显示函数
void display_all(uint8_t num);

// 实现数码管断码显示
void display(uint16_t shu);

// 实现数码管清屏
void display_clear(void);

// 实现数码管位选选通
void bitset(uint16_t wei);

再新建一个desplay.c文件:下面是全部代码

#include "desplay.h"

uint8_t duan[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};


// 数码管显示函数
void display_all(uint8_t num)
{
    display_clear();  //清屏
    bitset(1);           // 选十位
    display(duan[num/10]);  // 显示十位
    HAL_Delay(2);              // 延时2ms
    
    display_clear();         //清屏
    bitset(2);                  //选个位
    display(duan[num%10]);  // 显示个位
    HAL_Delay(2);               //延时2ms
}

// 实现数码管断码显示
void display(uint16_t shu)
{
    GPIOA->ODR = shu;
}

// 实现数码管清屏
void display_clear(void)
{
    GPIOA->ODR = 0XFF;
}

// 实现数码管位选选通
void bitset(uint16_t wei)
{
    // 当位为1时,十位数码管选通; 当位为2时,个位数码管选通
    if(wei == 1)
    {
        HAL_GPIO_WritePin(shiwei_GPIO_Port, shiwei_Pin, GPIO_PIN_SET); // 十位置1
        HAL_GPIO_WritePin(gewei_GPIO_Port, gewei_Pin, GPIO_PIN_RESET); // 个位置0
    }
    if(wei == 2)
    {
        HAL_GPIO_WritePin(shiwei_GPIO_Port, shiwei_Pin, GPIO_PIN_RESET); // 十位置0
        HAL_GPIO_WritePin(gewei_GPIO_Port, gewei_Pin, GPIO_PIN_SET); // 个位置1
    }
}

再新建一个button.h文件:代码如下

#ifndef __BUTTON__H
#define __BUTTON__H

#endif

#include "main.h"


//  中断回调函数  从stm32f1xx_it.c 中赋值过来的
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);

//  外部中断产生的计数值获取函数
int button_get(void);

再新建一个button.c文件:代码如下

#include "button.h"

int button_flag = 0;


//  外部中断产生的计数值获取函数
int button_get(void)
{
    if(button_flag == 100)
    {
        button_flag = 0;
    }
    if(button_flag == -1)
    {
        button_flag = 99;
    }
    
    return button_flag;  // 返回按键中断的计数值
}

//  中断回调函数  从stm32f1xx_it.c 中赋值过来的
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if(HAL_GPIO_ReadPin(key1_GPIO_Port, key1_Pin) == GPIO_PIN_RESET)
    {
        button_flag++;
        //while(HAL_GPIO_ReadPin(key1_GPIO_Port, key1_Pin) == GPIO_PIN_RESET);  //由于这是中断下降沿触发,所以这个等待可以不用了
    }
    
    if(HAL_GPIO_ReadPin(key2_GPIO_Port, key2_Pin) == GPIO_PIN_RESET)
    {
        button_flag--;
        //while(HAL_GPIO_ReadPin(key2_GPIO_Port, key2_Pin) == GPIO_PIN_RESET);  //由于这是中断下降沿触发,所以这个等待可以不用了
    }
}

 在工程文件夹里新建一个Mycode文件夹,把先前的四个文件放到这个文件夹中,将文件夹添加到工程中:

这样后就能在工程左侧目录中看到自己新添加的文件夹了 ,双击各个问价夹就能添加新建的文件了,如图:

加入desplay.c和button.c文件

最后就是要在main函数中添加代码了:

第一处就是导入文件:

#include "desplay.h"
#include "button.h"

第二处需要添加的代码:

uint8_t num;  //定义num变量

while循环中添加两句:

                num = button_get();
                 display_all(num);

至此所有的代码都修改完成,生成hex文件导入到proteus中,就能模拟两个按键控制数码管加减数字了。

至此整个过程还是很简单的,感觉比51单片机还要简单不少,好多代码根本就不用自己写!

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

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

相关文章

2024全国水科技大会暨土壤和地下水污染防治与修复技术创新论坛(七)

论坛召集人:李 辉 上海大学环境与化学工程学院教授 一、会议背景 十四五”时期,我国生态文明建设进入以减污降碳协同增效为重点战略方向,促进经济社会发展全面绿色转型,实现生态环境质量改善由量变到质变的关键时期。聚焦土壤与地…

Leetcode3039. 进行操作使字符串为空

Every day a Leetcode 题目来源:3039. 进行操作使字符串为空 解法1:哈希 排序 操作的定义:每次操作依次遍历 ‘a’ 到 ‘z’,如果当前字符出现在 s 中,那么删除出现位置最早的该字符(如果存在的话&…

从ViT到MAE,transformer架构改造Autoencoder

Vision Transformer (ViT) 论文出处[2010.11929] An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale (arxiv.org) 传统的卷积神经网络(CNN)在图像分类、目标检测等任务上表现出色,但其局限性也逐渐显露&#xf…

《Docker 简易速速上手小册》第3章 Dockerfile 与镜像构建(2024 最新版)

文章目录 3.1 编写 Dockerfile3.1.1 重点基础知识3.1.2 重点案例:创建简单 Python 应用的 Docker 镜像3.1.3 拓展案例 1:Dockerfile 优化3.1.4 拓展案例 2:多阶段构建 3.2 构建流程深入解析3.2.1 重点基础知识3.2.2 重点案例:构建…

GO-ICP的使用(一)

一、代码下载以、修改以及使用 下载: 链接:yangjiaolong/Go-ICP: Implementation of the Go-ICP algorithm for globally optimal 3D pointset registration (github.com) 解压之后 : 首先visual studio项目,配置好PCL环境&…

计算机组成原理(13)-----硬件多线程

目录 1.细粒度多线程 2.粗粒度多线程 3.同时多线程(SMT) 在不支持硬件多线程的处理器中,若要进行线程的切换,就需要保存和恢复线程的运行环境(否则会出现数据覆盖引起的错误)。 但在支持硬件多线程的处…

五篇保姆级分类诊断教程,数据特征提取+优化算法+机器学习

今天水一期,总结一下以前写过的几篇保姆级故障诊断。学会这几篇,机器学习的故障诊断你就基本合格了! 本期内容:基于SABO-VMD-CNN-SVM的分类诊断。 依旧是采用经典的西储大学轴承数据。基本流程如下: 首先是以最小包络熵…

Github代码仓库SSH配置流程

作者: Herman Ye Auromix 测试环境: Ubuntu20.04 更新日期: 2024/02/21 注1: Auromix 是一个机器人爱好者开源组织。 注2: 由于笔者水平有限,以下内容可能存在事实性错误。 相关背景 在为Github代码仓库配…

RocketMQ快速实战以及集群架构原理详解

RocketMQ快速实战以及集群架构原理详解 组成部分 启动Rocket服务之前要先启动NameServer NameServer 提供轻量级Broker路由服务,主要是提供服务注册 Broker 实际处理消息存储、转发等服务的核心组件 Producer 消息生产者集群,通常为业务系统中的一个功…

基础光学系列:(四)机器视觉中的光圈、焦距与景深调整技巧

控制景深和成像质量是摄影和机器视觉领域的关键技能。通过调整光圈、焦距、和感光元件(如数码相机的图像传感器)的位置,可以精细地控制图像的外观。下面是如何通过这些参数来控制景深和提高成像质量的一些建议: 调整光圈来控制景…

学生管理系统简易版(C语言)

简介: 有登录功能,这个功能是利用文本文件来保存用户名和密码彩色的菜单页面多种功能较好的排版含有文件夹图标 目录展示: 页面展示: 下载链接:https://download.csdn.net/download/liyankang/88873436 度盘链接&…

BUU [GWCTF 2019]mypassword

BUU [GWCTF 2019]mypassword 开题,是个登录界面,也有注册功能 首先我们注册个号看看。然后登录 提示不是SQL注入 有反馈界面,反馈应该管理员会看,可能存在XSS。 查看源码,注释给出了后端源码,对XSS进行了…

GEE数据集——GLANCE 全球土地覆被训练数据集

GLANCE 全球土地覆被训练数据集 GLanCE 培训数据集向公众开放,专为区域到全球土地覆被和土地覆被变化分析而设计。该数据集的中等空间分辨率为 30 米,时间跨度为 1984 年至 2020 年,在地理和光谱上代表了全球所有生态区域。每个训练单元提供多…

极狐GitLab 使用指南:如何使用极狐GitLab 进行第一次 git commit

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 进行第一次 Git 提交 本教程包含一些关于 Git 的工作原理&…

Escalate_Linux-环境变量劫持提权(5)

环境变量劫持提权 在Shll输入命令时,Shel会按PAH环境变量中的路径依次搜索命令,若是存在同名的命令,则执行最先找到的,若是PATH中加入了当前目录,也就是“”这个符号,则可能会被黑客利用,例如在…

RM电控讲义【HAL库篇】(二)

8080并口模式是一种常见的计算机接口模式,主要用于LCD(液晶显示屏)模块。 在8080并口模式中,通信端口包括多种信号线,用于实现数据的读写和控制功能。主要的信号线包括: CS(片选信号&#xff…

ArcgisForJS如何将ArcGIS Server发布的点要素渲染为热力图?

文章目录 0.引言1.ArcGIS创建点要素2.ArcGIS Server发布点要素3.ArcgisForJS将ArcGIS创建的点要素渲染为热力图 0.引言 ArcGIS For JS 是一个强大的地理信息系统(GIS)工具,它允许开发者使用 JavaScript 语言来创建各种 GIS 应用。ArcGIS Ser…

Java——防止SQL注入的几种策略

一、什么是SQL注入 SQL注入(SQL Injection)是一种常见的网络安全漏洞,它允许攻击者通过操纵应用程序的输入来执行恶意的SQL查询。这种漏洞发生在应用程序没有正确验证、过滤或转义用户提供的输入数据时。攻击者可以利用这个漏洞来执行未经授…

Flask基础学习3

参考视频:41-【实战】答案列表的渲染_哔哩哔哩_bilibili flask 实现发送短信功能 pip install flask-mail # 安装依赖 我这里用登录的网易邮箱获取的授权码(登录QQ邮箱的授权码总是断开收不到邮件), # config # config mail MAI…

Python入门必学:单引号、双引号与三引号的差异与应用

Python入门必学:单引号、双引号与三引号的差异与应用 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 👈 希望得…
最新文章