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

標題: stc15單片機超聲波測距教程 [打印本頁]

作者: phpython    時間: 2017-3-31 15:40
標題: stc15單片機超聲波測距教程
我想做超聲波測距,用89c51系列的很簡單,再這個系列的單片機太慢,現在基本上都
用stc15系列了吧,我現在都是stc15系列了,價格便宜,速度快。電壓還是寬電壓,在3.3v~5v之間
都可以,主要是速度快了,就可以處理更多的程序了。
好了,不說費話了,
其實用過stc15系列做超聲波測距,就知道有個問題就是,單片機的速度快了,那么定時器
跑一圈的時間就少了,像stc15t系列跑一圈才 1除以12乘以65536,計算公式
1/12*65536=5.461ms左右。聲音的速度大概為 us/58cm, 5461/58=94.2cm左右,發現計時器不夠用了,
這個時候就得想辦法了,
一般新手就不知道怎么辦了,
其它很簡單,定一個全局變量,記錄跑了幾圈,然后乘以65536,
具體的程序可以了看下面我發的 馬偉的教程
上面有詳細介紹。這里我就不多說,
那個教程寫的很清楚。
寫教程太花時間了。

教程:
本教程用的硬件清單:
    單片機:stc12c5a60s2、stc15w408as、stc15f2k60等
    超聲波模塊:HC-SR04
超聲波測距的特點就是便宜,缺點就不說了,主要說說超聲波器距離模塊的用法原理吧,模塊圖如下:



好了,超聲波模塊的簡介就這么多了,話不多說,直接上程序

源程序:

  1. #include "STC12C5A.H"

  2. typedef unsigned char u8;
  3. typedef unsigned int u16;

  4. sbit Trig = P2^1;
  5. sbit Echo = P2^0;

  6. //聲明函數
  7. void getDistance();//獲取距離
  8. void Timer0Init();//初始化定時器0
  9. void UartInit();//初始化串口
  10. void SendData(u8 data_buf); //發送數據到串口
  11. void DelayXms(u16 n); //延時N ms

  12. //定義全局變量
  13. u8 cnt=0; //定時器0中斷次數
  14. u16 time; //計時
  15. u16 distance; //距離


  16. void main(){
  17.     EA = 1;//開啟總中斷

  18.     UartInit();//初始化串口
  19.     Timer0Init();//初始化定時器0

  20.     while(1){
  21.         getDistance(); //獲取距離
  22.         DelayXms(800); //延時
  23.     }

  24. }

  25. //獲取距離
  26. void getDistance()
  27. {
  28.     u8 i,j=60;
  29.     u8 str[] = "D:-.--M";

  30.     TH0 = TL0 = cnt = 0; //初始化定時器0
  31.     Trig = 1; //拉高超聲波模塊觸發IO
  32.     while(j--); // 延時20us
  33.     Trig = 0; //拉低超聲波模塊觸發IO
  34.     while(!Echo);//等待超聲波模塊輸出IO拉高
  35.     TR0 = 1; //開啟定時器計時
  36.     while(Echo); //等待超聲波模塊輸出IO拉低
  37.      TR0 = 0; //關閉定時器計時

  38.      //判斷是否超出模塊最大測距 4m
  39.      if(cnt < 5){
  40.          //計算出時間
  41.         time = (TH0 * 256 + TL0 + cnt * 65536) * (1 / 12.000) + 0.5;
  42.         //計算出距離 340m/s 或 us/58cm
  43.         distance = time / 58 + 0.5;
  44.     }else
  45.         distance = 0;

  46.     str[2] = (distance % 1000 / 100) + '0';
  47.     str[4] = (distance % 100 / 10) + '0';
  48.     str[5] = (distance % 10) + '0';
  49.     //從串口發出,也可以用顯示器顯示,自己接顯示驅動就可以了
  50.     for(i=0;i<7;i++){
  51.         SendData(str[i]);
  52.     }
  53.     SendData('');
  54.     //復位定時器
  55.     cnt = 0;
  56.     TH0 = TL0 = 0;
  57. }
  58. //定時器0寄存器初始化
  59. void Timer0Init(void)        //100微秒@12.000MHz
  60. {
  61.     AUXR |= 0x80;        //定時器時鐘1T模式
  62.     TMOD &= 0xF0;        //設置定時器模式
  63.     TMOD |= 0x01;        //設置定時器模式
  64.     TL0 = 0x50;        //設置定時初值
  65.     TH0 = 0xFB;        //設置定時初值
  66.     TF0 = 0;        //清除TF0標志
  67.     TR0 = 0;        //定時器0開始計時
  68.     ET0 = 1; //開啟定時器中斷
  69. }

  70. void T0() interrupt 1
  71. {
  72.     cnt++;
  73. }
  74. //串口初始化定時器1
  75. void UartInit(void)        //4800bps@12.000MHz
  76. {
  77.     SCON=0x52;                  
  78.     AUXR &= 0xFE;
  79.     TMOD=0x20;   
  80.     TH1=TL1=0xf3;
  81.     PCON=0x80;     
  82.     TR1=1;
  83. }

  84. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

下載:
超聲波測距程序.rar (1.25 KB, 下載次數: 505)


