STM32利用标准库编写中断控制oled计数(proteus仿真)

先看先程序效果:每按动一次按钮OLED显示的值加1.这个按键的检测是用中断完成的。

这个工程是在上一个工程:的基础上来完成的,主要是在Mycode文件夹里面新建了两个文件来创建中断的功能方式如下:结构很简单,就是count.c里面的东西有点多而已。

下面的代码是count.c文件的全部代码:

#include "stm32f10x.h"                  // Device headeruint16_t num=0;void count_init(void)
{//  第一步:配置RCC,把涉及的外设时钟都打开RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, ENABLE);  //开启GPIOA的时钟RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, ENABLE);  //开始AFIO的时钟//  第二步:配置GPIO,选择我们的端口为输入模式GPIO_InitTypeDef GPIO_InitStruct;                 // 创建GPIO配置的结构体GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;          //  上拉输入模式GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14;  // 引脚2和7GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;       //  速率50MHZGPIO_Init(GPIOB, &GPIO_InitStruct);                // 端口初始化//  第三步:配置AFIO,选择我们用的这一路GPIO连接后面的EXTIGPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);//  第四步:配置EXTI,选择触发方式,比如上升沿,下降沿或者双边沿。还有选择触发方式:中断响应和事件响应EXTI_InitTypeDef EXTI_InitStruct;    // 创建外部中断初始化结构体EXTI_InitStruct.EXTI_Line = EXTI_Line14;               //使用2号线EXTI_InitStruct.EXTI_LineCmd = ENABLE;                 //使能中断(开启中断)EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;          // 中断触发EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;    // 下降沿触发EXTI_Init(&EXTI_InitStruct);   //初始化外部中断//  第五步:配置NVIC,选择中断的合适的优先级NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);    //设置NVIC分组。2位抢占,2为响应NVIC_InitTypeDef NVIC_InittypeDef;NVIC_InittypeDef.NVIC_IRQChannel = EXTI15_10_IRQn;   //NVIC通道选择9_5通道NVIC_InittypeDef.NVIC_IRQChannelCmd = ENABLE;      // 使能NVICNVIC_InittypeDef.NVIC_IRQChannelPreemptionPriority = 1;   //设置当前中断的抢占优先级 2NVIC_InittypeDef.NVIC_IRQChannelSubPriority = 1;   // 设置当前中断的响应优先级 2NVIC_Init(&NVIC_InittypeDef);//  最后通过NVIC,外部中断信号就能进入CPU了。}
//获取num的值的函数
uint16_t count_GET(void)
{return num;
}//  中断函数从启动文件中复制过来的,不能写错,错了就进不来了。
void EXTI15_10_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line14) == SET)   // 看看是不是由Line2过来的中断标志{num++;}EXTI_ClearITPendingBit(EXTI_Line14);   // 清楚line2的中断标志位
}

配置中断总共分了5步来完成的:

下面是count.h的内容,这个比较简单:

#ifndef __COUNT_H
#define __COUNT_Hvoid count_init(void);uint16_t count_GET(void);  //获取num值的函数#endif

剩下的就是main函数了,去调用这些个自己写的函数就可以了:

#include "stm32f10x.h"                  // Device header
#include "OLED.h"
#include "count.h"int main(void)
{OLED_Init();       //oled  屏幕初始化count_init();      //计数中断初始化OLED_ShowString(2,1, "Count:");  // 1行5列  显示countuint16_t num=0;while(1){num = count_GET();OLED_ShowNum(2,8,num, 5);}
}

接下来就是编译后,导入proteus中就能看到效果了。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaScript】面试手撕浅拷贝

【JavaScript】面试手撕浅拷贝 引入 浅拷贝和深拷贝应该是面试时非常常见的问题了,为了能将这两者说清楚,于是打算用两篇文章分别解释下深浅拷贝。 PS: 我第一次听到拷贝这个词,有种莫名的熟悉感,感觉跟某个英文很相似&#xff…

工业云组态:制造业数字化转型的关键

随着第四次工业革命的到来,数字化转型已成为制造业提升竞争力、实现可持续发展的核心驱动力。在这一背景下,HiWoo Cloud平台推出了工业云组态解决方案,旨在通过云计算、大数据和物联网等先进技术的融合,助力制造业实现智能化、高效…

力扣经典题目解析--最小覆盖子串

原题地址: . - 力扣(LeetCode) 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意: 对于 t 中重复字符,我们寻找…

刷题日记:面试经典 150 题 DAY3

刷题日记:面试经典 150 题 DAY3 274. H 指数238. 除自身以外数组的乘积380. O(1) 时间插入、删除和获取随机元素134. 加油站135. 分发糖果 274. H 指数 原题链接 274. H 指数 重要的是都明白H指数到底是是个啥。注意到如果将引用数从大到小排序,则对于…

考研复试指南

1. 记住,复试的本质不是考试,而是一场自我展示。 考研复试并非简单的知识考察,更是一场展示自我能力和潜力的机会。除了学科知识,考官更关注你的综合素质、学术兴趣和未来发展规划。因此,要保持自信,用更全…

机器学习模型总结

多元线性回归(linear regression) 自变量:连续型数据,因变量:连续型数据 选自:周志华老师《机器学习》P53-55 思想:残差平方和达到最小时的关系式子即为所求,残差平方和&#xff1a…

uniapp 部署h5,pdf预览

1.hubuilderx 打包h5。 2.上传部署包到服务器。 解压部署包:unzip h5.zip 。 3.nginx配置。 user root; worker_processes 1; #worker_cpu_affinity 0001 0010 0100 1000; #error_log logs/error.log; #error_log logs/error.log notice; error_log /var/l…

抖店怎么入驻?具体的入驻流程是什么?新手一看就会!

我是电商珠珠 新的一年开始了,又有不少新手小伙伴入驻了抖店。我做电商已经五年了,做抖店做了三年多,期间带着学员一起做店。所以对于他们所犯的这些操作错误,相信部分新手小伙伴也会犯错,为了让大家少走点弯路&#…

便携式气象站的工作原理

TH-BQX8便携式气象站是一种轻便、易于携带的气象监测设备,它能够快速部署在需要监测的区域,实时监测和记录气象环境数据。与全自动气象监测站相比,便携式气象站更加注重移动性和灵活性,适用于临时性的气象监测任务或特定区域的气象…

【大厂AI课学习笔记NO.58】(11)混淆矩阵

混淆矩阵(confusion matrix)—— 混淆矩阵(Confusion Matrix)是人工智能领域,特别是在机器学习和深度学习中,用于衡量分类模型性能的重要工具。它通过统计分类模型的真实分类与预测分类之间的结果&#xf…

12. Nginx进阶-Location

简介 Nginx的三大区块 在Nginx中主要配置包括三个区块,结构如下: http { #协议级别include /etc/nginx/mime.types;default_type application/octet-stream;log_format main $remote_addr - $remote_user [$time_local] "$r…

javascript中对包含关系判断介绍

本文将为您详细讲解 JavaScript 中对包含关系的判断,包括数组、字符串等,并提供相应的代码例子。 1. 数组包含关系判断 在 JavaScript 中,数组包含关系判断通常使用 Array.prototype.includes() 方法。这个方法返回一个布尔值,表示…