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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機控制AJ-SR04M超聲波測試程序 實測版

[復制鏈接]
ID:1023100 發表于 2022-5-3 17:04 | 顯示全部樓層 |閱讀模式
該測試程序經過實際驗證,并有實際數據輸出,期間調試所出現的問題進行備注注釋中添加,解決辦法計算公式都已注明,在程序主函數中注明;

同時附錄:
            程序的部分有相應詳細注釋解釋,方便不太理解的朋友觀看;

單片機源程序如下:
  1. #include<reg51.h>

  2. #include<intrins.h>

  3. typedef unsigned char uint8; //重定義u8

  4. typedef unsigned int uint16; //重定義u16

  5. sbit Trig=P3^3;              //觸發引腳定義
  6. sbit Echo=P3^2;              //測量引腳定義
  7. uint16 distance;             //定義全局變量 距離變量
  8. uint16 flag;                 //定義全局變量 標志位


  9. /******************************************

  10. 延時讓Trig引腳產生大于10us的脈沖

  11. ********************************************/
  12. void Delay1ms(uint16 time)                //@11.0592MHz 基于該晶振的1ms延時計算
  13. {
  14.         unsigned char i, j,n;
  15.         for(n=0;n<time;n++)
  16.         {
  17.                 _nop_();
  18.                 _nop_();
  19.                 _nop_();
  20.                 i = 11;
  21.                 j = 190;
  22.                 do
  23.                 {
  24.                         while (--j);
  25.                 } while (--i);
  26.         }        
  27. }


  28. void delay(void) //進行脈沖輸出延時時間
  29. {

  30.         uint8 i;
  31.         for(i=0;i<100;i++); //進行空運轉延時

  32. }

  33. void Init()
  34. {

  35.                 EA=1;      //開總中斷
  36.                 IT0=0;     //外部中斷0,低電平觸發
  37.                 TMOD|=0x01;//定時器0 工作模式1
  38.                 TH0=0;                 //定時器裝載值清0
  39.                 TL0=0;                 //定時器裝載值清0
  40.                 TR0=0;     //關閉定時器0 特定條件觸發開啟
  41. }

  42. //串口設置函數

  43. void UART_init()
  44. {

  45.                 SCON=0x50;  //使能串口接收,同時配置相應的定時器
  46.                 TMOD=0x20;
  47.                 TH1=0xFD;   //波特率9600
  48.                 TL1=0xFD;
  49.                 TR1=1;      //開啟定時器1

  50. }

  51. //發送一個字節函數

  52. void UART_send_byte(uint8 dat)
  53. {

  54.         SBUF=dat;    //數據直接賦值給SBUF
  55.         while(TI==0);//等待發送中斷硬件置1 發送完成
  56.         TI=0;        //硬件中斷軟件清0

  57. }

  58. //串口發送距離函數
  59. void UART_send_dat(uint16 temp)
  60. {

  61.                 UART_send_byte((temp/10000)%10 + '0'); //發送距離千位 +‘0’為輸出字符轉化
  62.                 UART_send_byte((temp/1000)%10 + '0');  //發送距離百位 +‘0’為輸出字符轉化
  63.                 UART_send_byte((temp/100)%10 + '0');   //發送距離十位 +‘0’為輸出字符轉化
  64.                 UART_send_byte((temp/10)%10 + '0');    //發送距離個位 +‘0’為輸出字符轉化
  65.                 UART_send_byte('.');                   //發送小數點字符
  66.                 UART_send_byte(temp%10 + '0');         //發送距離小數點后一位
  67.                 UART_send_byte('c');                   //發送單位CM 字符C
  68.                 UART_send_byte('m');                   //發送單位CM 字符M

  69. }

  70. void main()
  71. {

  72.                 UART_init();  //串口初始化
  73.                 Init();              //初始化
  74.                 Trig=0;       //先把引腳拉低

  75.                 while(1)     //進入主循環
  76.                 {

  77.                                 Trig=1; //電平拉高
  78.                                 delay();//產生脈沖延時
  79.                                 Trig=0; //電平拉低
  80.                                 while(Echo==0);//等待引腳被拉高
  81.                                 TR0=1;//打開定時器0
  82.                                 EX0=1;//打開外部觸發中斷
  83.                                 while(flag==0); //等待信號測算標志位
  84.                                 flag=0; //信號標志位清0
  85.                                 TR0=0;  //關閉定時器0
  86.                                 TL0=0;  //定時器裝載值清0
  87.                                 TH0=0;  //定時器裝載值清0
  88.                                 UART_send_dat(distance);//向串口發送測得的距離值
  89.                                 UART_send_byte('\r');
  90.                                 UART_send_byte('\n');  
  91.                                 //發送回車換行
  92.                                 Delay1ms(10); //方便觀察,延時一定時間,進行距離測算

  93.                 }
  94.                
  95. //                1.型號是
  96. //                        AJ-SR04M 收發一體化 倒車雷達防水型超聲波傳感器測距模塊 K02
  97. //                        模塊版本是:新版本
  98. //                        模塊背面信息為:RCWL-1655
  99. //                        模塊正面絲印為R7
  100. //                        NC      默認模式下兼容HCSR04 雙探頭超聲波測距模塊


  101. //                2.測試 代碼:
  102. //                (1)當R7為NC 默認不焊接 懸空時,該例程代碼測試代碼輸出正常;
  103. //                                此程序為P32為Echo - P33為Trig 進行脈沖發送測距
  104. //                        a.實際數據反饋結果可行,測量范圍>=20cm (注意測量量程)
  105. //                        b.當小于20cm時 距離為不可靠   (很多朋友這里不注意)
  106. //                                實際測試距離:0063.6cm
  107. //                                實際測試距離:0063.6cm(未加濾波處理或者其他算法處理)

  108. //                (2)當R7位10K時 位串口9600 停止位1 數據位8 無奇偶校驗
  109. //                        a.串口助手可實際發送0XA0 (切記是16機制發送)
  110. //                                數據返回 03 06 CE
  111. //                        距離計算方式為:((0x03<<16)+(0x06<<8)+0xce)/1000  MM
  112. //               

  113. }

  114. void EXIT_interrupt() interrupt 0        //外部中斷函數地址入口
  115. {

  116.                 distance=(256*TH0+TL0)*0.184;//測得最小精度位mm(晶振為11059200Hz)
  117.                 flag=1;                      //標志位置1,表明距離測算完成
  118.                 EX0=0;                       //關閉外部中斷

  119. }
