基于STM32 的防火防盗智能系统包含:“STM32F103C8T6,0.96寸OLED,MQ_2烟雾传感器,红外监测传感器,4*4矩阵键盘,声光报警”
该系统为了方便直接由模块拼组。实现功能比较简单,后期继续扩展。可以实现实时显示温度值,密码输入功能,烟雾报警,红外报警。
主函数代码如下:
while(1)
{
k++;
ad = ADC_Trans();
val = 3.3/4095*ad;
printf("电压值:%f\r\n",val);
if(val>1.5)
{
printf("电压值:%f\r\n",val);
delay_ms(2000);
OLED_ShowChinese(32,16,22,16,1);//烟
OLED_ShowChinese(48,16,23,16,1);//雾
OLED_ShowChinese(64,16,31,16,1);//异
OLED_ShowChinese(80,16,32,16,1);//常
OLED_Refresh();
GPIO_ResetBits(LED1_PORT,LED1_PIN);
GPIO_SetBits(BUZ_PORT,BUZ_PIN);
}
while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_14) == SET ) ///红外
{
OLED_ShowChinese(32,16,27,16,1);//有
OLED_ShowChinese(48,16,28,16,1);//人
OLED_ShowChinese(64,16,29,16,1);//出
OLED_ShowChinese(80,16,30,16,1);//没
OLED_Refresh();
GPIO_ResetBits(LED1_PORT,LED1_PIN);
GPIO_SetBits(BUZ_PORT,BUZ_PIN);
// printf("warning");
// delay_ms(2000);
}
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_14) != SET&&val<1.5)
{
GPIO_SetBits(LED1_PORT,LED1_PIN);
GPIO_ResetBits(BUZ_PORT,BUZ_PIN);
}
if(k%50==0)
{
temper=DS18B20_GetTemperture();
if(temper<0)
{
printf("检测的温度为:-");
}
else
{
printf("检测的温度为: ");
}
printf("%.2f°C\r\n",temper);
temp = (uint16_t)DS18B20_GetTemperture();
OLED_ShowNum(0,0,temper,2,16,1);
OLED_ShowString(16,0,"^C",16,1);
OLED_Refresh();
}
delay_ms(10);
key_val = Matrix_Key_Scan();
if (key_val > 0 && key_val < 17)
printf("This is S%d key\r\n",key_val);
OLED_ShowChinese(32,16,12,16,1);//输
OLED_ShowChinese(48,16,13,16,1);//入
OLED_ShowChinese(64,16,14,16,1);//密
OLED_ShowChinese(80,16,15,16,1);//码
OLED_Refresh();
if (key_val > 0 && key_val < 10)
{
OLED_ShowString(Xlocation+8,Ylocation,"*",16,1);
Xlocation = Xlocation+8;
pass_word_Input[j] =key_val;
j++;
if(Xlocation==72){Xlocation=24;j=0;}
}
if(key_val == 10) ///A-确认密码
{
if(pass_word_Input[0]==1&&pass_word_Input[1]==2&&pass_word_Input[2]==3&&pass_word_Input[3]==4
&&pass_word_Input[4]==5&&pass_word_Input[5]==6)
{
OLED_Clear();
OLED_ShowChinese(32,32,14,16,1);//密
OLED_ShowChinese(48,32,15,16,1);//码
OLED_ShowChinese(64,32,16,16,1);//正
OLED_ShowChinese(80,32,17,16,1);//确
OLED_Refresh();delay_ms(5000);
OLED_Clear();
OLED_ShowChinese(32,16,12,16,1);//输
OLED_ShowChinese(48,16,13,16,1);//入
OLED_ShowChinese(64,16,14,16,1);//密
OLED_ShowChinese(80,16,15,16,1);//码
OLED_Refresh(); Xlocation=24;j=0;
for (j=0;j<=5;j++)
{
pass_word_Input[j]=0;
}
}
else
{
OLED_Clear();
OLED_ShowChinese(32,32,14,16,1);//密
OLED_ShowChinese(48,32,15,16,1);//码
OLED_ShowChinese(64,32,18,16,1);//错
OLED_ShowChinese(80,32,19,16,1);//误
OLED_Refresh();delay_ms(5000);
OLED_Clear();
GPIO_ResetBits(LED1_PORT,LED1_PIN);
delay_ms(2000);
GPIO_SetBits(LED1_PORT,LED1_PIN);
OLED_ShowChinese(32,16,12,16,1);//输
OLED_ShowChinese(48,16,13,16,1);//入
OLED_ShowChinese(64,16,14,16,1);//密
OLED_ShowChinese(80,16,15,16,1);//码
OLED_Refresh(); Xlocation=24;j=0;
}
}
}
}