基于STM32单片机的汽车防盗报警系统设计C程序
时间: 2023-06-01 17:02:11 浏览: 242
基于单片机的汽车防盗报警系统设计
5星 · 资源好评率100%
由于汽车防盗报警系统包含多个模块,本文将重点介绍主控制模块的C程序设计。
1. 初始化
在主函数中,首先需要对各个模块进行初始化,包括STM32单片机、LCD显示屏、遥控器接收模块、蜂鸣器等。初始化代码如下:
```
void SystemInit(void)
{
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
RCC_WaitForHSEStartUp();
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_ADCCLKConfig(RCC_PCLK2_Div8);
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
GPIO_Configuration();
USART_Configuration();
NVIC_Configuration();
LCD_Init();
IR_Init();
Buzzer_Init();
}
```
其中,GPIO_Configuration()、USART_Configuration()和NVIC_Configuration()是STM32单片机的初始化函数;LCD_Init()是LCD显示屏的初始化函数;IR_Init()是遥控器接收模块的初始化函数;Buzzer_Init()是蜂鸣器的初始化函数。
2. 主循环
主循环中需要不断检测遥控器是否有信号输入,如果有,则判断输入的信号是否为预设的防盗解锁码。如果是,则关闭报警器,否则继续报警。主循环代码如下:
```
int main(void)
{
SystemInit();
while (1)
{
if (IR_GetData(&IR_ReceivedData))
{
if (IR_ReceivedData == UNLOCK_CODE)
{
Buzzer_Off();
LCD_DisplayString(0, 0, "Unlocked");
}
else
{
Buzzer_On();
LCD_DisplayString(0, 0, "ALARM");
}
}
}
}
```
其中,IR_GetData(&IR_ReceivedData)是遥控器接收模块的函数,用于获取遥控器输入的信号,并将信号保存到IR_ReceivedData变量中;UNLOCK_CODE是预设的防盗解锁码;Buzzer_Off()和Buzzer_On()是蜂鸣器控制函数;LCD_DisplayString(0, 0, "Unlocked")和LCD_DisplayString(0, 0, "ALARM")是LCD显示函数,用于在LCD上显示解锁或报警信息。
3. 中断处理
在遥控器接收模块中,需要使用外部中断来获取遥控器输入的信号。中断处理代码如下:
```
void EXTI15_10_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line12) != RESET)
{
IR_Decode(&IR_ReceivedData);
EXTI_ClearITPendingBit(EXTI_Line12);
}
}
```
其中,EXTI_GetITStatus(EXTI_Line12)用于判断是否有外部中断产生;IR_Decode(&IR_ReceivedData)用于解码遥控器输入的信号,并将信号保存到IR_ReceivedData变量中;EXTI_ClearITPendingBit(EXTI_Line12)用于清除中断标志位。
阅读全文