当前位置: 首页 > news >正文

【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 管理员阿呆又失败了&#xff0c;这次一定要堵住漏洞 解法 注意到&#xff1a; <!-- flag in id 1000 -->拦截很多种字符&#xff0c;连 select 也不给用了。 if(preg_match("/or|\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\|select/i",$id)){die(&q…...

软件设计师备考 | 案例专题之数据库设计 概念与例题

相关概念 关注上图中的两个部分&#xff1a; 概念结构设计 设计E-R图&#xff0c;也即实体-联系图。 工作步骤&#xff1a;选择局部应用、逐一设计分E-R图、E-R图合并。进行合并时&#xff0c;它们之间存在的冲突主要有以下3类&#xff1a; 属性冲突。同一属性可能会存在于…...

【全网最全】2024电工杯数学建模A题成品论文+前三题完整解答matlab+py代码等(后续会更新成品论文)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片链接&#xff0c;那是获取资料的入口&#xff01; 【全网最全】2024电工杯数学建模A题成品论文前三题完整解答matlabpy代码等&#xff08;后续会更新成品论文&#xff09;「首先来看看目前已有的资料&am…...

基于.net开发的博客系统

基于.net开发可以批量上传md文件生成文章的博客系统 .NET 个人博客 基于.net开发的博客系统 个人博客系统&#xff0c;采用.net core微服务技术搭建&#xff0c;采用传统的MVC模式&#xff0c;使用EF core来对mysql数据库(sqlite数据库)进行CRUD操作项目 为什么要自己开发博客…...

python给图片加上图片水印

python给图片加上图片水印 作用效果代码 作用 给图片加上图片水印图片水印的透明度&#xff0c;位置可自定义 效果 原始图片&#xff1a; 水印图片&#xff1a; 添加水印后的图片&#xff1a; 代码 from PIL import Image, ImageDraw, ImageFontdef add_watermark(in…...

Redis实现MQ

MQ的提出 上游发出请求后阻塞等待下游给到反馈&#xff0c;否则整个流程将一直阻塞。 提出mq之后&#xff1a;即有producer mq consumer 三者 MQ的特点 异步解耦 在有了 mq 后&#xff0c;producer 不需要过分关心 consumer 的身份信息&#xff0c;只需要把消息按照指定的协议…...

【Linux】进程终止与进程等待

目录 进程终止 errno exit和_exit 进程等待 wait和waitpid 宏&#xff1a;WIFEXITED 非阻塞等待 进程终止 下面要谈的一个话题就是进程终止&#xff0c;就是说一个进程退出了&#xff0c;可能有三种情况 1.进程代码执行完&#xff0c;结果是正确的 2.进程代码执行完&…...

数据结构_链式二叉树(Chained binary tree)基础

✨✨所属专栏&#xff1a;数据结构✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ 二叉树的遍历 前序、中序以及后序遍历 学习二叉树结构&#xff0c;最简单的方式就是遍历。所谓二叉树遍历(Traversal)是按照某种特定的规则&#xff0c;依次对二叉树中的结点进行相应的操作&#xff…...

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基础(五):常用基本命令

从本节开始&#xff0c;我们正式进入Linux的学习&#xff0c;通过前面的了解&#xff0c;我们知道我们要以命令的形式使用操作系统&#xff08;使用操作系统提供的各类命令&#xff0c;以获得字符反馈的形式去使用操作系统。&#xff09;&#xff0c;因此&#xff0c;我们是很有…...

原始字面常量(C++11)

原始字面常量&#xff08;C11&#xff09; 文章目录 原始字面常量&#xff08;C11&#xff09;前言一、原始字面量二、代码示例总结 前言 字面量一般是指数值&#xff08;12、454等&#xff09;和字符串&#xff08;“Hw”、“h\t”&#xff09;&#xff0c;但是有时候我们想表…...

C++|设计模式(〇)|设计模式的六大原则

这里文章只做简要描述&#xff0c;作为扫盲 在软件开发过程中&#xff0c;遵循一定的设计原则可以帮助开发者创建更加灵活、可维护和可扩展的系统。设计模式的六大原则是面向对象设计的核心理念&#xff0c;本文将详细介绍这些原则&#xff0c;并结合实例说明它们的重要性和应用…...

【排序算法】——归并排序(递归与非递归)含动图

制作不易&#xff0c;三连支持一下吧&#xff01;&#xff01;&#xff01; 文章目录 前言一.归并排序递归方法实现二.归并排序非递归方法实现 前言 这篇博客我们将介绍归并排序的原理和实现过程。 一、归并排序递归方法实现 基本思想&#xff1a; 归并排序&#xff08;MERGE-…...

Mysql自增id、uuid、雪花算法id的比较

MySQL自增id: 优点&#xff1a; 1.简单易用 ​ MySQL自增id 由数据库自动生成。 2.效率高 自增id是按顺序递增的&#xff0c;可以提高插入和查询的效率。 3.索引效率高 自增id可以作为主键或索引列&#xff0c;提高查询效率。 缺点&#xff1a; 1.不适用于分布式系统 在分布式…...

【会议征稿,IEEE出版】第九届信息科学、计算机技术与交通运输国际学术会议(ISCTT 2024,6月28-30)

