完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32F407ZE 通过按键控制LED灯示例,要求:
①按键按下 D1亮 按键松开 D1灭 ②按键按下一次 D1亮 按键再按下一次 D1灭 ----(按键每按下一次D1实现翻转) 需要注意的是按键需用到延时消抖,延时时长按实际进行修改,检测按键按下与松开应该使用标志位等区分,如果只是通过读取按键返回值判断,在while循环里可能会对同一个LED灯多次操作。 #include void delay_ms(int ms) //延时函数 { int i,j; for(i=0; i } void LED_Init() { GPIO_InitTypeDef led1,led2; //先开启对应用到的模块时钟节拍 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE); //初始化LED1、LED2、蜂鸣器 led1.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_8; led1.GPIO_Mode = GPIO_Mode_OUT; led1.GPIO_Speed = GPIO_Fast_Speed; led1.GPIO_OType = GPIO_OType_PP; led1.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOF,&led1); //初始化LED3、LED4 led2.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14; led2.GPIO_Mode = GPIO_Mode_OUT; led2.GPIO_Speed = GPIO_Fast_Speed; led2.GPIO_OType = GPIO_OType_PP; led2.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOE,&led2); //所有LED灯置高电平(熄灯) GPIO_ToggleBits(GPIOF,GPIO_Pin_9); GPIO_ToggleBits(GPIOF,GPIO_Pin_10); GPIO_ToggleBits(GPIOE,GPIO_Pin_13); GPIO_ToggleBits(GPIOE,GPIO_Pin_14); } void KEY_Init() { GPIO_InitTypeDef KEY1,KEY2; //先开启对应用到的模块时钟节拍 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE); //初始化KEY1 KEY1.GPIO_Pin = GPIO_Pin_0 ; KEY1.GPIO_Mode = GPIO_Mode_IN; KEY1.GPIO_Speed = GPIO_Fast_Speed; KEY1.GPIO_OType = GPIO_OType_PP; KEY1.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA,&KEY1); //初始化KEY2、KEY3、KEY4 KEY2.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4; KEY2.GPIO_Mode = GPIO_Mode_IN; KEY2.GPIO_Speed = GPIO_Fast_Speed; KEY2.GPIO_OType = GPIO_OType_PP; KEY2.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOE,&KEY2); } int main() { LED_Init(); KEY_Init(); int key1 = 1; int key2 = 1; int key3 = 1; int key4 = 1; while(1) { if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 0) //判断KEY1是否被按下 { delay_ms(50); //延时消抖 if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 0) //判断KEY1是否被按下 { if(key1) //标志位 { key1 = 0; //标志位置0 GPIO_ToggleBits(GPIOF,GPIO_Pin_9); //点亮D1 GPIO_ToggleBits(GPIOF,GPIO_Pin_8); //按键提示音(开) delay_ms(5); GPIO_ToggleBits(GPIOF,GPIO_Pin_8); //按键提示音(关) } } } if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1) //判断KEY1是否被松开 key1 = 1; //标志位置1 if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) == 0) //判断KEY2是否被按下 { GPIO_ToggleBits(GPIOF,GPIO_Pin_10); //点亮D2 GPIO_ToggleBits(GPIOF,GPIO_Pin_10); //熄灭D1 if(key2) //标志位 { key2 = 0; //标志位置0 GPIO_ToggleBits(GPIOF,GPIO_Pin_8); //按键提示音(开) delay_ms(5); GPIO_ToggleBits(GPIOF,GPIO_Pin_8); //按键提示音(关) } } if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) == 1) //判断KEY2是否被松开 key2 = 1; //标志位置1 if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == 0) //判断KEY3是否被按下 { delay_ms(50); //延时消抖 if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == 0) //判断KEY3是否被按下 { if(key3) //标志位 { key3 = 0; //标志位置0 GPIO_ToggleBits(GPIOE,GPIO_Pin_13); //点亮D3 GPIO_ToggleBits(GPIOF,GPIO_Pin_8); //按键提示音(开) delay_ms(5); GPIO_ToggleBits(GPIOF,GPIO_Pin_8); //按键提示音(关) } } } if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == 1) //判断KEY3是否被松开 key3 = 1; //标志位置1 if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) == 0) //判断KEY4是否被按下 { GPIO_ToggleBits(GPIOE,GPIO_Pin_14); //点亮D4 GPIO_ToggleBits(GPIOE,GPIO_Pin_14); //熄灭D4 if(key4) //标志位 { key4 = 0; //标志位置0 GPIO_ToggleBits(GPIOF,GPIO_Pin_8); //按键提示音(开) delay_ms(5); GPIO_ToggleBits(GPIOF,GPIO_Pin_8); //按键提示音(关) } } if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) == 1) //判断KEY4是否被松开 key4 = 1; //标志位置1 } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1602 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1536 浏览 1 评论
967 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
680 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1579 浏览 2 评论
1860浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
640浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
513浏览 3评论
527浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
500浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 09:21 , Processed in 0.863119 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号