【微处理器系统原理与应用设计第九讲】GPIO之按键控灯功能——按键控制灯进行亮灭转换的应用设计与程序分析

news2024/9/22 3:58:59

一、基础知识与明确

1、GPIO的有效电平

由按键结构决定,按键按下时输入为低电平,按键悬空时为输入为高电平,按键的输入给到GPIO的引脚(例如PC13)

2、条件控制语句

if(a):如果a为非0数字或字符那么就为真,if条件成立,反之不成立。

if(!a):如果!a为真,也就是a为0时,if条件成立,反之不成立。

if(a!=0):如果a不等于0,则使得if条件成立,反之不成立。等价于if(a)。

if(a==0): 如果a等于0,则使得if条件成立,反之不成立。等价于if(!a)。

3、单片机的执行速率一般为1s几十万次,按下按键的时长够走while循环很多次。

二、应用设计

1、功能需求

开发键控灯功能,即灯灭时,按一下按钮灯亮,灯亮时,按一下按钮灯灭。

2、设计思路

将PA5配置为数字推挽输出,PC13配置为数字输入。检测到PC13的输入从高电平变成低电平,PA5的值翻转。PA5初始输出为高电平。

3、软件流程图

4、主函数分析

int main()
{
	int btn_previous,btn_current; //定义变量
	LedInit(); //Led灯的初始化
	BtnInit(); //按钮的初始化
	btn_previous = 1; //初始化变量
	while(1){
		btn_current = BtnGet(); //获取当前按键的输入值
		if(!btn_current) //如果按键的输入为0,则进入第一层if语句
		{
			if(btn_previous) //如果之前的按键输入为1,则进入第二层if语句
				LedSw(); //Led灯进行翻转
		}
		btn_previous = btn_current; //更新按键的输入值
	}
	return 0;
		
}

(1) 初始化情况:没有按下按键的情况

(2)按下按键的瞬间

(3)继续按着按键的时候

(因为从按下到松开够while跑好多次,所以这种情况也要分析)

三、总结

1、本程序巧妙运用了btn_previous = btn_current指令来改变每次翻转后的按钮值来实现每按一次就运行一次LedSw,避免了在按的过程中程序一直跑while,而出现的亮灭快速交替的情况发生。

2、在程序内部没有由亮到灭和由灭到亮的操作之分,这是人为想要实现的目的,而在程序内部执行的只有LedSw的程序。 

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

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

相关文章

java使用jfreechart生成图表

java使用jfreechart生成图表 java使用jfreechart生成图表创建java项目创建图表类SerieCharts 测试效果柱状图折线图 java使用jfreechart生成图表 需求背景,公司有一个产品的外网体验地址,需要做一些数据监控,比如日活量、访问量等。因此需要生…

爆改YOLOv8|利用特征融合网络FFA-Net改进YOLOv8-模糊图片检测

1,本文介绍 FFA-Net(Feature Fusion Attention Network)主要用于图像去雾任务,其核心思想是通过特征融合注意力网络直接恢复无雾图像。它的架构包括以下三个关键组件: 特征注意力(Feature Attention, FA&a…

3280. 将日期转换为二进制表示

目录 一:题目: 二:代码: 三:结果 一:题目: 给你一个字符串 date,它的格式为 yyyy-mm-dd,表示一个公历日期。 date 可以重写为二进制表示,只需要将年、月…

android系统源码12 修改默认桌面壁纸--SRO方式

1、aosp12修改默认桌面壁纸 代码路径 :frameworks\base\core\res\res\drawable-nodpi 替换成自己的图片即可,不过需要覆盖所有目录下的图片。 由于是静态修改,则需要make一下,重新编译。 2、方法二Overlay方式 由于上述方法有…

浅谈架构实战

目录 背景 1 架构演变 2 如何实现高层的复用 2 中台产生案例 3 技术架构的核心要点 4 技术架构的高可用案例 背景 业务架构、数据架构、应用架构和技术架构它们是相互关联和相互支持的,共同构成了企业的总体架构,业务架构是源头,然后才…

Java 中常用内置接口函数

在 Java 8 及以后的版本中,引入了许多函数式编程的特性,其中最重要的就是内置的函数式接口。这些接口使得编写更简洁、可读性更强的代码成为可能。今天我将介绍四个常用的内置接口:Predicate、Function、Consumer 和 Supplier,并提…

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(4)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)-CSDN博客 这节就是真正的存储数据了 理清一下思路&am…

