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

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

一款串口輸出超聲波測距模塊使用范例

作者:huqin   來源:本站原創   點擊數:  更新時間:2013年11月14日   【字體:

一、模塊簡介:

    該串口輸出超聲波測距模塊采用STC11F04E單片機作處理器,工作電源:DC5V,工作電流10mA。測量數據輸出方式為TTL串口輸出,數據格式為標準的ASCII碼,數據由:空格位(起始位)+百+十位+個位。工作方式有兩種:一是連續測量方式;二是查詢測量方式。


 

測量范圍:方式一:5cm~200cm(盲區5cm);方式二:25cm~350cm(盲區25cm)。

測量過程中,當接收不到障礙物反射的回波時,輸出“C C C”,當測量低于下限值(在盲區內)時顯示“- - -”。測量結果由模塊上的輸出端口輸出,輸出方式為串口(TTL電平)輸出。測量結果可通過電腦進行顯示。模塊使用串口通訊可靠性更高,同時可以通過電腦串口采集數據,編寫通訊程序非常的便捷。

    波特率:1200
    校驗位:無
    數據位:8
    停止位:無
    ASCII碼數據格式:空格位(起始位)+百+十位+個位。

    二、模塊的使用設置

    下圖為模塊的背面圖片。圖中標有A、B、C短接焊盤是作為設置測量方式用;標有0-7的短路焊盤是設置查詢方式下的模塊地址用。


 

方式1:設置為小盲區期測量。設置方法,標號為B的焊盤即單片機的P3.5 腳與地斷開,這時的測量范圍為:5-200;這種方式下,測量盲區值小,適合長時間近距離測量用。
    方式2: 設置為遠距離測量,這種方式,盲區值相對較大,測量相對較遠一些,設置方法:將標號為B的焊盤即單片機的P3.5 腳與地短接,這時的測量范圍為:25-350厘米。
    方式3:連續方式測量。將標號為A的焊盤即單片機的P3.4 腳與地斷開,這時模塊測量方式是連續的進行測量,測量間隔為1-2次/秒,每測量一次,就將測量結果通過串口送出。
    方式4:查詢方式測量。將標號為A的焊盤即單片機的P3.4 腳與地短接,這時的測量方式為查詢方式測量,即通過控制設備向模塊發出一個命令后,模塊才測量一次。查詢方式下,每向測距模塊發送一次查詢命令,模塊才進行測量一次,完成測量后即將測量結果通過串口發送出來。設置成查詢方式,模塊可多塊模塊連接在一起組網測量。
    查詢命令格式:AT+CL=1-255(1-255為模的的地址編碼,每個模塊的地址編碼由模塊上單片機P1口與地短接的情況決定,各塊模塊的編碼可獨立,由使用者自己設定,設定范圍1-255,只在查詢方式下有效),數據格式為16進制數據。
三、 模塊使用
    為減小本超聲波測距模塊外形尺寸,該超聲波測距元件采用雙面安裝,全部元件安裝在一塊長6cm寬2.5cm的PCB上。模塊可用作應用系統的測距模塊。因為它是串口TTL電平輸出的。可應用在倒車雷達、機器人避障、液位檢測、入侵報警、距離測量等產品中。板上留有安裝孔;有一排插針,以備插到應用板上。對外接口定義:(信號輸出腳是第3腳TXD,5V左右的TTL電平,可接應用系統單片機的RXD引腳)。

測試顯示程序范例如下:

#include <REGX51.H>                     //頭文件
#include <intrins.h>                    //頭文件
#define uchar unsigned char             //定義變量類型為字符型
#define uint unsigned int               //定義變量類型為長整型
#define LED P0          //數碼管段碼輸出端
#define LED1 P2_6       //數碼管位1
#define LED2 P2_4       //數碼管位2
#define LED3 P2_5       //數碼管位3
#define sx P2_3       //數碼管位3

uchar s,i,pd,jsh,ml[3]={0,0,0},zj,xm0,xm1,xm2,xm3,buffer[3];//程序中用到的變量
uchar convert[10]={0xA0,0xBD,0x64,0x34,0x39,0x32,0x22,0xBC,0x20,0x30};//0~9段碼單片機端口P0.0-P0.7 分別接數碼管的A、B、F、D、E、H、C、G各段

void delay(i);       //延時函數
void scanLED();       //顯示函數
void timeToBuffer();     //顯示轉換函數
void offmsd();       //百位數為0判斷處理模塊

void main()        //主程序
{
 EA=1;        //開總中斷
 ES=1;        //串口中斷允許
 SCON = 0x50;       //串口方式1,允許接收
 TMOD = 0x21;       //定時器1定時方式2
 TCON = 0x40;       //定時器1開始計數
 TH1 = 0xF3;       //6MHz 1200波特率
 TL1 = 0xF3;       //6MHz 1200波特率
 TI = 0;        //串口發送中斷標志置0
 RI =0;        //串口接收中斷標志置0
 TR1=1;         //啟動定時器1
 sx=0;
 while(1)
 {
  timeToBuffer();     //調用轉換段碼功能模塊
     offmsd();      //調用百位數為0判斷處理模塊
    scanLED();      //調用顯示函數
 }
}

void delay(i)       //延時子程序    
{
    while(--i);       //延時循環
}

