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);              // 延时2msdisplay_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); // 十位置1HAL_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); // 十位置0HAL_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://xiahunao.cn/news/2809130.html

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

相关文章

【C++】多态概念(入门)

介绍: 多态的概念:通俗来说,多态就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。比如扫红包操作,同样是扫码动作,不同的用户扫 得到的不一样的红包&#xff0…

五.AV Foundation 视频播放 - 标题和字幕

引言 本篇博客主要介绍使用AV Foundation加载视频资源的时候,如何获取视频标题,获取字幕并让其显示到播放界面。 设置标题 资源标题的元数据内容,我们需要从资源的commonMetadata中获取,在加载AVPlayerItem的时候我们已经指定了…

03|JOIN关联查询优化

1. mysql关联算法 1.1 嵌套循环连接 Nested-Loop Join(NLJ) 算法 先去t2表(驱动表)拿一行数据,然后去t1表(被驱动表)做关联, 关联之后把结果集存下来最后返回. 1.2 基于块的嵌套循环连接 Block Nested-Loop Join(BNL)算法 1.把 t…

Vulnhub靶机:DC8

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.15) 靶机:DC8(10.0.2.61) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entry/dc-8,367/…

Linux字符设备驱动中同类型多设备节点的创建---一个驱动程序支持多个同类型设备

文章目录 前言1 代码解析1.1 驱动层1.2 应用层 2 运行结果总结 前言 本期分享的内容相对比较简单,那就是同时注册多个同类型的字符设备驱动,那么这样我们就可以同时支持多个同类型的设备了!下面来带大家看一下: 1 代码解析 1.1 …

基于springboot+vue的精准扶贫管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

从Unity到Three.js(outline 模型描边功能)

指定模型高亮功能,附带设置背景颜色,获取随机数方法。 百度查看说是gltf格式的模型可以携带PBR材质信息,如果可以这样,那就完全可以在blender中配置好材质导出了,也就不需要像在unity中调整参数了。 import * as THRE…

Autosar 开篇

背景 AUTOSAR(Automotive Open System Architecture)是一个跨汽车行业的标准化软件架构,旨在促进汽车电子系统的开发和部署。下面是AUTOSAR发展的一些关键点: 起源和背景: AUTOSAR最初于2003年由汽车制造商宝马、戴姆…

使用GPT生成python图表

首先,生成一脚本,读取到所需的excel表格 import xlrddata xlrd.open_workbook(xxxx.xls) # 打开xls文件 table data.sheet_by_index(0) # 通过索引获取表格# 初始化奖项字典 awards_dict {"一等奖": 0,"二等奖": 0,"三等…

MCU多核异构通信原理

摘要: 本文结合瑞萨RZ/G2L 多核处理器,给大家讲述一下多核异构设计及通信的原理。 随着电子技术的不断发展,以及市场需求的日益增长,嵌入式系统不仅要求执行复杂的控制任务,还需要实时地采集和处理数据。 为了满足这…

HarmonyOS开发行业前景就业分析与实例解析

HarmonyOS的简介 鸿蒙系统(HarmonyOS)是华为公司自主研发的一种全场景分布式操作系统,旨在为各种设备提供统一的开发和运行环境。它的编程基础主要建立在多种技术和语言之上,包括鸿蒙系统的核心框架和应用程序开发框架。 本章将…

Easy-Jmeter: 性能测试平台

目录 写在开始1 系统架构2 表结构设计3 测试平台生命周期4 分布式压测5 压力机管理6 用例管理6.1 新增、编辑用例6.2 调试用例6.3 启动测试6.4 动态控量6.5 测试详情6.6 环节日志6.7 实时数据6.8 测试结果 7 测试记录7 用例分析8 系统部署8.1普通部署8.2容器化部署 写在最后 写…

【技术分享】使用nginx完成动静分离➕集成SpringSession➕集成sentinel➕集成seata

🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于技术点的相关分享吧 目录 🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 一、 使用nginx完成动静分离 1.下载…

【数据集】世界水评估方案指标:灌溉面积/灌溉用水等

世界水评估方案指标 概述(Overview)数据下载(Data Download)案例1:F. Irrigated lands案例2:G. Irrigated water use参考World Water Development Report II-Indicators for World Water Assessment Programme 概述(Overview) 在关于全球环境变化和可持续发展的辩论…

微信小程序(1)- 小程序开发工具

1. 小程序开发工具下载 地址:官网 微信小程序账号只要开发者满足开发资质都可以进行注册,并且会获得对应的 开发者 ID。一个完整的开发者 ID 由 小程序 ID(AppID)和一个 小程序密钥(AppSecret)组成。小程…

JAVA算法和数据结构

一、Arrays类 1.1 Arrays基本使用 我们先认识一下Arrays是干什么用的,Arrays是操作数组的工具类,它可以很方便的对数组中的元素进行遍历、拷贝、排序等操作。 下面我们用代码来演示一下:遍历、拷贝、排序等操作。需要用到的方法如下 public…

嵌入式学习第二十天!(进程)

进程基本概念: 1. 进程: 程序:存放在外存中的一段数据组成的文件 进程:是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡 2. 进程相关命令: 1. top: 动态查看当前系统中的所有进程信息…

HarmonyOS—添加/删除Module

Module是应用/服务的基本功能单元,包含了源代码、资源文件、第三方库及应用/服务配置文件,每一个Module都可以独立进行编译和运行。一个HarmonyOS应用/服务通常会包含一个或多个Module,因此,可以在工程中创建多个Module&#xff0…

docker部署grafana+zabbix监控

1. grafana介绍 Grafana 是一个开源的数据可视化工具,它可以帮助用户将数据源中的数据进行图形化展示和实时监控,以便于用户能够更加直观地理解数据。Grafana 支持多种数据源,包括 Graphite、Elasticsearch、InfluxDB、Prometheus 等&#x…

SpringBoot -【BeanFactory】基础使用及应用场景

1.介绍 在 Spring 框架中,BeanFactory 是 Spring IoC 容器的核心接口,负责管理 bean 的创建、配置和装配。它是 Spring IoC 容器的基础。BeanFactory 接口定义了一系列方法,用于管理和访问容器中的 bean 对象。 BeanFactoryAware 用于在 Sp…