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

Ai8051 独立按键控制LED实验

Ai8051 独立按键控制LED实验一、实验目标用板载K1~K4独立按键控制对应LED1~LED4亮灭掌握按键消抖、按键扫描、IO口配置、模块化编程二、硬件电路原理图按键P3.2、P3.3、P3.4、P3.5低电平有效LEDP2.0、P2.1、P2.2、P2.3按键按下 → IO口为低电平0三、AiCube 配置步骤开启系统时钟主时钟内部高速 IRC系统时钟40MHz图形化IO配置按键端口P3.2~P3.5设为上拉输入LED端口P2.0~P2.3设为推挽输出勾选启用 P2、P3 端口四、完整代码逐行注释1. key.h按键头文件#ifndef_KEY_H// 防止头文件重复包含条件编译#define_KEY_H#includeconfig.h// 包含系统配置头文件Ai8051自动生成含IO/时钟定义// 按键引脚定义根据实际硬件修改此处为示例K1~K4对应P3.2~P3.5#defineKEY1P3_2// 定义KEY1为P3.2引脚#defineKEY2P3_3// 定义KEY2为P3.3引脚#defineKEY3P3_4// 定义KEY3为P3.4引脚#defineKEY4P3_5// 定义KEY4为P3.5引脚// 按键返回值宏定义增强代码可读性避免魔法数字#defineKEY1_PRESS1// KEY1按下返回1#defineKEY2_PRESS2// KEY2按下返回2#defineKEY3_PRESS3// KEY3按下返回3#defineKEY4_PRESS4// KEY4按下返回4// 按键扫描函数声明mode参数0单次扫描1连续扫描此处暂用0u8KEY_Scan(u8 mode);#endif// 结束条件编译2. key.c按键驱动#includekey.h/** * brief 按键扫描函数修复版单次触发双次消抖等待松开 * param mode0单次扫描按一次只触发一次1连续扫描 * retval 按键值1KEY12KEY23KEY34KEY40无按键 * note 增加“等待松开”“二次消抖”解决多次按才生效的问题 */u8KEY_Scan(u8 mode){staticu8 key_flag1;// 按键状态标记1未按下0已按下u8 key_val0;// 临时存储按键值// 只有按键未按下时才检测新的按键防止连触发if(key_flag1){// 第一步检测是否有按键按下低电平有效if(!KEY1||!KEY2||!KEY3||!KEY4){delay_ms(10);// 第一次消抖过滤按下时的机械抖动// 第二步二次确认按键确实按下避免误触发if(!KEY1)key_valKEY1_PRESS;elseif(!KEY2)key_valKEY2_PRESS;elseif(!KEY3)key_valKEY3_PRESS;elseif(!KEY4)key_valKEY4_PRESS;// 第三步如果检测到有效按键等待松开松开消抖if(key_val!0){key_flag0;// 标记按键已按下防止重复检测// 等待按键松开核心解决“多次按才生效”while(!KEY1||!KEY2||!KEY3||!KEY4);delay_ms(10);// 第二次消抖过滤松开时的机械抖动returnkey_val;// 返回有效按键值}}}// 第四步所有按键都松开后重置状态elseif(KEY1KEY2KEY3KEY4){key_flag1;// 重置标记允许下次检测}return0;// 无按键按下返回0}3. led.hLED头文件#ifndef_LED_H// 防止头文件重复包含#define_LED_H#includeconfig.h// 包含系统配置头文件// LED引脚定义根据实际硬件修改此处为示例LED1~LED4对应P2.0~P2.3#defineLED1P2_0// 定义LED1为P2.0引脚#defineLED2P2_1// 定义LED2为P2.1引脚#defineLED3P2_2// 定义LED3为P2.2引脚#defineLED4P2_3// 定义LED4为P2.3引脚#endif// 结束条件编译4. main.c主函数/******************************************* * 头文件包含 *******************************************/#includeconfig.h// 包含系统配置头文件由AiCube生成含时钟/IO初始化#includekey.h// 包含按键驱动头文件定义按键引脚和扫描函数#includeled.h// 包含LED驱动头文件定义LED引脚/******************************************* * 项目主函数 * 入口参数无 * 函数返回无 * 作用程序入口死循环执行按键扫描和LED控制 *******************************************/voidmain(void){u8 key_val0;// 定义变量存储按键返回值0无按键1~4对应KEY1~KEY4SYS_Init();// 系统初始化函数配置时钟、IO口模式等必须调用while(1)// 死循环单片机程序核心一直运行{// 按键扫描逻辑 // 调用按键扫描函数mode0 表示【单次扫描】// 效果按一次按键只触发一次必须松开后才能再次触发key_valKEY_Scan(0);// LED控制逻辑 // 根据key_val的值执行对应的LED动作switch(key_val){caseKEY1_PRESS:// 如果检测到KEY1按下LED1!LED1;// LED1状态翻转灭变亮亮变灭break;// 跳出switch防止case穿透caseKEY2_PRESS:// 如果检测到KEY2按下LED2!LED2;// LED2状态翻转break;caseKEY3_PRESS:// 如果检测到KEY3按下LED3!LED3;// LED3状态翻转break;caseKEY4_PRESS:// 如果检测到KEY4按下LED4!LED4;// LED4状态翻转break;default:// 默认分支无按键按下时不执行操作break;}// 主循环加短延时可选// 作用降低CPU占用避免程序跑飞不影响按键检测灵敏度delay_ms(5);}}五、关键注释说明静态变量key_flagstatic u8 key_flag 1;是单次扫描的核心静态变量只会初始化一次按键按下时设为0松开后重置为1避免“按一次触发多次”。消抖延时delay_ms(10)机械按键按下/松开时会有5~10ms的电平抖动必须加延时过滤否则会误判“没按键”或“多次按键”。!LED1翻转逻辑LED1 !LED1等价于LED1 (LED1 0) ? 1 : 0实现“按一下亮、再按灭”的效果。