void scanLED()                   //顯示功能模塊
{
 LED=buffer[0];      //顯示個位數值,個數位數的段碼送顯示端口
 LED3=0;        //個位數位碼,低電平有效,進行顯示
 delay(1);       //顯示延時,加大該值,顯示亮度提高
 LED3=1;        //關閉顯示個位數顯示
 delay(20);       //關閉顯示延時,減小該值時顯示亮度提高

 LED=buffer[1];      //顯示十位數值,十數位數的段碼送顯示端口
 LED2=0;        //十位數位碼,低電平有效,進行顯示
 delay(1);       //顯示延時,加大該值,顯示亮度提高
 LED2=1;        //關閉顯示十位數顯示
 delay(20);       //關閉顯示延時,減小該值時顯示亮度提高

 LED=buffer[2];      //顯示百位數值,百數位數的段碼送顯示端口
 LED1=0;        //百位數位碼,低電平有效,進行顯示
 delay(1);       //顯示延時,加大該值,顯示亮度提高
 LED1=1;        //關閉顯示百位數顯示
 delay(20);         //關閉顯示延時,減小該值時顯示亮度提高
}

void offmsd()       //百位數為0判斷處理模塊
{
    if (buffer[2]==0xA0)      //如果值為零時百位不顯示
    buffer[2] = 0xff;     //數碼管百位數的段碼全部為1,即高電平,百位不顯示 
}

void serial() interrupt 4 using 3  //串口中斷接收程序
{
  if(RI)        //串口接收到數據時串口中斷標志位為1
  {
    RI=0;         //串口中斷標志位置0
    pd=SBUF;       //接收到的數據送中間變變量pd儲存
    if(pd==0x20)      //判斷接收到的數據是否為0x20(這是ASCII碼的空格的代碼)
 {
      jsh=0;       //接收位數計數器jsh置0
      pd=0;        //中間變變量pd清0
 }
 if(jsh==1)       //當jsh值為1時,代表串口接收到模塊發送回的百位數值
 {
   ml[0]=SBUF;      //串口接收到模塊發送回的百位數值存入ml[0]單元
 }
 else if(jsh==2)      //當jsh值為2時,代表串口接收到模塊發送回的十位數值
 {
   ml[1]=SBUF;      //串口接收到模塊發送回的十位數值存入ml[1]單元
 }
 else if(jsh==3)      //當jsh值為3時,代表串口接收到模塊發送回的個位數值
 {
   ml[2]=SBUF;      //串口接收到模塊發送回的個位數值存入ml[2]單元
      s=ml[0]*100+ml[1]*10+ml[2];   //計算測量得到的距離值s,單位為厘米
 }
  jsh++;              //接收位數計數器值加1
  }
}

void timeToBuffer()         //轉換段碼功能模塊
{
    xm0=ml[0]-48;      //接到的值為標準的ASCII碼,進行十進制轉換,百位數的值
 xm1=ml[1]-48;      //接到的值為標準的ASCII碼,進行十進制轉換,十位數值
    xm2=ml[2]-48;      //接到的值為標準的ASCII碼,進行十進制轉換,個位數值
 buffer[0]=convert[xm2];    //轉換成對應的顯示碼段
 buffer[1]=convert[xm1];    //轉換成對應的顯示碼段
 buffer[2]=convert[xm0];    //轉換成對應的顯示碼段
    if ((ml[0]==67)&&(ml[1]==67))  //判斷接收到的ASCII碼數值為"C",表示模塊接收不到回波,這時的顯示用"C C C"表示
 {  
      buffer[0]=0xE2;     //顯示"C"的段碼是0xE2
   buffer[1]=0xE2;     //顯示"C"的段碼是0xE2
   buffer[2]=0xE2;       //顯示"C"的段碼是0xE2 
 }
    else if ((ml[0]==45)&&(ml[1]==45)) //判斷接收到的ASCII碼數值為"-",表示模塊的測量范圍在盲區范圍內這時的顯示用"- - -"表示
 {
      buffer[0]=0x7F;     //顯示"-"的段碼是0x7F
   buffer[1]=0x7F;     //顯示"-"的段碼是0x7F
   buffer[2]=0x7F;       //顯示"-"的段碼是0x7F
 }
}

關閉窗口

相關文章

主站蜘蛛池模板: 国产乱码精品一区二区三区中文 | 亚洲国产一区视频 | 国产精品成人一区二区三区夜夜夜 | 国产一区二区三区四区在线观看 | av大片在线观看 | 在线视频日韩 | 国产成人免费视频网站高清观看视频 | 国产精品欧美一区二区三区不卡 | 黄色一级毛片 | 中文字幕视频网 | 久久久久资源 | 日韩在线免费播放 | а天堂中文最新一区二区三区 | 精品国产一区二区国模嫣然 | 精品视频在线免费观看 | 午夜久久久 | 久久久久久免费毛片精品 | 欧美激情在线精品一区二区三区 | 欧美精品一级 | 国产女人与拘做受视频 | 国产精品乱码一二三区的特点 | 久久婷婷麻豆国产91天堂 | 欧美一区二区在线播放 | 国产一级在线观看 | 欧美一区二区免费视频 | h肉视频 | 夜夜夜久久久 | 亚洲一区在线日韩在线深爱 | 精品不卡 | 香蕉一区二区 | 91免费高清| 91精品国产综合久久久久久 | 国产精品一区久久久 | 日韩视频一区二区三区 | 超碰婷婷 | 日本aa毛片a级毛片免费观看 | 一区二区视频在线 | 日韩精品在线看 | 天堂久久一区 | www.日日操 | a级黄色毛片免费播放视频 国产精品视频在线观看 |