GPIO_ Read_ input_ Data_ bit 就是读取这里输入数据寄存器的某一位。GPIO_ Read_ input_ Data 就是读取这整个输入数据寄存器。GPIO_ Read_ output_ Data_ bit 就是读取这里输出数据寄存器的某一位。GPIO_ Read_ output_ Data 就是读取这整个输出数据寄存器。按键控制LEDintmain(void){/*模块初始化*/LED_Init();//LED初始化Key_Init();//按键初始化while(1){KeyNumKey_GetNum();//获取按键键码if(KeyNum1)//按键1按下{LED1_Turn();//LED1翻转}if(KeyNum2)//按键2按下{LED2_Turn();//LED2翻转}}}【LED.c】#includestm32f10x.h// Device header/** * 函 数LED初始化 * 参 数无 * 返 回 值无 */voidLED_Init(void){/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_ModeGPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_PinGPIO_Pin_1|GPIO_Pin_2;GPIO_InitStructure.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_InitStructure);//将PA1和PA2引脚初始化为推挽输出/*设置GPIO初始化后的默认电平*/GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2);//设置PA1和PA2引脚为高电平}/** * 函 数LED1状态翻转 * 参 数无 * 返 回 值无 */voidLED1_Turn(void){if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1)0)//获取输出寄存器的状态如果当前引脚输出低电平{GPIO_SetBits(GPIOA,GPIO_Pin_1);//则设置PA1引脚为高电平}else//否则即当前引脚输出高电平{GPIO_ResetBits(GPIOA,GPIO_Pin_1);//则设置PA1引脚为低电平}}/** * 函 数LED2状态翻转 * 参 数无 * 返 回 值无 */voidLED2_Turn(void){if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2)0)//获取输出寄存器的状态如果当前引脚输出低电平{GPIO_SetBits(GPIOA,GPIO_Pin_2);//则设置PA2引脚为高电平}else//否则即当前引脚输出高电平{GPIO_ResetBits(GPIOA,GPIO_Pin_2);//则设置PA2引脚为低电平}}【Key.c】STM32 内部有约 30k~50kΩ 的可编程上拉电阻可以代替外部上拉GPIO_InitStructure.GPIO_ModeGPIO_Mode_IPU;按键一端接 PB1另一端接 GND松开内部上拉 → IDR 1按下拉到 GND → IDR 0#includestm32f10x.h// Device header#includeDelay.h/** * 函 数按键初始化 * 参 数无 * 返 回 值无 */voidKey_Init(void){/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//开启GPIOB的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_ModeGPIO_Mode_IPU;GPIO_InitStructure.GPIO_PinGPIO_Pin_1|GPIO_Pin_0;GPIO_InitStructure.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOB,GPIO_InitStructure);//将PB1和PB11引脚初始化为上拉输入}/** * 函 数按键获取键码 * 参 数无 * 返 回 值按下按键的键码值范围0~2返回0代表没有按键按下 * 注意事项此函数是阻塞式操作当按键按住不放时函数会卡住直到按键松手 */uint8_tKey_GetNum(void){uint8_tKeyNum0;//定义变量默认键码值为0if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)0)//读PB1输入寄存器的状态如果为0则代表按键1按下{Delay_ms(20);//延时消抖while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)0);//等待按键松手Delay_ms(20);//延时消抖KeyNum1;//置键码为1}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)0)//读PB11输入寄存器的状态如果为0则代表按键2按下{Delay_ms(20);//延时消抖while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)0);//等待按键松手Delay_ms(20);//延时消抖KeyNum2;//置键码为2}returnKeyNum;//返回键码值如果没有按键按下所有if都不成立则键码为默认值0}
企业数字化 ERP 产品动态
相关推荐
11 — 完整 CRUD 示例 11.1 这一篇做什么
前面几篇分别讲了每一层的写法,这一篇把它们串起来,从零写完一个项目管理模块的完整 CRUD。
读完这篇,你应该能照着写出其他任何模块。11.2 要实现的接口方法URL功能GET/api/v1/projects分页查询项目列表,支持按… · 2026/9/24 17:28:48
报告下载丨2025 年 AI Agent 重新定义未来企业:微软集团生产力与企业流程业务研究报告 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 17:28:48
Java27新鲜出炉!IDEA已满血适配,保姆级上手指南 虽然Java27不是LTS,但性能、安全、新语法全都塞给你,打工人快来尝鲜
每隔半年,Java就准时扔出一个新版本,2026年9月15日,Java 27正式上线,一共9个JEP:4个正式定稿特性、4个预览特性,… · 2026/9/24 17:28:48
2026年9月:哪家戴尔售后门店更专业 如今市场上戴尔售后门店众多,质量良莠不齐。部分门店技术欠佳,维修不彻底;还有些售后响应慢,让客户等待时间过长。这让不少戴尔用户在选择售后时发愁。挑选专业的戴尔售后门店,标准很关键。专业的技术团队是基础&#… · 2026/9/24 18:01:54
社区电气安全监测系统预警及时性深度解析 随着国内智慧社区建设进入深度落地阶段,电气安全与安防监测作为社区安全的核心防线,其预警响应效率直接关系到居民人身财产安全。行业数据显示,传统社区电气安防系统普遍存在隐患识别滞后、告警响应慢、误报率高、场景覆盖不全等痛点… · 2026/9/24 18:01:48
分布式事务,一文讲透6种方案 微服务架构下,一次下单要扣库存、减余额、发优惠券,三个服务三个数据库,任何一步失败都可能让数据对不上。分布式事务,就是解决这个问题的。但方案五花八门,选错了比不做还糟。今天用最直白的话,讲透6种主流… · 2026/9/24 18:01:48
用 Python 算深圳新房首付款:商贷 15% 与公积金 20% 的对照测算 深圳的首付怎么算,看起来只是一道乘法题,但商贷与公积金两套口径的首付比例不同,同一套房算出来的数字能差出一大截。本文由深工优居基于公开政策与备案资料整理,用 Python 把两种口径写成可复用的测算函数,并以龙岗区… · 2026/9/24 18:01:48
第 2 章 搭建开发环境:从源码到芯片的全流程 本章回答三个底层问题:
①"工具链"里的每个工具到底在干什么?②环境变量/PATH 是什么、为什么要有?
③烧录和监视器的底层机制是什么?
然后动手三件事:把 ESP-IDF 装上电脑(2.2b)、把… · 2026/9/24 18:01:48
降ai率的软件推荐怎么选?2026年8款靠谱降AI工具实测,定稿前AI率一次达标! 降ai率的软件推荐怎么选?2026年8款靠谱降AI工具实测,定稿前AI率一次达标!
建筑学的一个学弟,毕业论文9600字,学校用知网,案例分析那一整章全部标红,初检AI率70.7%,学校要求40%以内&… · 2026/9/24 18:01:48
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44