上位机图像处理和嵌入式模块部署(mcu的按键输入)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        做技术的同学,大部分都会把精力放在技术本身,却忽视了学的东西有什么实际的用途。就拿gpio来说,一般我们点灯也好、做输入也好,最多也就是当成一个实验demo在使用。可是大家有没有思考过,其实这样一个模块就已经是一个完整的输入、输出的系统了。简单的方面,我们可以做一个2-4译码器、3-8译码器,复杂一点的,我们可以做玩具、做一个设备改造的模块。

        很多同学不理解这个设备改造的模块,还是以卷帘门为例。过去卷帘门,一般就是向上按键按下去,卷帘门上升;向下按键按下去,卷帘门下降。如果我们想扩展一下这个功能,比如向上按下去的时候,为了安全需要,不仅卷帘门上升,还要有一个语音和红绿灯显示,这个时候就可以用这样一个模块来完成了。过去可能非标领域一般都是通过plc来完成,现在我们自己学会了mcu开发,就很自然地想通过mcu来完成。

1、按键输入

        按键输入是和按键输出对应的。按键输出,一般是led点亮、熄灭,又或者是蜂鸣器呼叫等等而按键输入,更多时候来自于外部的反馈,它表示使用的人员希望开启、使用或者是关闭某个功能。

2、main函数分析

        首先,我们还是看下整个demo的原貌,

int main(void)
{SystemClock_Config();LED_GPIO_Config();	 Key_GPIO_Config();while(1)                            {	   if( Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON  ){LED1_ON;}else{LED1_OFF;}}
}

        和之前相比较,整个流程多了两部分,第一个是添加Key_GPIO_Config,这个主要是告诉mcu,哪些按键希望被当做是key输入使用。第二个是Key_Scan,主要用于检测当前KEY1_PIN是不是已经被按下。如果是被按下了,那么LED1点亮,反之熄灭。

3、配置按键输入

        前面我们说过,要配置按键输入,需要看下Key_GPIO_Config是如何实现的。这部分关注的重点,集中在它和之前GPIO输出有什么差别。

void Key_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;KEY1_GPIO_CLK_ENABLE();GPIO_InitStructure.Pin = KEY1_PIN; GPIO_InitStructure.Mode = GPIO_MODE_INPUT; GPIO_InitStructure.Pull = GPIO_NOPULL;HAL_GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure);
}

        这里的KEY1_PIN是a0,不过不是重点。重点在于,当key处于输入状态的时候,它的mode和pull是不一样的。这部分,大家可以对比一下之前led的设置,这样看起来效果更好。

void LED_GPIO_Config(void)
{GPIO_InitTypeDef  GPIO_InitStruct;LED1_GPIO_CLK_ENABLE();GPIO_InitStruct.Pin = LED1_PIN;	GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;  GPIO_InitStruct.Pull  = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStruct);	LED_RGBOFF;
}

4、轮询检查key的状态

        较早读书的时候,我会认为轮询是非常低效的一种情况。但是到了mcu这里,轮询是非常常见的一种开发方式。特别是功能比较单一的时候,轮询其实很简洁、很鲁棒,几乎不会出错,

uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{			if(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == KEY_ON )  {return 	KEY_ON;	 }else{return KEY_OFF;}
}

5、测试方法

        之前野火提供的测试demo其实不是这样,它的case其实是依据它自身的开发板实现的。上面有现成的实体按键。这边的话,我们既然是用一个stm32f103的核心板进行测试,那么就用一根短接线进行测试好了。

        短接线的一头连接在a0上面,另外一头可以连接到电源3.3v,又或者是gnd上面。如果是连接在电源3.3v上面,c13应该亮起;反之则熄灭。通过这样的方式,也可以观察到按键输入的实际效果。另外还有一点要注意的是,我们核心板上面只有一个c13可以点灯,这和野火官方的demo不太一样,所以同样需要改造一下,

#define LED1_PIN                  GPIO_PIN_13                
#define LED1_GPIO_PORT            GPIOC                     
#define LED1_GPIO_CLK_ENABLE()   __HAL_RCC_GPIOC_CLK_ENABLE()

6、美中不足

        这边按键按下去的时候,正常情况下都会delay延时一下,一段事件之后确认按键是不是真的被按下。这样做的好处是防止误触、或者是抖动的发生。当然,我们也可以让测试做的更好玩一点,比如设置成闪烁的形式,

int main(void)
{SystemClock_Config();LED_GPIO_Config();	 Key_GPIO_Config();while(1)                            {	   if( Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON  ){HAL_Delay(1000);LED1_ON;HAL_Delay(1000);LED1_OFF;}else{LED1_OFF;}}
}

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

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

相关文章

正确认识IP地址和子网掩码的联系

IP地址和子网掩码是计算机网络中两个非常重要的概念,它们共同确定了设备在局域网中的地址以及该地址所属的子网,只要两者结合,就能确定唯一地址IP66_ip归属地在线查询_免费ip查询_ip精准定位平台。 IP地址是用于标识计算机网络中的每台设备的…

Ajax用法总结(包括原生Ajax、Jquery、Axois)

HTTP知识 HTTP(hypertext transport protocol)协议『超文本传输协议』,协议详细规定了浏览器和万维网服务器之间互相通信的规则。 请求报文 请求行: GET、POST /s?ieutf-8...(url的一长串参数) HTTP/1.1 请求头…

Mac安装 Intellij IDEA,亲测有效M1、M2可用

