一、功能簡介
本項目使用Proteus8仿真STM32單片機控制器,使用LCD1602液晶、按鍵、繼電器電機模塊、DS18B20溫度傳感器、蜂鳴器LED、HCSR04超聲波等。
主要功能:
系統(tǒng)運行后,LCD1602顯示DS18B20采集溫度和超聲波檢測距離。
可通過K1鍵對報警距離閾值設(shè)置,可通過K2、K3鍵對閾值加減調(diào)節(jié),
若檢測距離大于閾值,關(guān)閉聲光報警,倒車?yán)^續(xù);
若檢測距離小于閾值,大于最低值,倒車?yán)^續(xù),打開聲光報警,且距離越近,聲光報警頻率越高;
若檢測距離小于最小距離值,關(guān)閉聲光報警,剎車開啟;
二、軟件設(shè)計
/*
作者:嗨小易(QQ:3443792007)
*/
//系統(tǒng)數(shù)據(jù)顯示
void sys_data_show(void)
{
u8 buf[6];
while(1)
{
//溫度符號顯示
if(sys_ctrl.sign==1)
lcd1602_show_num(5,0,'-',0);
else
lcd1602_show_num(5,0,' ',0);
//溫度顯示
buf[0]=sys_ctrl.temp/1000+0x30;
if(buf[0]==0x30)buf[0]=' ';
buf[1]=sys_ctrl.temp%1000/100+0x30;
if(buf[0]==' ' && buf[1]==0x30)buf[1]=' ';
buf[2]=sys_ctrl.temp%1000%100/10+0x30;
buf[3]='.';
buf[4]=sys_ctrl.temp%1000%100%10+0x30;
buf[5]='\0';
lcd1602_show_string(6,0,buf);
//在正常模式下,對距離檢測顯示
if(sys_ctrl.mode==0)
{
//距離檢測值顯示
buf[0]=sys_ctrl.dis/1000+0X30;
if(buf[0]==0x30)buf[0]=' ';
buf[1]=sys_ctrl.dis%1000/100+0X30;
if(buf[0]==' ' && buf[1]==0x30)buf[1]=' ';
buf[2]=sys_ctrl.dis%1000%100/10+0X30;
buf[3]='.';
buf[4]=sys_ctrl.dis%1000%100%10+0X30;
buf[5]='\0';
lcd1602_show_string(5,1,buf);
}
//在設(shè)置模式下,距離參數(shù)設(shè)置
else
{
buf[0]=sys_ctrl.dis_h/1000+0X30;
if(buf[0]==0x30)buf[0]=' ';
buf[1]=sys_ctrl.dis_h%1000/100+0X30;
if(buf[0]==' ' && buf[1]==0x30)buf[1]=' ';
buf[2]=sys_ctrl.dis_h%1000%100/10+0X30;
buf[3]='.';
buf[4]=sys_ctrl.dis_h%1000%100%10+0X30;
buf[5]='\0';
lcd1602_show_string(5,1,buf);
}
break;
}
}
//系統(tǒng)數(shù)據(jù)設(shè)置
void sys_data_set(void)
{
u8 key=0;
key=KEY_Scan(0);
if(key==KEY1_PRESS)//設(shè)置
{
//關(guān)閉相應(yīng)指示
SC_RELAY=1;
BEEP=1;
ALARM_LED=1;
sys_ctrl.mode=!sys_ctrl.mode;
if(sys_ctrl.mode)lcd1602_show_string(0,1,"SetH: cm");
else lcd1602_show_string(0,1,"Juli: cm");
}
//在設(shè)置模式下,加減鍵才有效
if(sys_ctrl.mode==1)
{
if(key==KEY2_PRESS)//加
{
sys_ctrl.dis_h+=VALUE_STEP;
if(sys_ctrl.dis_h>ALARM_DIST_MAX)sys_ctrl.dis_h=ALARM_DIST_MIN;
}
else if(key==KEY3_PRESS)//減
{
sys_ctrl.dis_h-=VALUE_STEP;
if(sys_ctrl.dis_h<ALARM_DIST_MIN)sys_ctrl.dis_h=ALARM_DIST_MAX;
}
}
}
//系統(tǒng)功能控制
void sys_fun_ctrl(void)
{
//正常檢測模式下,數(shù)據(jù)對比
while(sys_ctrl.mode==0)
{
//當(dāng)檢測距離大于報警閾值,取消聲光報警
if(sys_ctrl.dis>sys_ctrl.dis_h)
{
SC_RELAY=0;//倒車開啟
BEEP=1;
ALARM_LED=1;
}
//當(dāng)檢測距離小于報警閾值,并且高于最小距離值,聲光報警
else if(sys_ctrl.dis>sys_ctrl.dis_l)
{
SC_RELAY=0;//倒車開啟
BEEP=!BEEP;
ALARM_LED=!ALARM_LED;
delay_ms(sys_ctrl.dis);
}
else
{
SC_RELAY=1;//倒車停止,剎車
BEEP=1;
ALARM_LED=1;
}
break;
}
}
//應(yīng)用控制系統(tǒng)
void appdemo_show(void)
{
u8 i=5;
sys_parm_init();//系統(tǒng)參數(shù)初始化
KEY_Init();
BEEP_Init();
DS18B20_Init();
ctrl_pin_init();
lcd1602_init();//LCD1602初始化
//讀取溫度數(shù)據(jù),等待穩(wěn)定
while(i--)
{
sys_ctrl.temp=DS18B20_GetTemperture();
delay_ms(100);
}
sys_open_show();//系統(tǒng)初始界面顯示
ultrasonicwave_init();//超聲波初始化
SC_RELAY=0;//倒車開啟
while(1)
{
sys_data_get();//系統(tǒng)數(shù)據(jù)獲取
sys_data_show();//系統(tǒng)數(shù)據(jù)顯示
sys_data_set();//系統(tǒng)數(shù)據(jù)設(shè)置
sys_fun_ctrl();//系統(tǒng)功能控制
}
}
三、實驗現(xiàn)象
B站演示視頻:https://space.bilibili.com/444388619
文章來源:http://www.zghlxwxcb.cn/news/detail-728228.html
聯(lián)系作者
專注于51單片機、STM32、國產(chǎn)32、DSP、Proteus、ardunio、ESP32、物聯(lián)網(wǎng)軟件開發(fā),PCB設(shè)計,視頻分享,技術(shù)交流。文章來源地址http://www.zghlxwxcb.cn/news/detail-728228.html
到了這里,關(guān)于【Proteus仿真】【STM32單片機】汽車倒車報警系統(tǒng)設(shè)計的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!