**
要求:当按键按下的时候,对LED的状态进行取反
装备:电脑,MDK5,STM32F103ZET6开发板,USB线
**
**
首先自己配置一个工程模板,如下所示**
第二步:电路图
第三步:写代码
主函数:
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
int main(void)
{
delay_init();
Led_Init();
key_init();
while(1)
{
key1();
}
}
按键函数:
#include "key.h"
#include "delay.h"
#include "led.h"
void key_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOE, &GPIO_InitStructure);
}
void key1(void)
{
if(KEY1==0)
{
delay_ms(500);
if(KEY1==0)
{
LED1=!LED1;
}
}
}
LED初始化:
#include "led.h"
#include "stm32f10x.h"
void Led_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
按键头文件:
#ifndef _key_
#define _key_
#include "sys.h"
#define KEY1 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)
void key_init(void);
void key1(void);
#endif
LED头文件:
#ifndef _led_
#define _led_
#include "sys.h"
void Led_Init(void);
#define LED1 PCout(1)
#endif
发现缺少一个延时函数,自己写喽。可以使定时器写,也可以是简单的一个计数器。这里就不多介绍。
第四步:结果
按键的时间得按久一些否则会有问题,主要还是消抖的问题。长按500ms就会出现取反,如果太快就会发现一些很神奇的现象,感觉会自闭的。
最后小小的总结一下:
利用库函数写一个简单的程序也许体会不到他的便捷性,但是慢慢地你就会发现他真的好用。不要放弃学习。emmmmm…大概就这样了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)