復制代碼


程序注釋截圖

程序注釋截圖

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜影视大全 | 免费在线播放黄色 | 观看av | 免费国产黄| 成人超碰| 中文字幕视频在线 | 欧美一级精品片在线看 | 久久久久国产视频 | 在线国产小视频 | 亚洲 日本 欧美 中文幕 | 国产日产精品一区二区三区四区 | 免费观看一级毛片 | 精品久| 四虎影院在线观看免费视频 | 人人种亚洲 | 国产中文视频 | 91久久久久久 | 国产精品久久久久一区二区三区 | 亚洲成人国产精品 | 亚洲欧美激情精品一区二区 | 日韩在线视频观看 | 国产成人高清成人av片在线看 | 黄色免费在线观看网站 | 亚洲国产成人精品女人久久久野战 | 精品欧美乱码久久久久久1区2区 | 韩国成人在线视频 | 国产一区二区在线免费观看 | 久久av在线播放 | 亚洲视频中文字幕 | 久久精品亚洲欧美日韩精品中文字幕 | 久久影音先锋 | 黄色网址在线免费观看 | 999国产视频 | 天堂一区二区三区 | 欧美性受xxx| 欧美一级片在线观看 | 黄色av观看 | 鲁大师一区影视 | 欧美一级片在线观看 | a级大片免费观看 | 黄色av观看 |