SprinBoot+Vue漫画天堂网的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

0x06 记录一次挖src的经历(xss漏洞)

漏洞平台:补天 - 企业和白帽子共赢的漏洞响应平台,帮助企业建立SRC 个人总结的挖洞流程: 1)先用工具信息收集一波 我这里先用灯塔收集一下目标资产 2)然后用漏洞扫描工具扫描一波 我这里用Acunetix进行扫描 因为工具…

驱动(RK3588S)第九课时:多节点驱动与函数接口

目录 一、多节点概念1、所用到的结构体说明2、函数接口主要是read和write函数2.1、把应用层的数据拷贝给底层2.2、把应用层的数据拷贝给底层 3、应用层的read和write函数4、底层的read和write函数二、ioctl控制命令接口1、概念2、函数介绍应用层和驱动层 三、代码与现象1.编写L…

三相直流无刷电机(BLDC)控制算法实现:BLDC有感启动算法思路分析

一枚从事路径规划算法、运动控制算法、BLDC/FOC电机控制算法、工控、物联网工程师,爱吃土豆。如有需要技术交流或者需要方案帮助、需求:以下为联系方式—V 方案1:通过霍尔传感器IO中断触发换相 1.1 整体执行思路 霍尔传感器U、V、W三相通…

使用 nuxi preview 命令预览 Nuxt 应用

title: 使用 nuxi preview 命令预览 Nuxt 应用 date: 2024/9/8 updated: 2024/9/8 author: cmdragon excerpt: 摘要:本文介绍了如何使用nuxi preview命令预览Nuxt.js应用,包括安装和准备环境、启动预览服务器的步骤,以及如何指定根目录和使用自定义.env文件等高级用法。通…

【H2O2|全栈】关于HTML(5)HTML基础(四)

HTML基础知识 目录 HTML基础知识 前言 准备工作 标签的具体分类(四) 本文中的标签在什么位置中使用? 表单(一) 表单标签 输入域标签 预告和回顾 后话 前言 本系列博客将分享HTML相关知识点。 这一期博客&…

使用 DBeaver 创建 MySQL 数据库

文章目录 创建数据库创建用户 创建数据库 1.在【数据库】上点右键,然后选择【新建 数据库】 2.输入 数据库名,点击确定 这样,数据库就创建好了 创建用户 1.在【用户】上点右键,然后选择【新建 用户】 在属性这里,输入…

基于yolov8的血细胞检测计数系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的血细胞检测与计数系统是一种利用深度学习技术,特别是YOLOv8目标检测算法,实现高效、准确血细胞识别的系统。该系统能够自动识别并计数图像或视频中的血细胞,包括红细胞、白细胞和血小板等,为医疗诊断提…

揭开面纱--机器学习

一、人工智能三大概念 1.1 AI、ML、DL 1.1.1 什么是人工智能? AI:Artificial Intelligence 人工智能 AI is the field that studies the synthesis and analysis of computational agents that act intelligently AI is to use computers to analog and instead…

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之…

WSL 下的 CentOS 装 Docker

WSL 下的 CentOS 装 Docker 卸载旧版本安装前的准备工作1. 安装 yum-utils2. 添加阿里云的 yum 镜像仓库3. 快速生成 Yum 缓存 安装Docker启动docker运行 hello-world卸载 Docker 引擎参考资料 卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ d…

论文阅读_检索增强生成 RAG 综述

英文名称: Retrieval-Augmented Generation for Large Language Models: A Survey 中文名称: 大型语言模型的检索增强生成:一项调查 链接: http://arxiv.org/abs/2312.10997v5 作者: Yunfan Gaoa, Yun Xiongb, Xinyu Gaob, Kangxiang Jiab, Jinliu Panb, Yuxi Bic, …

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…