欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

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

作者:huqin   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年11月14日   【字體:

一、模塊簡(jiǎn)介:

    該串口輸出超聲波測(cè)距模塊采用STC11F04E單片機(jī)作處理器,工作電源:DC5V,工作電流10mA。測(cè)量數(shù)據(jù)輸出方式為T(mén)TL串口輸出,數(shù)據(jù)格式為標(biāo)準(zhǔn)的ASCII碼,數(shù)據(jù)由:空格位(起始位)+百+十位+個(gè)位。工作方式有兩種:一是連續(xù)測(cè)量方式;二是查詢(xún)測(cè)量方式。


 

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

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

    波特率:1200
    校驗(yàn)位:無(wú)
    數(shù)據(jù)位:8
    停止位:無(wú)
    ASCII碼數(shù)據(jù)格式:空格位(起始位)+百+十位+個(gè)位。

    二、模塊的使用設(shè)置

    下圖為模塊的背面圖片。圖中標(biāo)有A、B、C短接焊盤(pán)是作為設(shè)置測(cè)量方式用;標(biāo)有0-7的短路焊盤(pán)是設(shè)置查詢(xún)方式下的模塊地址用。


 

方式1:設(shè)置為小盲區(qū)期測(cè)量。設(shè)置方法,標(biāo)號(hào)為B的焊盤(pán)即單片機(jī)的P3.5 腳與地?cái)嚅_(kāi),這時(shí)的測(cè)量范圍為:5-200;這種方式下,測(cè)量盲區(qū)值小,適合長(zhǎng)時(shí)間近距離測(cè)量用。
    方式2: 設(shè)置為遠(yuǎn)距離測(cè)量,這種方式,盲區(qū)值相對(duì)較大,測(cè)量相對(duì)較遠(yuǎn)一些,設(shè)置方法:將標(biāo)號(hào)為B的焊盤(pán)即單片機(jī)的P3.5 腳與地短接,這時(shí)的測(cè)量范圍為:25-350厘米。
    方式3:連續(xù)方式測(cè)量。將標(biāo)號(hào)為A的焊盤(pán)即單片機(jī)的P3.4 腳與地?cái)嚅_(kāi),這時(shí)模塊測(cè)量方式是連續(xù)的進(jìn)行測(cè)量,測(cè)量間隔為1-2次/秒,每測(cè)量一次,就將測(cè)量結(jié)果通過(guò)串口送出。
    方式4:查詢(xún)方式測(cè)量。將標(biāo)號(hào)為A的焊盤(pán)即單片機(jī)的P3.4 腳與地短接,這時(shí)的測(cè)量方式為查詢(xún)方式測(cè)量,即通過(guò)控制設(shè)備向模塊發(fā)出一個(gè)命令后,模塊才測(cè)量一次。查詢(xún)方式下,每向測(cè)距模塊發(fā)送一次查詢(xún)命令,模塊才進(jìn)行測(cè)量一次,完成測(cè)量后即將測(cè)量結(jié)果通過(guò)串口發(fā)送出來(lái)。設(shè)置成查詢(xún)方式,模塊可多塊模塊連接在一起組網(wǎng)測(cè)量。
    查詢(xún)命令格式:AT+CL=1-255(1-255為模的的地址編碼,每個(gè)模塊的地址編碼由模塊上單片機(jī)P1口與地短接的情況決定,各塊模塊的編碼可獨(dú)立,由使用者自己設(shè)定,設(shè)定范圍1-255,只在查詢(xún)方式下有效),數(shù)據(jù)格式為16進(jìn)制數(shù)據(jù)。
三、 模塊使用
    為減小本超聲波測(cè)距模塊外形尺寸,該超聲波測(cè)距元件采用雙面安裝,全部元件安裝在一塊長(zhǎng)6cm寬2.5cm的PCB上。模塊可用作應(yīng)用系統(tǒng)的測(cè)距模塊。因?yàn)樗谴赥TL電平輸出的。可應(yīng)用在倒車(chē)?yán)走_(dá)、機(jī)器人避障、液位檢測(cè)、入侵報(bào)警、距離測(cè)量等產(chǎn)品中。板上留有安裝孔;有一排插針,以備插到應(yīng)用板上。對(duì)外接口定義:(信號(hào)輸出腳是第3腳TXD,5V左右的TTL電平,可接應(yīng)用系統(tǒng)單片機(jī)的RXD引腳)。

測(cè)試顯示程序范例如下:

#include <REGX51.H>                     //頭文件
#include <intrins.h>                    //頭文件
#define uchar unsigned char             //定義變量類(lèi)型為字符型
#define uint unsigned int               //定義變量類(lèi)型為長(zhǎng)整型
#define LED P0          //數(shù)碼管段碼輸出端
#define LED1 P2_6       //數(shù)碼管位1
#define LED2 P2_4       //數(shù)碼管位2
#define LED3 P2_5       //數(shù)碼管位3
#define sx P2_3       //數(shù)碼管位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段碼單片機(jī)端口P0.0-P0.7 分別接數(shù)碼管的A、B、F、D、E、H、C、G各段

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

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

void delay(i)       //延時(shí)子程序    
{
    while(--i);       //延時(shí)循環(huán)
}

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

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

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

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

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

void timeToBuffer()         //轉(zhuǎn)換段碼功能模塊
{
    xm0=ml[0]-48;      //接到的值為標(biāo)準(zhǔn)的ASCII碼,進(jìn)行十進(jìn)制轉(zhuǎn)換,百位數(shù)的值
 xm1=ml[1]-48;      //接到的值為標(biāo)準(zhǔn)的ASCII碼,進(jìn)行十進(jìn)制轉(zhuǎn)換,十位數(shù)值
    xm2=ml[2]-48;      //接到的值為標(biāo)準(zhǔn)的ASCII碼,進(jìn)行十進(jìn)制轉(zhuǎn)換,個(gè)位數(shù)值
 buffer[0]=convert[xm2];    //轉(zhuǎn)換成對(duì)應(yīng)的顯示碼段
 buffer[1]=convert[xm1];    //轉(zhuǎn)換成對(duì)應(yīng)的顯示碼段
 buffer[2]=convert[xm0];    //轉(zhuǎn)換成對(duì)應(yīng)的顯示碼段
    if ((ml[0]==67)&&(ml[1]==67))  //判斷接收到的ASCII碼數(shù)值為"C",表示模塊接收不到回波,這時(shí)的顯示用"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碼數(shù)值為"-",表示模塊的測(cè)量范圍在盲區(qū)范圍內(nèi)這時(shí)的顯示用"- - -"表示
 {
      buffer[0]=0x7F;     //顯示"-"的段碼是0x7F
   buffer[1]=0x7F;     //顯示"-"的段碼是0x7F
   buffer[2]=0x7F;       //顯示"-"的段碼是0x7F
 }
}

關(guān)閉窗口

相關(guān)文章