#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_key.h"
int main(void)
{
/* LED端口初始化,跟上一节的LED一模一样,直接拿过来用 */
LED_GPIO_Config();
LED1_ON;
/* 按键端口初始化 ,在上一节的基础上改了一点点东西而已*/
Key_GPIO_Config();
/* 轮询按键状态,若按键按下则反转LED 。强行做了一个按键检测和LED灯亮灭的关系函数。让检测到按下一次,灯状态反转一次。
用的是 #define digitalToggle(p,i) {p->ODR ^=i;} //输出反转状态 这个函数,这个函数还没搞明白??让LED1端口(GPIOB)的ODR值(0001)与LED1的pin脚值(GPIO_Pin_5)取异或,结果再给ODR。
#define LED1_TOGGLE digitalToggle(LED1_GPIO_PORT,LED1_GPIO_PIN) 异或运算:位相同则为0,位不同则为1;*/
while(1)
{
if( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON )
{
/*LED1反转*/
LED1_TOGGLE;
}
if( Key_Scan(KEY2_GPIO_PORT,KEY2_GPIO_PIN) == KEY_ON )
{
/*LED2反转*/
LED2_TOGGLE;
}
}
}
/*********************************************END OF FILE**********************/
bsp_key.c
/* *函数名:Key_Scan
* 描述 :检测是否有按键按下
* 输入 :GPIOx:x 可以是 A,B,C,D或者 E
* GPIO_Pin:待读取的端口位
* 输出 :KEY_OFF(没按下按键)、KEY_ON(按下按键) */
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{
/*检测是否有按键按下 */
if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON )
{
/*等待按键释放 */
while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON);
return KEY_ON;
}
else
return KEY_OFF;
版权声明:本文为CSDN博主「刘小强857」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44386138/article/details/122467541
#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_key.h"
int main(void)
{
/* LED端口初始化,跟上一节的LED一模一样,直接拿过来用 */
LED_GPIO_Config();
LED1_ON;
/* 按键端口初始化 ,在上一节的基础上改了一点点东西而已*/
Key_GPIO_Config();
/* 轮询按键状态,若按键按下则反转LED 。强行做了一个按键检测和LED灯亮灭的关系函数。让检测到按下一次,灯状态反转一次。
用的是 #define digitalToggle(p,i) {p->ODR ^=i;} //输出反转状态 这个函数,这个函数还没搞明白??让LED1端口(GPIOB)的ODR值(0001)与LED1的pin脚值(GPIO_Pin_5)取异或,结果再给ODR。
#define LED1_TOGGLE digitalToggle(LED1_GPIO_PORT,LED1_GPIO_PIN) 异或运算:位相同则为0,位不同则为1;*/
while(1)
{
if( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON )
{
/*LED1反转*/
LED1_TOGGLE;
}
if( Key_Scan(KEY2_GPIO_PORT,KEY2_GPIO_PIN) == KEY_ON )
{
/*LED2反转*/
LED2_TOGGLE;
}
}
}
/*********************************************END OF FILE**********************/
bsp_key.c
/* *函数名:Key_Scan
* 描述 :检测是否有按键按下
* 输入 :GPIOx:x 可以是 A,B,C,D或者 E
* GPIO_Pin:待读取的端口位
* 输出 :KEY_OFF(没按下按键)、KEY_ON(按下按键) */
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{
/*检测是否有按键按下 */
if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON )
{
/*等待按键释放 */
while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON);
return KEY_ON;
}
else
return KEY_OFF;
版权声明:本文为CSDN博主「刘小强857」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44386138/article/details/122467541
暂无评论