相关文章:

Ai8051 独立按键控制LED实验

Ai8051 独立按键控制LED实验 一、实验目标 用板载 K1~K4 独立按键,控制对应 LED1~LED4 亮灭掌握:按键消抖、按键扫描、IO口配置、模块化编程二、硬件电路(原理图)按键:P3.2、P3.3、P3.4、P3.5(低电平有效&a…...

基于SpringBoot与Android的全民健身APP设计与实现

一、系统开发背景与核心目标 当前全民健身需求日益增长,但公众在运动过程中面临诸多痛点:运动计划缺乏科学性,新手易因方法不当受伤;运动数据分散在各类设备,难以系统追踪;线下运动社群难以形成&#xff0c…...

arxiv | 2023 | DBR-MAE

文章目录创新点贡献摘要及引言预备知识方法总体结构动态移窗模块(DSW)单一目标多目标扩展背景重建模块(BR)探测头实验DSW 的精确性消融研究与其他方法的比较定性表现结论arxiv | 2023 | DBR-MAE论文:https://arxiv.org…...

键鼠精灵:办公效率翻倍神器,精准适配多场景操作需求!

前言大家好呀!这里是练习时长两年半的个人练习生Rebirth重,今天又来给大家分享实用工具啦!今天给大家带来的工具是键鼠精灵,在日常办公中,我们如果不想在电脑前一直重复机械的动作,比如反复点击、重复输入文…...

基于微信小程序的校园财递通快递代取系统设计与实现

一、系统开发背景与目标 随着校园快递数量激增,学生取件常面临时间冲突、快递点距离远等问题,催生了校园快递代取需求。传统代取依赖线下沟通或社交群发布信息,存在交易流程不规范、信息不透明、安全无保障等痛点。基于微信小程序的校园财递通…...

Spring-Profile与部署说明

Spring Profile 与部署说明 本文档说明 Spring Boot 激活环境(profile) 的生效方式、优先级,以及 Docker Compose 部署 时环境变量的传递机制。一、spring.profiles.active 的优先级(从高到低) Spring Boot 确定「当前…...

基于javaweb和mysql的springboot前台后台玩具商城系统(java+ssm+springboot+html+thymeleaf+maven+mysql)

...

2026年降AI总失败?可能是这3个原因附解决方法

2026年降AI总失败?可能是这3个原因附解决方法 提交前两小时,室友突然跑过来说:"你论文AI率58%,过不了。"我当时脑子嗡的一下,赶紧打开检测报告一看,果然一片红。更让我崩溃的是,我已…...

CS106L:Assignment 2:Marriage Pact 作业

作业要求 从students.txt中读取学生名称&#xff0c;每行代表一个名字e.g.Julieta Heath&#xff0c;存储在std::set或者std::unordered_set中&#xff1b;寻找与你的名字首字母缩写相同的学生名称&#xff0c;将其字符串的索引存储在std::queue<const std::string*>中&a…...

2026软考高项好口碑靠谱推荐:哪些机构凭顶尖师资与超高通过率上榜

想拿高项证书&#xff0c;升职加薪&#xff0c;结果一搜培训机构&#xff0c;直接看懵了&#xff1a;有人说威班刘杰老师论文带得好&#xff0c;有人说易佳线下班口碑稳&#xff0c;威班价格看着挺香&#xff0c;中软国际的课价又高得吓人……到底哪家教得最好&#xff1f;哪家…...

CopyOnWriteArrayList源码学习

参数及其含义 可重入互斥锁。用于并发控制。保证操作的原子性。 final transient ReentrantLock lock = new ReentrantLock();对象数组,存储元素对象。加上volatile关键字,保证并发过程中数据的可见性。 private transient volatile Object[] array;常用方法 构造函数 public…...

跨境电商选品师口碑如何?网上教你做电商的可信吗?

在跨境电商快速发展的当下&#xff0c;选品师和电商教学成为从业者关注的焦点&#xff0c;其口碑与可信度需理性看待。​ 跨境电商选品师的口碑呈现两极分化。专业选品师凭借对目标市场消费习惯、政策法规的精准把握&#xff0c;能通过数据分析和市场调研筛选出潜力产品&#x…...

从0开始数据仓库--数据表范式

定义&#xff1a; 数据库范式是一种用于减少冗余&#xff0c;提高数据一致性和可维护性的规则一、核心概念函数依赖&#xff1a;X 确定 Y&#xff0c;记作 X→Y候选码&#xff1a;能唯一标识一行的最小属性集主属性&#xff1a;出现在候选码中的属性非主属性&#xff1a;不出现…...

MySQL锁机制:从懵逼到入门,我花了三年

MySQL锁机制&#xff1a;从懵逼到入门&#xff0c;我花了三年写在前面&#xff1a;这篇文章源于我被死锁折磨的那些日日夜夜。如果你也曾经对着 SHOW ENGINE INNODB STATUS 发呆&#xff0c;或者被间隙锁搞得怀疑人生&#xff0c;那这篇文章可能就是为你写的。一、故事的开始&a…...

小程序制作平台有哪些?SaaS模板类平台评测

在数字化转型加速的当下&#xff0c;小程序已成为商家触达用户、提升营收的核心载体&#xff0c;而SaaS模式凭借零代码、低成本、快速上线的优势&#xff0c;成为多数商家搭建小程序的首选。目前市场上SaaS小程序制作平台众多&#xff0c;其中码云数智、有赞、微盟凭借各自的定…...

人工智能之数字生命--“骨架真相”

现在这套系统里&#xff0c;安全值 和 服务值 的根需求负责给出总方向&#xff0c;真根任务不会真正“完成”&#xff0c;它们会反复根据当前状态去分解出下一轮阶段任务。真正会完成的&#xff0c;是这些阶段任务下面的叶子子任务。 下面我用你现在代码里的机制&#xff0c;推…...

Ozon卖家醒醒吧!别再“手动搬砖”了,你的对手已经在用AI“开挂”了

做跨境电商十几年&#xff0c;我从最早的eBay、速卖通&#xff0c;到后来的亚马逊&#xff0c;再到现在的Ozon&#xff0c;一路摸爬滚打过来。说实话&#xff0c;见过太多卖家起高楼、宴宾客、楼塌了的戏码。特别是最近两年&#xff0c;Ozon火了&#xff0c;俄罗斯市场的大门越…...

RedisSearch 和 Elasticsearch 的 HNSW向量索引对比

RedisSearch 和 Elasticsearch 都支持 HNSW&#xff08;Hierarchical Navigable Small World&#xff09;向量索引&#xff0c;但它们在存储方式、查询流程、扩展能力、性能侧重点上差异很大。很多人在做向量检索架构选型时都会对比这两者。 下面从 架构 → 存储 → 检索 → 性…...

专注AI优化的服务商

随着人工智能技术向各行业深度渗透&#xff0c;企业在AI应用过程中常面临模型效率低、部署成本高、场景适配难等核心痛点。专注AI优化的服务商成为破解这些问题的关键力量&#xff0c;而超智引擎人工智能科技凭借其专业技术能力与深度行业经验&#xff0c;为企业提供高效的AI优…...

C# .NET 周刊|2026年2月4期

国内文章 Zenith.NET v0.0.6 发布 — API 大幅精简&#xff0c;为 Metal 后端铺路 https://www.cnblogs.com/xymfblogs/p/19620088 Zenith.NET v0.0.6 正式发布&#xff0c;核心主题是精简。大规模重构资源绑定模型、着色器阶段和光线追踪方案。资源集合重命名为 ResourceTa…...

一个寒假过去了 把虚拟机密码忘了怎么办

此时需要重启或开启虚拟机出现一下界面快速点进虚拟机按上下选择第二个选项按e进入以下界面 并在quiet 单词后输入rd.break 按下ctrlx进入以下界面输入mount -o remount,rw /stsrootchroot /sysrootpasswd新密码再次确认新密码touch /.autorelabelexitexit回车后系统会重启...

【流程思维】九、行动:实验和科学方法打造持续改进的组织

导读&#xff1a;以“科学方法无惧失败”推动流程改善&#xff0c;主张用“5W1H”审视惯性动作&#xff0c;遵循观察—假设—实验—验证循环&#xff0c;并以心理安全和复盘机制化解对失败的恐惧&#xff0c;形成小步快跑的持续进化文化。 目录 1. 停止磕绊&#xff0c;开启思…...

杨立昆的“世界模型”获10亿美元背书:AI要从“语言”走向“现实”

杨立昆的“世界模型”获10亿美元背书&#xff1a;AI要从“语言”走向“现实”2026年3月&#xff0c;图灵奖得主杨立昆&#xff08;Yann LeCun&#xff09;的新公司AMI Labs宣布完成10.3亿美元巨额融资&#xff0c;这笔资金将用于打造能真正理解物理现实的“世界模型”&#xff…...

互联网大厂Java面试三轮详解:核心技术栈与业务场景代码实践

互联网大厂Java面试三轮详解 本文旨在帮助初学者系统学习并应对互联网大厂的Java求职面试。内容体系化&#xff0c;模拟三轮真实面试流程&#xff0c;涵盖核心技术栈&#xff0c;结合实际业务场景和代码演示。每部分均附详细技术解析&#xff0c;助力面试准备。第一轮&#xff…...

Ubuntu 服务器通过 Samba 映射至 Windows 本地:高性能配置全攻略

这里写自定义目录标题Ubuntu 服务器通过 Samba 映射至 Windows 本地&#xff1a;高性能配置全攻略一、 为什么选择 Samba&#xff1f;二、 环境准备与基础安装三、 核心配置&#xff1a;性能与权限的深度优化关键参数解析&#xff1a;四、 用户授权与服务激活五、 Windows 映射…...

世界读书日|与AI共舞,在阅读中寻找你的不可替代性

世界读书日&#xff5c;与AI共舞&#xff0c;在阅读中寻找你的不可替代性当AI能快速生成文案、拆解书籍、解答疑惑&#xff0c;甚至模拟思维输出内容&#xff0c;不少人陷入迷茫&#xff1a;AI时代&#xff0c;我们还需要静下心来阅读吗&#xff1f;答案毋庸置疑。阅读从来不是…...

VMware 17安装 RHEL 8 并且使用xshell ssh连接指南

一、准备工作Vmware安装包&#xff0c;RHEL 8镜像文件&#xff0c; xshell 客户端二、打开Vmware新建虚拟机&#xff0c;点击稍后选择iso的选项之后选择Linux并且选择“Red Hat Enterprise Linux 8 64位”之后根据自己电脑配置设置好虚拟机的参数网络适配器选项必须选择NAT桥接…...

TR-069 交互流程规范更新总结

TR-069 交互流程规范更新总结 更新时间 2026-03-15 更新版本 v3.0 - 基于 TR-069 Amendment 6 官方文档的全面调整 主要更新内容 一、协议栈架构完善(Section 2) 1. 新增官方协议栈结构 ┌─────────────────────────────┐ │ CPE/ACS …...

前端:第四章-样式系统搭建

第四章:样式系统搭建 🎯 本章目标:安装配置 Tailwind CSS,定制主题色彩,实现深色模式支持。 4.1 安装 Tailwind CSS 4.1.1 什么是 Tailwind CSS? Tailwind CSS 是一个原子化 CSS 框架,特点如下: 特性 说明 原子化 预定义的工具类,无需写 CSS 可定制 完全可配置的设…...

Qt+C++ 控制软件架构实例

我给你讲一个接近真实工业项目规模&#xff08;10万~20万行代码&#xff09;的 QtC 控制软件架构实例。 我会按照 真实工程师的思考过程来讲&#xff1a; 1️⃣ 项目背景 2️⃣ 第一版代码&#xff08;很混乱&#xff09; 3️⃣ 第一次架构升级 4️⃣ 第二次架构升级 5️⃣ 第三…...