久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2833|回復: 0
收起左側

單片機超聲波入門學習(新手想學的進來)有仿真

[復制鏈接]
ID:424598 發(fā)表于 2020-10-28 20:52 | 顯示全部樓層 |閱讀模式
說明: 本貼仿真和源碼是使用以下貼子修改而來

單片機超聲波測距Proteus仿真與源代碼


51hei截圖20201028204210544.jpg


在原基礎上做了二個版本, 一個是精簡版本, 方便理解超聲波的相關代碼
另一個是自己拓展的思路

無標題.png


  1. /*
  2.         注: 以下代碼真實環(huán)璄下,STC89C52最小單片機上測試成功
  3.         使用模塊:
  4.                 1.最小單片機STC89C52
  5.                 2.超聲波HC-SR04
  6.                 3.L298N調速模塊+小風扇
  7.         進階功能(利用超聲波檢測是否有人存在, 自動啟動/停止小風扇):
  8.                 1.超聲波對著人坐的位置(根據(jù)實際距離自行調整BJZ的值)
  9.                 2.當檢測到有人時(S<=BJZ 且 Someone>=5), FengShan置高電平(電扇啟動), 并進入循環(huán)檢測
  10.                 3.當檢測到無人時(Unmanned>=10), FengShan置低電平(電扇停止), 并進入循環(huán)檢測
  11.                 4.當無人時, Unmanned變量+1, Someone變量=0
  12.                 5.當有人時Someone變量+1, Unmanned變量=0
  13. */

  14. /*
  15.         大家可以自行拓展更多實用功能, 如:
  16.                 小便池自動沖水器
  17.                 放門口的來客"歡迎光臨"等等
  18. */

  19. //加載配置文件
  20. #include <reg52.H>
  21. #include <intrins.h>

  22. //類型轉義
  23. #define uchar unsigned char        
  24. #define uint unsigned int
  25. #define ulong unsigned long

  26. /**********************************************************************************************************/

  27. //超聲波接口
  28. sbit RX  = P3^2; //接超聲波的echo引腳
  29. sbit TX  = P3^3; //接超聲波的trig引腳

  30. //用蜂鳴器或Led二極管模擬測試
  31. sbit FengShan= P2^0; //負極接P2^0,正極接VCC(蜂鳴器最好是用三極管放大)

  32. //變量聲明
  33. uint time=0;
  34. uint timer=0;
  35. uchar posit=0;
  36. ulong S=0;        //超聲波檢查距離CM
  37. ulong BJZ=50; //報警距離CM
  38. uint i; //循環(huán)記次數(shù)
  39. uint Unmanned=0; //檢測到無人的次數(shù)
  40. uint Someone=0; //檢測到有人的次數(shù)

  41. bit Flag_CSB=0; //超聲波的中斷溢出標志

  42. /**********************************************************************************************************/
  43. //************ 計算 ************
  44. void Conut(void)
  45. {
  46.         time=TH0*256+TL0; //讀出T0的計時數(shù)值
  47.         TH0=0;TL0=0; //清空計時器
  48.         S=(time*1.7)/100; //算出來是CM
  49.         //聲音的速度是340m/s,時間的單位是us,計算到秒需要將時間數(shù)據(jù)/1000000,
  50.         //長度=速度*時間,340*time/1000000,長度數(shù)據(jù)單位是m轉換成cm需要乘以100得到340*time/10000,
  51.         //小數(shù)點都向左移兩位得到3.4*time/100,因為超聲波是往返了,所以再除以2,得到距離數(shù)據(jù)(time*1.7)/100
  52.         
  53.         if((S>=700) || Flag_CSB==1) //超出測量范圍
  54.         {        
  55.                 FengShan=1; //停止風扇
  56.                 Flag_CSB=0; //中斷溢出標志
  57.         }
  58.         else
  59.         {
  60.                 //距離小于報警值
  61.                 if(S<=BJZ)
  62.                 {        
  63.                         Someone+=1; //有人時+1
  64.                         Unmanned=0; //無人時置0
  65.                         if (Someone>=5) //為了判斷準確, 連續(xù)檢測5次有人才會啟動風扇
  66.                         {
  67.                                 FengShan=0; //啟動風扇
  68.                                 Someone=0;
  69.                         }                        
  70.                 }
  71.                 else  //大于
  72.                 {
  73.                         Unmanned+=1; //無人時+1
  74.                         Someone=0; //有人時置0
  75.                         if (Unmanned>=10) //為了判斷準確, 連續(xù)檢測10次無人才會停止風扇
  76.                         {
  77.                                 FengShan=1;        //停止風扇
  78.                                 Unmanned=0;
  79.                         }                        
  80.                 }
  81.         }
  82. }


  83. /**********************************************************************************************************/
  84. /***********超聲波的定時器0初始化***********/
  85. void CSB_Timer0(void)
  86. {
  87.         TMOD=0x11; //設T0為方式1
  88.         TH0=0;
  89.         TL0=0;         
  90.         TH1=0xf8; //2MS定時
  91.         TL1=0x30;
  92.         ET0=1; //允許T0中斷
  93.         ET1=1; //允許T1中斷
  94.         TR1=1; //開啟定時器
  95.         EA=1; //開啟總中斷
  96. }

  97. //************ 主函數(shù) ************
  98. void main(void)
  99. {  
  100.         CSB_Timer0();        
  101.         FengShan=0; //啟動風扇

  102.         while(1)
  103.         {
  104.                 while(!RX); //當上次接收完波后,RX引腳是低電平,取反就是1,此while成立,反復判斷RX狀態(tài)。當RX沒有接收到返回波時是高電平,取反就是0,此while不成立,跳出
  105.                 TR0=1; //開啟計數(shù)
  106.                 while(RX); //當RX沒有接收到返回波,此while成立,程序停在這里一直判斷RX狀態(tài)。當RX接收到返回波,RX引腳變?yōu)榈碗娖剑藈hile不成立,跳出
  107.                 TR0=0; //停止計數(shù)
  108.                 Conut(); //計算
  109.         }
  110. }

  111. /**********************************************************************************************************/
  112. //************ 定時器0處理(超聲波) ************
  113. void dsq0() interrupt 1 //T0中斷用來計數(shù)器溢出,超過測距范圍
  114. {
  115.         Flag_CSB=1; //中斷溢出標志
  116. }

  117. //************ 定時器1(超聲波) ************
  118. void dsq1() interrupt 3 //T1中斷用于計800MS啟動模塊
  119. {
  120.         TH1=0xf8;
  121.         TL1=0x30; //定時2ms
  122.         timer++; //變量加
  123.         if(timer>=400) //400次就是800ms
  124.         {
  125.                 timer=0;
  126.                 TX=1; //800MS  啟動一次模塊
  127.                 for(i=0;i<21;i++)
  128.                 {
  129.                 _nop_();
  130.                 }
  131.                 TX=0;
  132.         }
  133. }   