引言 最近开始学习使用spring boot写一个简单的后端项目,使用Intellij IDEA软件,Intellij IDEA为新用户提供了30天的免费试用。 方案 1.官网下载Intellij IDEA IntelliJ IDEA – the Leading Java and Kotlin IDE 或者直接网盘连接下载:…

第一份工资

当我拿到我人生的第一份工资时,那是一种难以言表的激动。我记得那个下午,阳光透过窗户洒在了我的办公桌上,我看着那张支票,心中满是欣喜和自豪。那是我独立生活的开始,也是我对自己能力的一种肯定。 我记得我是如何支配…

SQL注入:pikachu靶场中的SQL注入通关

目录 1、数字型注入(post) 2、字符型注入(get) 3、搜索型注入 4、XX型注入 5、"insert/update"注入 Insert: update: 6、"delete"注入 7、"http header"注入 8、盲…

【Linux安全】Firewalld防火墙

目录 一.Firewalld概述 二.Firewalld和iptables的关系 1.firewalld和iptables的联系 2.firewalld和iptables的区别 三.Firewalld区域 1.概念 2.九个区域 3.区域介绍 4.Firewalld数据处理流程 四.Firewalld-cmd命令行操作 1.查看 2.增加 3.删除 4.修改 五.Firewa…

arping 一键检测网络设备连通性(KALI工具系列二)

目录 1、KALI LINUX简介 2、arping工具简介 3、在KALI中使用arping 3.1 目标主机IP(win) 3.2 KALI的IP 4、操作示例 4.1 IP测试 4.2 ARP测试 4.3 根据存活情况返回 5、总结 1、KALI LINUX简介 Kali Linux 是一个功能强大、多才多艺的 Linux 发…

【机器学习与大模型】驱动下的电子商务应用

摘要: 随着信息技术的飞速发展,电子商务已经成为当今商业领域中最为活跃和重要的部分之一。而机器学习和大模型的出现,为电子商务带来了新的机遇和挑战。本文深入探讨了机器学习与大模型在电子商务中的应用,包括个性化推荐、精准营…

基于双向长短期记忆 Bi-LSTM 对消费者投诉进行多类分类

前言 系列专栏:【深度学习:算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对抗网络、门控循环单元、长短期记…

CSS transform 三大属性 rotate、scale、translate

transform 浏览器支持定义和用法translate位移函数rotate旋转函数scale缩放函数 浏览器支持 表格中的数字表示支持该属性的第一个浏览器版本号。 紧跟在 -webkit-, -ms- 或 -moz- 前的数字为支持该前缀属性的第一个浏览器版本号。 定义和用法 transform 属性向元素应用 2D…

在chrome中查找和验证xpath

1、快速获取XPath表达式 按F12打开chrome浏览器的开发者模式,点击选择光标,选择页面上的元素位置,在控制台右键选择Copy XPath,表达式就复制到粘贴板中了。 获取到的xpath路径://*[id"hotsearch-content-wrapper…

iOS App上架全流程及审核避坑指南

App Store作为苹果官方的应用商店,审核严格周期长一直让用户头疼不已,很多app都“死”在了审核这一关,那我们就要放弃iOS用户了吗?当然不是!本期我们从iOS app上架流程开始梳理,详细了解下iOS app上架的那些…

6.1 if语句

计算机语言和人类语言类似,人类语言是为了解决人与人之间交流的问题,而计算机语言是为了解决程序员与计算机之间交流的问题。程序员编写的程序就是计算机的控制指令,控制计算机的运行。借助于编译工具,可以将各种不同的编程语言的…

冯喜运:5.24黄金今日能否回调?日内国际黄金美原油操作策略

【黄金消息面分析】:在过去的半个世纪里,美国国债作为买入持有的投资手段,轻松超越了黄金。然而,如今债券作为终极避险资产的地位正面临着前所未有的挑战。传统上,投资者将美国国债视为一种超安全的投资,因…

【源码+文档+讲解】垃圾分类系统SSM

目 录 摘 要 前 言 第1章 概述 1.1 研究背景 1.2 研究目的 1.3 研究内容 4 第二章 开发技术介绍 5 2.1Java技术 6 2.2 Mysql数据库 6 2.3 B/S结构 7 2.4 SSM框架 8 第三章 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.2 系统…

Word让标题3现形

1 2这个玩意儿是管理样式(你找得我好惨啊啊啊啊) 3点推荐

基于Vue的图片文件上传与压缩组件的设计与实现

摘要 随着前端技术的发展,系统开发的复杂度不断提升,传统开发方式将整个系统做成整块应用,导致修改和维护成本高昂。组件化开发作为一种解决方案,能够实现单独开发、单独维护,并能灵活组合组件,从而提升开…

什么是线程安全?如何保证线程安全?

目录 一、引入线程安全 👇 二、 线程安全👇 1、线程安全概念 🔍 2、线程不安全的原因 🔍 抢占式执行(罪魁祸首,万恶之源)导致了线程之间的调度是“随机的” 多个线程修改同一个变量 修改…

ESP8266实现获取天气情况

利用太极创客提供的ESP8266 心知天气库获取天气情况并显示 心知天气库地址: ESP8266-心知天气: 本库主要功能为使用ESP8266物联网开发板通过心知天气 API 获取天气等信息。 clone到本地: git clone https://gitee.com/taijichuangke/ESP8266-Seniverse.git 安装该…

跟着Kimi学习结构化提示词:19套内置提示词都在这里了!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…