SeanLib系列函数库-MyInputPort
📅 2026/7/8 13:42:29
👁️ 次浏览
查看其它库函数说明请点击此处跳转到SeanLib主页1. 本篇内容本库提供了一种扩充外部中断的方法可管理单片机的输入端口实现消抖、检测长按的功能。实现原理为将要监测的输入引脚添加到一个专用链表中然后定时调用一个状态更新函数该函数会检查每个监测的引脚状态是否发生变化提供边沿、电平、电平维持时间等属性。2. 使用方法本库依赖SeanLib和MyList头文件。头文件中提供一个结构体存储要监测的输入引脚typedefstruct{unsignedPinAddr:32;//私有该端口的BITBAND地址unsignedIsON:1;//只读该端口状态是否为ONunsignedIsOFF:1;//只读该端口状态是否为OFFunsignedNow:1;//私有unsignedLast:1;//私有unsignedActiveLevel:1;//私有该端口的有效电平unsignedRising:1;//读写该端口是否出现了上升沿需要软件清除unsignedFalling:1;//读写该端口是否出现了下降沿需要软件清除unsignedReserve:9;//预留的unsignedTrigTime:16;//读写当端口在当前状态下持续达此时间时额外触发调用一次回调函数unsignedDuration:32;//读写该端口在当前状态下持续的时间}MyInput_t;用下面函数创建一个引脚/******************************************************************************* * 功 能: 创建一个输入端口 * 参 数: * PinAddr : 用BITBAND_ADDR指定端口的BitBand地址 * ActiveLevel: 端口的有效电平作为判断ON和OFF的标准 * TrigTime : 设置一个时间当端口在当前状态下持续达此时间时会额外触发调用一次回调函数 * 不使用该功能时设置为0即可 * 返回值: 创建成功返回端口指针否则返回空指针NULL *******************************************************************************/externMyInput_t*New_MyInput(unsignedintPinAddr,unsignedcharActiveLevel);示例MyInput_t*W5500_INTNew_MyInput(BITBAND_ADDR(GPIOB-IDR,12),0);同时本库也提供了一个简化的宏来创建一个输入引脚//创建一个输入端口参数Port端口、Pin序号有效电平#defineNEW_INPUT(port,num,level)New_MyInput(BITBAND_ADDR(port-IDR,num),level)示例MyInput_t*W5500_INTNEW_INPUT(GPIOB12,0);所有的端口都创建完成后定时调用下面的状态刷新函数/******************************************************************************* * 功 能: 状态定时刷新函数每调用一次该函数已创建的端口状态全部更新 * 参 数: 无 * 返回值: 无 *******************************************************************************/externvoidMyInput_Tick(void);调用频率越高实时性越好但CPU负担会越重因此需要结合项目的具体情况综合考虑。在不使用os的项目中可以将该函数放在Systick中断中执行有os的项目尽量不要使用如下voidSysTick_Handler(void){// USER CODE BEGIN SysTick_IRQn 0externvoidMyInput_Tick(void);MyInput_Tick();//放在此处// USER CODE END SysTick_IRQn 0HAL_IncTick();// USER CODE BEGIN SysTick_IRQn 1// USER CODE END SysTick_IRQn 1}到这一步端口状态将会定时更新下面是一些用法示例以及库中提供的两个简化宏//检测端口用于消抖或检测长按#defineCHECK_KEY(key,time)((key-IsON)(key-Duration(time)))//检测是否出现了双启动事件检测标准为两个输入端口变为有效的间隔时间不超过200ms#defineCHECK_DOUBLE(key1,key2)((key1-IsON)(key2-IsON)(key1-Duration200)(key2-Duration200))//检测端口是否为ONif(Key-IsON){...}//检测端口长按是否达到1sif(CHECK_KEY(Key,1000)){...}//输入端口50ms消抖if(CHECK_KEY(Key,50)){...}//检测端口是否出现下降沿if(Key-Falling){Key-Falling0;...}编写引脚变化回调函数非必需当端口状态发生变化时该函数会被调用voidMyInput_CallBack(MyInput_t*Input);可以该函数中执行少量的程序防止中断阻塞。另外本库提供了一个方法当端口变化到某个状态并持续一定时间时额外触发一次回调函数可通过设置 TrigTime 属性实现如MyInput_t*W5500_INTNEW_INPUT(GPIOB12,0);W5500_INT-TrigTime300;3. 端口变化检测原理Input-Now*(unsignedintvolatile*)(Input-PinAddr);if(Input-LastInput-Now)//端口无变化时持续时间增加{Input-Duration;if((Input-TrigTime0)(Input-DurationInput-TrigTime)){MyInput_CallBack(Input);//额外触发一次回调函数}}else//端口有变化时更新边沿信号{Input-IsONInput-NowInput-ActiveLevel;//状态与有效电平相同时设置ONInput-IsOFFInput-IsON0;Input-LastInput-Now;//更新前次的状态Input-RisingInput-IsON;//端口变为有效电平设置上升沿信号Input-FallingInput-Rising0;Input-Duration0;//清零持续时长MyInput_CallBack(Input);//调用端口变化的回调函数}
目录
一句话简介
🤔 Executor vs Agent
🔗 集成 Agent 到工作流
🔑 核心机制:TurnToken
代码实现
🏢 实战案例:翻译链
🎯 总结 上一篇
一句话简介
本文将探讨如何将 AIAgent 作为一等公…
📅 2026/7/8 13:42:29
在日常浏览抖音、整理个人素材、收藏优质内容的过程中,很多用户都会遇到视频保存自带水印的问题,水印不仅影响画面整洁度,也不利于个人素材归档、学习参考使用。2026年抖音平台规则持续更新,各类第三方解析工具也不断迭代优化&…
📅 2026/7/8 13:42:29
Fluent meshing 网格剖分技巧分享ANSYS Fluent Meshing 是一款面向计算流体动力学(CFD)的专业前处理软件,专注于构建高质量的计算网格。该软件支持几何导入、模型修复、面网格生成及体网格划分的全流程自动化,兼容四面体、六面体核…
📅 2026/7/8 13:42:29
2624张电致发光图像:光伏缺陷检测的终极工业级基准 【免费下载链接】elpv-dataset A dataset of functional and defective solar cells extracted from EL images of solar modules 项目地址: https://gitcode.com/gh_mirrors/el/elpv-dataset
在光伏产业的…
📅 2026/7/8 14:40:55
钢结构加工制作工艺
钢结构加工制作工艺
一、钢板矫平
为保证本工程钢构件的加工制作质量,钢板如有较大弯曲、凹凸不平等问
题时,应先进行矫平,钢板矫平时优先采用矫平机对钢板进行矫平,当矫
📅 2026/7/8 14:40:55
JVM GC日志分析实战:从GC频率异常定位到内存分配优化
一、从GC日志的"异常频率"到内存分配的"根因定位"
线上服务出现周期性延迟抖动,排查链路中GC日志往往是第一道诊断关卡。然而多数开发者停留在"GC次数多内存不够加堆"…
📅 2026/7/8 14:40:55
1. LV3296与PIC18F47Q10芯片组合方案解析在嵌入式系统开发领域,数据采集与处理的实时性、可靠性一直是工程师面临的核心挑战。LV3296作为一款高性能信号调理芯片,与Microchip公司PIC18F47Q10微控制器组成的解决方案,为工业传感、环境监测等场…
📅 2026/7/8 14:40:55
在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…
📅 2026/7/8 14:40:55
当下数字乡村建设早已告别“盲目装设备、堆砌数字化硬件”的粗放阶段,进入AI精细化落地、场景化赋能、长效化运营的新阶段。很多村居数字化建设陷入“重建设、轻应用、高闲置、低实效”的困境:摄像头只录像不预警、智慧平台只展示不落地、数字化系统繁琐…
📅 2026/7/8 14:38:55
Docker 彻底卸载指南:CentOS/Ubuntu 双系统 5 步清理残留文件当 Docker 环境出现版本冲突、安装失败或需要迁移时,常规的卸载命令往往无法彻底清理系统。残留的配置文件、依赖项和缓存文件可能导致新安装的 Docker 出现各种诡异问题。本文将提供一套完整…
📅 2026/7/8 0:00:10
SQL 数据分析性能优化实战:窗口函数 vs 子查询 vs 临时表 在数据分析工作中,SQL查询性能往往是决定工作效率的关键因素。面对复杂的业务场景,如何选择最优的查询方案?本文将深入对比窗口函数、子查询和临时表三种技术方案…
📅 2026/7/8 0:00:10
日期:2026-07-07> 本期聚焦近一日(2026-07-06 至 07-07)出台的金融与行业政策,按"背景—核心—影响—受益/风险"四维度解读。政策内容依据原始发布信息整理,解读仅供参考,不构成投资建议。一、…
📅 2026/7/8 0:00:10
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/8 14:10:54
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/8 14:10:54
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/8 11:28:59
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/8 14:10:54
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/8 14:10:54
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/8 14:10:54