復制代碼

全部資料51hei下載地址:
51超聲波學習.zip (94.74 KB, 下載次數(shù): 26)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕中文字幕 | 91在线免费视频 | 日韩中文字幕 | 久久久久久99 | 日韩一区在线观看视频 | 亚洲欧美精品在线观看 | 国产成人精品一区二区 | 色在线免费视频 | 欧美激情第一区 | 中文字幕一区在线观看视频 | 黄色免费在线观看网站 | 国产精品明星裸体写真集 | 国产亚洲精品美女久久久久久久久久 | 精品在线一区二区三区 | 国产日韩欧美激情 | 麻豆精品国产91久久久久久 | 色视频www在线播放国产人成 | 免费高潮视频95在线观看网站 | 中文字幕日韩在线 | 国产免费自拍 | 精品一区二区三区在线观看国产 | 成人九色 | 91在线网站 | 狠狠艹 | 久久蜜桃精品 | 最新av片| 欧美激情一区二区三区 | 国产精品无码专区在线观看 | 香蕉视频久久久 | 99久久国产综合精品麻豆 | 一级免费毛片 | 国产xxxx在线 | 天堂一区二区三区 | 国产亚洲精品久久久久动 | 亚洲三区视频 | 国产成人av在线播放 | 色综合99 | 精品国产欧美一区二区 | 国产精品不卡一区 | 亚洲欧美日韩电影 | 欧美一区在线视频 |