作者: xmch    時間: 2017-4-14 20:00
支持一下。
作者: akzyzj    時間: 2017-4-15 00:44
謝謝分享,支持一下            
作者: joesck    時間: 2017-5-17 11:09
謝謝分享,很不錯的資料,感謝
作者: lilining    時間: 2017-6-12 15:32
贊一個
作者: 黑科技李    時間: 2017-6-14 09:50
謝謝分享
作者: 13852833337    時間: 2017-6-16 05:26
很不錯的東西。。謝謝樓主分享
作者: jaytan    時間: 2017-7-12 23:07
謝謝分享!
作者: jaytan    時間: 2017-7-12 23:08
正好用到,強烈支持!
作者: 15680255162    時間: 2017-7-21 16:56
可以用51單片機做嗎?
作者: 山大王    時間: 2017-7-22 22:23
32的有沒有
作者: aftvc    時間: 2017-8-10 08:48
謝謝分享!
作者: JimmyLin    時間: 2017-8-31 20:36
hao  hao哈哈哈好
作者: 2855177040    時間: 2017-9-1 17:09
感謝分享,支持一下。
作者: bbcf123    時間: 2017-9-28 20:17
謝謝分享
作者: chenpp    時間: 2017-12-4 09:18
謝謝呢
作者: li7301298    時間: 2017-12-5 20:46
謝謝樓主分享
作者: A17094430    時間: 2017-12-20 21:03
我也來做一個看看
作者: chunmei    時間: 2018-2-24 15:48
支持 一下!
作者: zmotian    時間: 2018-3-22 17:17
謝謝,非常感謝樓主
作者: 875870842    時間: 2018-4-3 15:59
樓主好人,超級不錯
作者: zhuzeng    時間: 2018-4-5 16:59
感謝分享
作者: narutoa    時間: 2018-6-13 22:44
雖然沒積分下載 但是先 mark了
作者: jackyang75    時間: 2018-7-11 15:35
謝謝分享,很不錯的資料,感謝
作者: tuxiaoxi    時間: 2018-7-11 21:33
好東西 ,謝謝分享
作者: 君子的君    時間: 2018-7-24 15:39
學習學習,謝謝樓主!!!!!!!!
作者: wzk123321    時間: 2018-8-6 02:12
謝謝分享,頂起
作者: bhjyqjs    時間: 2018-8-7 14:32
好東東,謝謝分享!
作者: liyuanchengx    時間: 2018-9-5 14:58
請問:time = (TH0 * 256 + TL0 + cnt * 65536) * (1 / 12.000) + 0.5;程序中為什么要+0.5?
作者: liyuanchengx    時間: 2018-9-5 14:59
請問:time = (TH0 * 256 + TL0 + cnt * 65536) * (1 / 12.000) + 0.5;中為什么要+0.5
作者: 一片到    時間: 2018-9-28 16:50
先學習STc89吧,前面的基礎都還沒懂
作者: 自哦    時間: 2018-11-14 02:26
感謝樓主

作者: 李云能    時間: 2018-12-13 15:21
很好 支持一下
作者: long369351    時間: 2018-12-16 21:54
很好 支持一下
作者: 鐵血大師    時間: 2018-12-17 14:09
這個源程序可以直接復制嗎
作者: 鐵血大師    時間: 2018-12-17 14:38
這個有顯示距離的嗎?顯示是以數碼管顯示還是e1602顯示
作者: 快樂眼淚    時間: 2018-12-18 13:02
感謝樓主分享!
作者: highgong    時間: 2019-3-17 15:01
這個模塊的缺點是什么,還有定時器初始化中TH0和TL0的值為什么不是從0開始計算。
作者: ZimmerHo    時間: 2019-5-15 07:34
不錯不錯
作者: 遷就    時間: 2019-5-15 19:02
謝謝分享
作者: sf116    時間: 2019-5-28 20:54
謝謝分享,下載試試
作者: 3230    時間: 2019-5-30 21:02
來測試下
作者: 開心果666    時間: 2019-6-2 12:31
有封裝庫嗎
作者: fanywe    時間: 2019-6-9 10:23
君子的君 發表于 2018-7-24 15:39
學習學習,謝謝樓主!!!!!!!!

怎么下載的
作者: 鄭子    時間: 2020-1-6 22:37
時間差怎么搞?第二次測距時的時間還算在內嗎?
作者: shadaodadi    時間: 2020-5-24 20:51
速度快了肯定是好事啊,時間不是不夠用,是速度快了,16位的計時器計時時間短, 要延時還不簡單嗎,用12T模式,或者是循環計數就好了,就怕跑的慢,不怕跑的快
作者: robinWei    時間: 2020-6-16 15:35
沒有頭文件,請版主共享一下,謝謝!




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久在线 | 国产男女无遮挡猛进猛出 | 秋霞午夜鲁丝一区二区老狼 | 天天操天天干天天操 | 精品一区二区三区中文字幕 | 日本福利视频 | 婷婷激情综合网 | 日韩不卡在线观看 | 成人在线视频观看 | 日本加勒比视频 | 久久一二三区 | 女子spa高潮呻吟抽搐 | 亚洲成人欧美 | 精品久久国产 | 午夜免费时刻 | 国产裸体永久免费视频网站 | 美日韩丰满少妇在线观看 | 欧美不卡视频 | 久久久久久久久久久国产 | 欧美日韩精品 | 麻豆视频一区二区 | 伊人网在线观看 | 国产综合在线视频 | 欧美视频亚洲视频 | 超碰中文字幕 | 91成年人| 九九热在线精品 | 伊人精品久久 | 国产一区二区网站 | 国产精品视频专区 | 在线观看国产黄色 | 国产农村妇女精品一二区 | av片在线免费观看 | 黄色一级视频网站 | 黄色三级大片 | 欧美成人高清 | av一二三| 99国产在线观看 | 成人爱爱 | 欧美偷拍视频 | 亚洲美女爱爱 |