STM32学习笔记(六)电动车报警项目

文章目录

  • 一、项目设计
  • 二、编程实现

一、项目设计

STM32学习笔记(六)电动车报警项目_第1张图片

  • 如果检测到PA4被拉低(小偷偷车),并且警报模式打开
    则将PB7拉低,继电器通电,喇叭一直响

  • 如果检测到PA5被拉高(按键A按下),设定为开启警报模式
    则将PB7拉低(喇叭响),2秒后恢复电平(喇叭不响),表示进入警报模式,同时将标志位设置为ON

  • 如果检测到PA6被拉高(按键B按下),设定为关闭警报模式
    则将PB7拉低(喇叭响),1秒后恢复电平(喇叭不响),表示关闭警报模式,同时将标志位设置为OFF

二、编程实现

#define J_ON 1
#define J_OFF 0
//重写中断服务函数,如果检测到EXTI中断请求,则进入此函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
static int mark = J_OFF;
switch(GPIO_Pin)
{
case GPIO_PIN_4:
//如果检测到PA4被拉低(小偷偷车),并且警报模式打开
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) == GPIO_PIN_RESET && mark == J_ON)
{
//则将PB7拉低,继电器通电,喇叭一直响
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
}
break;
// 如果检测到PA5被拉高(按键A按下),设定为开启警报模式
case GPIO_PIN_5:
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5) == GPIO_PIN_SET)
{
// 则将PB7拉低(喇叭响),2秒后恢复电平(喇叭不响),表示进入警报模式
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
HAL_Delay(2000);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
// 同时将标志位设置为ON
mark = J_ON;
}
break;
// 如果检测到PA6被拉高(按键B按下),设定为关闭警报模式
case GPIO_PIN_6:
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_6) == GPIO_PIN_SET)
{
// 则将PB7拉低(喇叭响),1秒后恢复电平(喇叭不响),表示关闭警报模式
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
// 同时将标志位设置为OFF
mark = J_OFF;
}
break;
}
}

你可能感兴趣的:(STM32,stm32,单片机,学习)