找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2500|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于單片機(jī)超聲波測距資料

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:145423 發(fā)表于 2016-10-31 21:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
自己動手下載吧:
超聲波測距 main.rar (1.11 KB, 下載次數(shù): 22)

  1. /*
  2. 超聲波測距
  3. 8-29 HC-SR04模塊用有-2cm的誤差,
  4.                                         但是US-015模塊是正確的

  5. 編程思路
  6.         測距動作
  7.                 開20us的Trig
  8.                 等待Echo上升
  9.                 一旦上升開定時器
  10.                 Echo下降時關(guān)定時器
  11.                 輸出定時器的值
  12.         主程序
  13.                 循環(huán)測距動作
  14.                 間隔1s
  15.         定時器中斷
  16.                 復(fù)位

  17. 準(zhǔn)確性
  18.         與計算公式有關(guān)
  19.         與被測物體的表面積大小有關(guān)
  20.         與角度有關(guān)
  21. */
  22. #include <stdio.h>
  23. #include <intrins.h>
  24. #include <math.h>
  25. #include <STC12C5A60S2.H>

  26. sbit hcsr04_trig = P2^0;//發(fā)
  27. sbit hcsr04_echo = P3^2;//收 INT0
  28. sbit hcsr04_test = P2^1;//測試

  29. unsigned char data hcsr04_tl        = 0;
  30. unsigned char data hcsr04_th        = 0;
  31. unsigned int        data hcsr04_s        = 0;

  32. void Delay20us()                //@11.0592MHz
  33. {
  34.         unsigned char i;

  35.         _nop_();
  36.         i = 52;
  37.         while (--i);
  38. }

  39. void Delay1000ms()                //@11.0592MHz
  40. {
  41.         unsigned char i, j, k;

  42.         i = 43;
  43.         j = 6;
  44.         k = 203;
  45.         do
  46.         {
  47.                 do
  48.                 {
  49.                         while (--k);
  50.                 } while (--j);
  51.         } while (--i);
  52. }

  53. void UART_init()
  54. {
  55.         PCON        = 0x00;
  56.         SCON        = 0x50;//0101 0000
  57.         TMOD        |= 0x20 ;
  58.         TH1                = 0xFD;//9600bps
  59.         TL1                = 0xFD;
  60.         ET1                = 0;
  61.         ES                = 0;//1時開串口中斷
  62.         TR1                = 1;

  63.         TI                 = 1;
  64.         puts("HC-SR04 \t--------");
  65.         Delay20us();        
  66.         puts("UART_init \t-");
  67.         Delay20us();        
  68. }

  69. void t0_init()
  70. {
  71.         TMOD         |= 0x01;//T0工作方式1------16位
  72.         TH0         = 0x00;
  73.         TL0         = 0x00;        
  74.         ET0         = 1;//T0中斷
  75.         EA                 = 1;        
  76.         
  77.         puts("t0_init \t-");
  78.         Delay20us();        
  79. }

  80. void t0ser() interrupt 1
  81. {
  82.         TH0 = 0;
  83.         TL0 = 0;
  84. }

  85. /*
  86. HC-SR04 模塊工作原理
  87. 1.Trig觸發(fā)測距 >=10us 高電平
  88. 2.模塊自動發(fā)送8個40kHz方波
  89.         自動檢測是否有信號返回
  90. 3.當(dāng)有信號返回時,
  91. */
  92. void hcsr04()
  93. {        
  94.         TR0 = 0;
  95.         TH0        = 0;
  96.         TL0 = 0;
  97.         
  98.         hcsr04_trig = 1;
  99.         Delay20us();
  100.         hcsr04_trig = 0;
  101.         Delay20us();
  102.         while(!hcsr04_echo);        
  103.         TR0 = 1;
  104.         while(hcsr04_echo);
  105.         TR0 = 0;
  106.         
  107.         // hcsr04_s = (TH0*256+TL0)/58;        
  108.         hcsr04_s =(TH0*256+TL0+59)*0.0172;
  109. }

  110. void main(void)
  111. {        
  112.         UART_init();        
  113.         t0_init();        

  114.         while(1)
  115.         {        
  116.                 hcsr04();
  117.                 printf("MAIN \thcsr04_s = %d\n",
  118.                         hcsr04_s);        
  119.                 Delay1000ms();                                
  120.         }        
  121. }
復(fù)制代碼


評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表