(Proteus仿真圖及程序文件由附件下載)
要想做超聲波測距系統的仿真,核心是怎么解決這個問題:實物系統實際存在的超聲波并利用它測距如何在仿真圖中實現。我也下載過很多別人的仿真圖,可是自己一運行就是沒顯示,全部都不能用,其實問題就是出在仿真圖中超聲波發射接收模塊。經過修改的仿真圖如下(親測可用)
1.png (216.48 KB, 下載次數: 98)
下載附件
2020-7-18 22:55 上傳
這個仿真圖還包含按鍵設置模塊和報警模塊(前者用于設置報警值,后者在測得距離小于設置報警值時候蜂鳴器報警),由上圖中標注的按鍵模塊和報警模塊實現,按鍵設置模塊用法如下:
按下一次KEY1,顯示屏顯示當前設置的報警值,按下KEY2最小值加1CM,按下KEY2減1CM,設置完成后按下KEY1保存,顯示屏返回顯示距離,如此往復循環。
KEIL程序框架圖
2.png (277.53 KB, 下載次數: 78)
下載附件
2020-7-18 23:06 上傳
單片機源程序如下:
- #include "task.h"
- extern unsigned int S; //聲明距離緩存變量,在文件"task.c"中定義
- extern unsigned int dis_buf[4]; //聲明顯示緩存數組,在文件"task.c"中定義
- extern unsigned int code duan_ma[16];
- extern unsigned int S_H, S_L; //S_H:報警上限值,默認400cm,S_L:報警下限值,默認10cm
- /* 主函數 */
- void main(void)
- {
- digDuan = 0x40; //顯示"----"
- digWei1 = 0;
- digWei2 = 0;
- digWei3 = 0;
- digWei4 = 0;
- delayms(1000); //延時大約1s
- InitTimer0(); //定時器0初始化
- while(1)
- {
- count(); //計算距離
- if(S>=S_H || S<=S_L) //如果超出設定的范圍,則顯示"---"
- {
- dis_buf[3] = 0x00;
- dis_buf[2] = 0x40; //顯示"---"
- dis_buf[1] = 0x40;
- dis_buf[0] = 0x40;
- BEEP = 0; //蜂鳴器鳴叫
- delayms(1000);
- }
- else
- {
- BEEP = 1; //關閉蜂鳴器
- dis_distance(); //顯示距離
- }
- if(key_scan() == 1) //如果按下設置鍵,則進入設置報警功能
- {
- BEEP = 0; //按鍵提示音
- delayms(50);
- BEEP = 1;
- delayms(100);
- key_fuction(); //進入設置報警功能
- }
- }
- }
復制代碼
所有資料51hei提供下載:
雷達測距.rar
(120.28 KB, 下載次數: 506)
2020-7-18 23:10 上傳
點擊文件名下載附件
超聲波測距報警系統 下載積分: 黑幣 -5
|