【ARM 裸机】按键输入
本节学习按键输入,先拷贝上一节工程文件,

1、驱动编写
新建 key 的 .h 和 .c 文件;

再查看一下硬件原理图如下;


由此可知,KEY0 按键接在 UART1_CTS 引脚上,默认情况下为高电平,按键按下为低电平;和之前不同的是,GPIO 由输出变成了输入;

参考数据手册;


定义读取按键值的函数;
// 读取按键值
int read_key(void)
{int ret = 0;ret = ((GPIO1->DR) >> 18) & 0x1;return ret;
}int key_getvalue(void)
{int ret = 0;static unsigned char release = 1; // 为 1 表示按键释放if((release == 1) && (read_key() == 0)) // 按键按下{delay_ms(10);release = 0;if(read_key() == 0) // 按键有效{ret = KEY0_VALUE;}}else if(read_key() == 1) // 没有按下{ret = KEY_NONE;release = 1;}return ret;
}
在头文件中声明;

2、编写 main.c
#include "main.h"
#include "bsp_clk.h"
#include "bsp_delay.h"
#include "bsp_led.h"
#include "bsp_beep.h"
#include "bsp_key.h"int main(void)
{int i = 0;unsigned char led_state = OFF;unsigned char beep_state = OFF;int keyvalue = 0;clk_enable();led_init();beep_init();key_init();while(1){// 按键处理控制蜂鸣器keyvalue = key_getvalue();if(keyvalue) // 如果按键值为正则是有效的按键值{switch (keyvalue){case KEY0_VALUE:beep_state = !beep_state;beep_switch(beep_state); break;}}i++;if(i == 50) // 50*10=500{i = 0;led_state = !led_state;led_switch(LED0,led_state);}delay_ms(10);}return 0;
}
3、修改部分内容
首先就是修改头文件包含路径;

修改 Makefile 文件;

4、编译烧写


下载之后 led 亮了一次,就不亮了,key0 是可以控制 beep 的,那么肯定是 led 相关的地方出了问题,找到 led 控制的函数,才发现参数写错了,按照以下修改;

再次编译工程,烧写之后功能正常了;
I.MX6ULL_key
5、回顾,问题解决
解决另一个问题,在【ARM 裸机】NXP 官方 SDK 使用 这一小节中,加上清除 bss 段的代码是不会运行的,所以清除 bss 段的代码被注释掉了,这是因为对 32 位的芯片来说,是 4 字节访问的,查看反汇编文件可知;

_bss_start 的起始地址是 0x87800271,这是不能被 4 整除的,所以要对 _bss_start 进行 4 字节对齐操作;

再来看一下反汇编文件;

编译工程烧写之后正常运行。
相关文章:
【ARM 裸机】按键输入
本节学习按键输入,先拷贝上一节工程文件, 1、驱动编写 新建 key 的 .h 和 .c 文件; 再查看一下硬件原理图如下; 由此可知,KEY0 按键接在 UART1_CTS 引脚上,默认情况下为高电平,按键按下为…...
站在ESG“20+”新起点上,看中国ESG先锋探索力量
全链减碳、建设绿色工厂、打造零碳产品、守护生物多样性、向受灾群众捐助……不知你是否察觉,自“双碳”目标提出以来,一股“可持续发展热潮”正覆盖各行各业,并且渗透到我们衣食住行的方方面面。在资本市场,ESG投资热潮更是席卷全…...
【CTF Web】CTFShow web4 Writeup(SQL注入+PHP+字符型注入)
web4 1 管理员阿呆又失败了,这次一定要堵住漏洞 解法 注意到: <!-- flag in id 1000 -->拦截很多种字符,连 select 也不给用了。 if(preg_match("/or|\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\|select/i",$id)){die(&q…...
软件设计师备考 | 案例专题之数据库设计 概念与例题
相关概念 关注上图中的两个部分: 概念结构设计 设计E-R图,也即实体-联系图。 工作步骤:选择局部应用、逐一设计分E-R图、E-R图合并。进行合并时,它们之间存在的冲突主要有以下3类: 属性冲突。同一属性可能会存在于…...
【全网最全】2024电工杯数学建模A题成品论文+前三题完整解答matlab+py代码等(后续会更新成品论文)
您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片链接,那是获取资料的入口! 【全网最全】2024电工杯数学建模A题成品论文前三题完整解答matlabpy代码等(后续会更新成品论文)「首先来看看目前已有的资料&am…...
基于.net开发的博客系统
基于.net开发可以批量上传md文件生成文章的博客系统 .NET 个人博客 基于.net开发的博客系统 个人博客系统,采用.net core微服务技术搭建,采用传统的MVC模式,使用EF core来对mysql数据库(sqlite数据库)进行CRUD操作项目 为什么要自己开发博客…...
python给图片加上图片水印
python给图片加上图片水印 作用效果代码 作用 给图片加上图片水印图片水印的透明度,位置可自定义 效果 原始图片: 水印图片: 添加水印后的图片: 代码 from PIL import Image, ImageDraw, ImageFontdef add_watermark(in…...
Redis实现MQ
MQ的提出 上游发出请求后阻塞等待下游给到反馈,否则整个流程将一直阻塞。 提出mq之后:即有producer mq consumer 三者 MQ的特点 异步解耦 在有了 mq 后,producer 不需要过分关心 consumer 的身份信息,只需要把消息按照指定的协议…...
【Linux】进程终止与进程等待
目录 进程终止 errno exit和_exit 进程等待 wait和waitpid 宏:WIFEXITED 非阻塞等待 进程终止 下面要谈的一个话题就是进程终止,就是说一个进程退出了,可能有三种情况 1.进程代码执行完,结果是正确的 2.进程代码执行完&…...
数据结构_链式二叉树(Chained binary tree)基础
✨✨所属专栏:数据结构✨✨ ✨✨作者主页:嶔某✨✨ 二叉树的遍历 前序、中序以及后序遍历 学习二叉树结构,最简单的方式就是遍历。所谓二叉树遍历(Traversal)是按照某种特定的规则,依次对二叉树中的结点进行相应的操作ÿ…...
python梯度下降法求解三元线性回归系数,并绘制结果
import numpy as np import matplotlib.pyplot as plt # 生成随机数据 np.random.seed(0) X1 2 * np.random.rand(100, 1) X2 3 * np.random.rand(100, 1) X3 4 * np.random.rand(100, 1) y 4 3 * X1 5 * X2 2 * X3 np.random.randn(100, 1) # 合并特征 X_b np.hsta…...
Linux基础(五):常用基本命令
从本节开始,我们正式进入Linux的学习,通过前面的了解,我们知道我们要以命令的形式使用操作系统(使用操作系统提供的各类命令,以获得字符反馈的形式去使用操作系统。),因此,我们是很有…...
原始字面常量(C++11)
原始字面常量(C11) 文章目录 原始字面常量(C11)前言一、原始字面量二、代码示例总结 前言 字面量一般是指数值(12、454等)和字符串(“Hw”、“h\t”),但是有时候我们想表…...
C++|设计模式(〇)|设计模式的六大原则
这里文章只做简要描述,作为扫盲 在软件开发过程中,遵循一定的设计原则可以帮助开发者创建更加灵活、可维护和可扩展的系统。设计模式的六大原则是面向对象设计的核心理念,本文将详细介绍这些原则,并结合实例说明它们的重要性和应用…...
【排序算法】——归并排序(递归与非递归)含动图
制作不易,三连支持一下吧!!! 文章目录 前言一.归并排序递归方法实现二.归并排序非递归方法实现 前言 这篇博客我们将介绍归并排序的原理和实现过程。 一、归并排序递归方法实现 基本思想: 归并排序(MERGE-…...
Mysql自增id、uuid、雪花算法id的比较
MySQL自增id: 优点: 1.简单易用 MySQL自增id 由数据库自动生成。 2.效率高 自增id是按顺序递增的,可以提高插入和查询的效率。 3.索引效率高 自增id可以作为主键或索引列,提高查询效率。 缺点: 1.不适用于分布式系统 在分布式…...
【会议征稿,IEEE出版】第九届信息科学、计算机技术与交通运输国际学术会议(ISCTT 2024,6月28-30)
第九届信息科学、计算机技术与交通运输国际学术会议(ISCTT 2024)将于2024年6月28-30日在中国绵阳举行。 ISCTT 2024将围绕 “信息科学”、"计算机技术”、“交通运输” 等最新研究领域,为来自国内外高等院校、科学研究所、企事业单位的专…...
二十八篇:嵌入式系统实战指南:案例研究与未来挑战
嵌入式系统实战指南:案例研究与未来挑战 1. 引言 1.1 嵌入式系统的重要性及其应用广度 在当今快速发展的技术领域中,嵌入式系统扮演着至关重要的角色。这些系统是专门设计的计算机硬件和软件的组合,旨在执行特定任务,如控制、监…...
探索编程乐趣:绘制螺旋图的奇幻之旅
新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:编程的魔法世界 二、绘制螺旋图的准备工作 三、代码实战:…...
C# 语法糖
语法糖 var关键字(隐式类型变量):自动属性:简化的事件访问器:Lambda表达式和匿名方法:扩展方法:LINQ查询:异步编程(async和await):嵌套匿名类型&a…...
AI原生团队启动失败率高达68%?关键不在技术,在于你漏掉了这5个组织级“认知锚点”
第一章:AI原生软件研发团队组建与人才培养 2026奇点智能技术大会(https://ml-summit.org) 构建AI原生软件研发团队,核心在于打破传统“AI支持开发”范式,转向“以模型为一等公民”的工程文化。这意味着团队成员不仅需掌握机器学习原理与大模…...
性能优化实战:Vue3 + Cesium加载天地图时,如何解决图层闪烁、内存暴增问题?
Vue3 Cesium天地图性能优化实战:解决图层闪烁与内存泄漏难题 当Vue3遇上Cesium和天地图,这个技术组合能构建出令人惊艳的三维地理应用。但当你真正投入生产环境时,图层闪烁、内存暴增这些"高级"问题就会找上门来。今天我们就来解剖…...
JAVA集合—ArrayList源码深度解析
前言ArrayList 可能是每个 Java 开发者最早接触、使用最频繁的集合类。但你是否真正理解过它的内部实现?比如:扩容机制是什么?为什么扩容是 1.5 倍?add() 和 remove() 的时间复杂度分别是多少?本文基于 JDK 21 源码&am…...
Tensorflow离线安装全攻略:从whl下载到ARM架构适配(附资源链接)
TensorFlow离线安装全攻略:从whl下载到ARM架构适配 在边缘计算和嵌入式开发领域,离线环境下的TensorFlow部署一直是工程师们的痛点。想象一下,当你带着开发板深入工厂现场调试,或是需要在保密网络中进行AI模型部署时,…...
RAG 还是 Lucene:私有化部署客服系统的 AI 知识库架构选型窗
在之前的文章中,我们花了大量的篇幅,从记录后端pod真实ip开始说起,然后引入envoy,再解决了各种各样的需求:配置自动重载、流量劫持、sidecar自动注入,到envoy的各种能力:熔断、流控、分流、透明…...
Lychee Rerank MM免配置教程:绕过HuggingFace下载直启Qwen2.5-VL重排序服务
Lychee Rerank MM免配置教程:绕过HuggingFace下载直启Qwen2.5-VL重排序服务 1. 引言:为什么需要免配置方案 如果你曾经尝试部署多模态AI模型,一定遇到过这样的烦恼:从HuggingFace下载几个GB的模型文件,网络不稳定导致…...
天地图(T=img_w/c)和谷歌地图(lyrs=s/m)的URL参数到底怎么用?一篇讲清所有地图瓦片服务调用细节
天地图与谷歌地图URL参数全解析:从瓦片调用到坐标系实战 当你需要在项目中集成地图服务时,是否曾被各种URL参数搞得一头雾水?Timg_w和Timg_c有什么区别?lyrss和lyrsm又代表什么?本文将彻底拆解两大主流地图服务的URL设…...
革命性动画组件库Fancy Components:让网页再次充满乐趣的终极指南
革命性动画组件库Fancy Components:让网页再次充满乐趣的终极指南 【免费下载链接】fancy 项目地址: https://gitcode.com/gh_mirrors/fan/fancy 在当今标准化的网页UI环境中,Fancy Components动画组件库以其创新的微交互和精美动画效果…...
AI 时代,计算机专业学生该怎么学?难
整体排查思路 我们的目标是验证以下三个环节是否正常: 登录成功时:服务器是否正确生成了Session并返回了包含正确 JSESSIONID的Cookie给浏览器。 浏览器端:浏览器是否成功接收并存储了该Cookie。 后续请求:浏览器在执行查询等操作…...
AI时代新型的项目管理应该是什么样的?侣
AI训练存储选型的演进路线 第一阶段:单机直连时代 早期的深度学习数据集较小,模型训练通常在单台服务器或单张GPU卡上完成。此时直接将数据存储在训练机器的本地NVMe SSD/HDD上。 其优势在于IO延迟最低,吞吐量极高,也就是“数据离…...
