历史上的今天
今天是:2025年02月12日(星期三)
2019年02月12日 | 【stm32f407】轮序方式的按键应用
2019-02-12 来源:eefocus
1. 硬件原理图:

可以看到user button是PA0
2. 程序步骤
1) 使能按键对应IO口时钟。
PA0在AHB1总线上

调用函数:RCC_AHB1PeriphClockCmd ();
2) 初始化IO模式:上拉/下拉输入。
3) 扫描IO口电平
3. 程序原码
key.h
#ifndef _KEY_H_H_H
#define _KEY_H_H_H
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#define KEY_ON 0
#define KEY_OFF 1
void KEY_Init(void);
uint8_t KEY_Scan(void);
#endif
key.c
#include "key.h"
void delay_ms(u16 time)
{
u16 i=0;
while(time--)
{
i=12000;
while(i--);
}
}
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_DOWN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD,&GPIO_InitStruct);
}
uint8_t KEY_Scan(void)
{
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == KEY_ON)
{
delay_ms(5);
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == KEY_ON)
{
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == KEY_ON);
return KEY_ON;
}
else
{
return KEY_OFF;
}
}
return KEY_OFF;
}
main.c
#include "led.h"
#include "key.h"
void User_Delay(__IO uint32_t nCount)
{
while(nCount--)
{
}
}
static int count = 0;
int main(void)
{
LED_Init();
KEY_Init();
while(1)
{
if(KEY_Scan() == KEY_ON)
{
if((count++)%2 == 0)
{
LED_Operate(LED_RED,LED_ON);
}
else
{
LED_Operate(LED_RED,LED_OFF);
}
}
}
}
史海拾趣
|
看看老外(我看那手像是老外:))是怎样制作无线路由器天线。 刻录光盘盒用完了就没什么用了,我们可以利用它来制作一个10dB无线AP定向天线。看图学习制作 http://www.dz3w.com 图片比较多,可以到http://www.dz3w.com/diycn/musicradio/501 ...… 查看全部问答> |
|
我现在的WIFE登录后,重新开机发现不能记住上次我成功登录的网络,密码也不会记,用户使用起来很麻烦。 我也看到别人的机器上能够保存,我找了一下,好象是在PUBLIC下面的NETUI里面实现的,不知道哪位仁兄做过,赐教一下 或是微软有更新过这里, ...… 查看全部问答> |
|
如题,var myTextField=document.getElementById(\"myText\"); 这个没法实现。要是能实现该如何做? 看了yudong54的回帖(http://topic.eeworld.net/u/20091116/14/1b2cc357-3aea-4329-b527-ab7828142f8f.html?26416)说要打08年的补丁和09年一月 ...… 查看全部问答> |
|
大家好. 我碰到了一个vxworks中打印机方面的问题.我的目标机是pc486, TornadoV2.02, 24针老式打印机EPSON LQ-1600K,用telnet 进行连接调试.BUILD中包含了并口组件.现在我想要让打印机打出一些测试文字,然后我写了一小段代码 ******************** ...… 查看全部问答> |
|
承接电子设计(单片机)项目 (一)、PCB LAYOUT(2层 or 4层) 老牛承接专业抄板、画板,质优价廉,可每天查看画板进度,有问题及时沟通。 可加我QQ看画过的样板,因为老牛是个人接活,所以价钱肯定比抄板公司低,希望各位同行有活之余多多照顾。 ...… 查看全部问答> |
|
reg=get_datas_bit(7654321,6); 该函数在main下掉用,返回的reg=6; 但从子函数中经过1个if,2个switch后掉用后返回的reg=0; 函数如下: u8 get_datas_bit(u32 datain,u8 sp) { u8 i,value; &nb ...… 查看全部问答> |




