亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標(biāo)題: 單片機(jī)超聲波入門學(xué)習(xí)(新手想學(xué)的進(jìn)來)有仿真 [打印本頁]

作者: ssk7793    時間: 2020-10-28 20:52
標(biāo)題: 單片機(jī)超聲波入門學(xué)習(xí)(新手想學(xué)的進(jìn)來)有仿真
說明: 本貼仿真和源碼是使用以下貼子修改而來

單片機(jī)超聲波測距Proteus仿真與源代碼





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




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

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

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

  22. //類型轉(zhuǎn)義
  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; //負(fù)極接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; //超聲波的中斷溢出標(biāo)志

  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轉(zhuǎn)換成cm需要乘以100得到340*time/10000,
  51.         //小數(shù)點(diǎn)都向左移兩位得到3.4*time/100,因?yàn)槌暡ㄊ峭盗,所以再除?,得到距離數(shù)據(jù)(time*1.7)/100
  52.         
  53.         if((S>=700) || Flag_CSB==1) //超出測量范圍
  54.         {        
  55.                 FengShan=1; //停止風(fēng)扇
  56.                 Flag_CSB=0; //中斷溢出標(biāo)志
  57.         }
  58.         else
  59.         {
  60.                 //距離小于報警值
  61.                 if(S<=BJZ)
  62.                 {        
  63.                         Someone+=1; //有人時+1
  64.                         Unmanned=0; //無人時置0
  65.                         if (Someone>=5) //為了判斷準(zhǔn)確, 連續(xù)檢測5次有人才會啟動風(fēng)扇
  66.                         {
  67.                                 FengShan=0; //啟動風(fēng)扇
  68.                                 Someone=0;
  69.                         }                        
  70.                 }
  71.                 else  //大于
  72.                 {
  73.                         Unmanned+=1; //無人時+1
  74.                         Someone=0; //有人時置0
  75.                         if (Unmanned>=10) //為了判斷準(zhǔn)確, 連續(xù)檢測10次無人才會停止風(fēng)扇
  76.                         {
  77.                                 FengShan=1;        //停止風(fēng)扇
  78.                                 Unmanned=0;
  79.                         }                        
  80.                 }
  81.         }
  82. }


  83. /**********************************************************************************************************/
  84. /***********超聲波的定時器0初始化***********/
  85. void CSB_Timer0(void)
  86. {
  87.         TMOD=0x11; //設(shè)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; //啟動風(fēng)扇

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

  111. /**********************************************************************************************************/
  112. //************ 定時器0處理(超聲波) ************
  113. void dsq0() interrupt 1 //T0中斷用來計數(shù)器溢出,超過測距范圍
  114. {
  115.         Flag_CSB=1; //中斷溢出標(biāo)志
  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. }   
復(fù)制代碼

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






歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1