完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
基于stm32f407,为实现以上功能,可将问题分为三个部分:LED、蜂鸣器和按键输入。
led部分 LED部分 c文件中分为三部分:①使能IO口时钟,②初始化IO口模式,③使IO口输出高电平 #include "stm32f4xx.h" #include "led.h" void LED_Init() { GPIO_InitTypeDef GPIO_InitLed; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE); GPIO_InitLed.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10; GPIO_InitLed.GPIO_Mode=GPIO_Mode_OUT; GPIO_InitLed.GPIO_OType=GPIO_OType_PP; GPIO_InitLed.GPIO_PuPd=GPIO_PuPd_UP; GPIO_InitLed.GPIO_Speed=GPIO_High_Speed; GPIO_Init(GPIOF,&GPIO_InitLed); GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10); h文件中对LED_Init 进行申明,同时对两个LED灯通过位带操作进行定义: #include "stm32f4xx.h" #ifndef __LED_H #define __LED_H #define LED0 PFout(9) #define LED1 PFout(10) void LED_Init(void); #endif 蜂鸣器部分 c文件中分为三部分:①使能IO口时钟,②初始化IO口模式,③使IO口输出低电平 #include "beep.h" #include "stm32f4xx.h" void BEEP_Init(void) { GPIO_InitTypeDef GPIO_InitBeep; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE); GPIO_InitBeep.GPIO_Pin=GPIO_Pin_8; GPIO_InitBeep.GPIO_Mode=GPIO_Mode_OUT; GPIO_InitBeep.GPIO_OType=GPIO_OType_PP; GPIO_InitBeep.GPIO_PuPd=GPIO_PuPd_DOWN; GPIO_InitBeep.GPIO_Speed=GPIO_High_Speed; GPIO_Init(GPIOF,&GPIO_InitBeep); GPIO_ResetBits(GPIOF,GPIO_Pin_8); } h文件部分,申明函数BEEP_Init,定义BEEP #include "stm32f4xx.h" #ifndef __BEEP_H #define __BEEP_H void BEEP_Init(void); #define BEEP PFout(8) #endif 按键输入部分 C文件中含有两个函数,第一个函数KEY_Init:①使能IO口时钟,②初始化IO口模式 第二个函数为按键扫描函数,KEY0检测到被按下后返回1给KEY-Scan if(mode)key_up=1;可实现连续扫描(mode=1)和不连续扫描(mode=0)。 #include "key.h" #include "stm32f4xx.h" #include "delay.h" void KEY_Init(void) { GPIO_InitTypeDef GPIO_InitKey; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE); GPIO_InitKey.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_3|GPIO_Pin_2; GPIO_InitKey.GPIO_PuPd=GPIO_PuPd_UP; GPIO_InitKey.GPIO_Mode=GPIO_Mode_IN; GPIO_InitKey.GPIO_Speed=GPIO_High_Speed; GPIO_Init(GPIOE,&GPIO_InitKey); } u8 KEY_Scan(u8 mode) { static u8 key_up=1; if(mode)key_up=1; if(key_up&&(KEY0==0)) { delay_ms(10); key_up=0; if(KEY0==0)return 1; }else if(KEY0==1) key_up=1; return 0; } h文件中,对c文件中的两个函数进行申明,并对按键进行定义。 #ifndef __KEY_H #define __KEY_H #include "stm32f4xx.h" void KEY_Init(void); u8 KEY_Scan(u8); #define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) #endif main函数 #include "stm32f4xx.h" #include "delay.h" #include "led.h" #include "beep.h" #include "key.h" int main(void) { u8 key; KEY_Init(); delay_init(168); LED_Init(); BEEP_Init(); while(1) { key=KEY_Scan(0); if(key!=0) { LED0=!LED0; LED1=!LED1; BEEP=!BEEP; } else delay_ms(10); } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1792 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1626 浏览 1 评论
1094 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
732 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1682 浏览 2 评论
1943浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
744浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
578浏览 3评论
601浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
563浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 19:49 , Processed in 0.875353 second(s), Total 74, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号