第九届信息科学、计算机技术与交通运输国际学术会议&#xff08;ISCTT 2024&#xff09;将于2024年6月28-30日在中国绵阳举行。 ISCTT 2024将围绕 “信息科学”、"计算机技术”、“交通运输” 等最新研究领域&#xff0c;为来自国内外高等院校、科学研究所、企事业单位的专…...

二十八篇:嵌入式系统实战指南:案例研究与未来挑战

嵌入式系统实战指南&#xff1a;案例研究与未来挑战 1. 引言 1.1 嵌入式系统的重要性及其应用广度 在当今快速发展的技术领域中&#xff0c;嵌入式系统扮演着至关重要的角色。这些系统是专门设计的计算机硬件和软件的组合&#xff0c;旨在执行特定任务&#xff0c;如控制、监…...

探索编程乐趣:绘制螺旋图的奇幻之旅

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;编程的魔法世界 二、绘制螺旋图的准备工作 三、代码实战&#xff1a;…...

C# 语法糖

语法糖 var关键字&#xff08;隐式类型变量&#xff09;&#xff1a;自动属性&#xff1a;简化的事件访问器&#xff1a;Lambda表达式和匿名方法&#xff1a;扩展方法&#xff1a;LINQ查询&#xff1a;异步编程&#xff08;async和await&#xff09;&#xff1a;嵌套匿名类型&a…...

Android 11开发避坑:为什么你的App获取的Wifi MAC地址总是变?手把手教你配置固定MAC

Android 11开发实战&#xff1a;彻底解决Wifi MAC地址随机化问题最近在开发一个设备管理系统时&#xff0c;遇到了一个棘手的问题&#xff1a;我们的App在Android 11设备上获取的Wifi MAC地址每次都不一样&#xff0c;导致基于MAC地址的设备识别功能完全失效。经过一周的深入研…...

2026 西安 AI 问答曝光搭建技术解析:GEO 知识图谱 + 深度测评

随着大语言模型技术的快速普及&#xff0c;AI 搜索已经成为用户获取企业信息、商家服务的核心入口。根据中国互联网信息中心 2026 年发布的《中国人工智能搜索发展报告》显示&#xff0c;2025 年国内 AI 搜索用户规模突破 8.2 亿&#xff0c;日均搜索请求超过 20 亿次&#xff…...

Onekey终极指南:如何5分钟快速获取Steam游戏清单的免费神器

Onekey终极指南&#xff1a;如何5分钟快速获取Steam游戏清单的免费神器 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 还在为复杂的Steam游戏清单下载而头疼吗&#xff1f;想要备份游戏资源却不…...

PDF 可视化签名盖章页技术解析

本文是我在设备检测系统项目开发中,无设备检测的技术实现备忘录,记载实现过程。 本文以 PC 端页面 sign-pdf.vue 为主线,说明「无设备报检」在报告审批环节如何通过前后端协作,完成报告/记录 PDF 上的签名、印章、报告编号拖放定位,并在审批通过后由后端合并生成带签章的正…...

HarmonyOS ArkTS DateUtil 日期增减与日历计算完整指南

文章目录 背景一、引言二、日期增减方法详解使用示例 三、日历计算方法详解四、Demo 演示&#xff1a;日期增减结果展示五、Demo 演示&#xff1a;月历视图完整实现六、日历视图关键点解析为什么要填充前置空格&#xff1f;getLastDayOfMonth 的实现技巧 七、小结 背景 近期发现…...

上线前最后一道防线,DeepSeek代码审查如何帮你拦截87%的CVE类缺陷?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;上线前最后一道防线&#xff0c;DeepSeek代码审查如何帮你拦截87%的CVE类缺陷&#xff1f; 在软件交付生命周期末期&#xff0c;传统人工代码审计与通用SAST工具常因误报率高、上下文理解弱而漏检高危漏…...

skills CANN开源社区贡献技能包开发指南

前言 开源社区的健康运转&#xff0c;不仅依赖核心代码的贡献&#xff0c;还需要降低贡献门槛、提供清晰的指南和自动化工具。skills仓库是CANN开源社区的"贡献技能包"&#xff0c;提供了一系列辅助脚本、代码模板、CI检查和文档生成工具&#xff0c;帮助新手快速上…...

如何在浏览器中一键解密所有加密音乐文件:Unlock-Music完全指南

如何在浏览器中一键解密所有加密音乐文件&#xff1a;Unlock-Music完全指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地…...

InVideo插件深度解析:如何在Unreal Engine中实现高效视频流播放与录制

InVideo插件深度解析&#xff1a;如何在Unreal Engine中实现高效视频流播放与录制 【免费下载链接】InVideo 基于UE4实现的rtsp的视频播放插件 项目地址: https://gitcode.com/gh_mirrors/in/InVideo InVideo是一个基于Unreal Engine 5开发的RTSP视频播放插件&#xff0…...

学了几天 Web 安全,终于搞懂什么是 XSS 了

xss的详细介绍最近开始正式学习 Web 安全。前面陆续学了&#xff1a;HTTPCookieSessionJWT RBAC然后发现很多地方都会提到一个东西&#xff1a;XSS以前一直感觉这个漏洞很抽象。网上很多文章一上来就是&#xff1a;<script>alert(1)</script>然后说&#xff1a;“弹…...