RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

51單片機超聲波測距程序代碼分享

2oON_changxuemc ? 來源:網(wǎng)絡(luò)整理 ? 作者:工程師陳翠 ? 2018-07-24 10:27 ? 次閱讀

/超聲波模塊ME007顯示程序

//晶振=8M

//MCU=STC10F04XE

//P0.0-P0.6共陽數(shù)碼管引腳

//Trig = P1^0

//Echo = P3^2

#include //包括一個52標(biāo)準(zhǔn)內(nèi)核的頭文件

#define uchar unsigned char //定義一下方便使用

#define uint unsigned int

#define ulong unsigned long

//***********************************************

sfr CLK_DIV = 0x97; //為STC單片機定義,系統(tǒng)時鐘分頻

//為STC單片機的IO口設(shè)置地址定義

sfr P0M1 = 0X93;

sfr P0M0 = 0X94;

sfr P1M1 = 0X91;

sfr P1M0 = 0X92;

sfrP2M1 = 0X95;

sfrP2M0 = 0X96;

//***********************************************

sbit Trig = P1^0; //產(chǎn)生脈沖引腳

sbit Echo = P3^2; //回波引腳

sbit test = P1^1; //測試用引腳

uchar code SEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//數(shù)碼管0-9

uint distance[4]; //測距接收緩沖區(qū)

uchar ge,shi,bai,temp,flag,outcomeH,outcomeL,i; //自定義寄存器

bit succeed_flag; //測量成功標(biāo)志

//********函數(shù)聲明

void conversion(uint temp_data);

void delay_20us();

//void pai_xu();

void main(void) // 主程序

{ uint distance_data,a,b;

uchar CONT_1;

CLK_DIV=0X03; //系統(tǒng)時鐘為1/8晶振(pdf-45頁)

P0M1 = 0; //將io口設(shè)置為推挽輸出

P1M1 = 0;

P2M1 = 0;

P0M0 = 0XFF;

P1M0 = 0XFF;

P2M0 = 0XFF;

i=0;

flag=0;

test =0;

Trig=0; //首先拉低脈沖輸入引腳

TMOD=0x11; //定時器0,定時器1,16位工作方式

TR0=1; //啟動定時器0

IT0=0; //由高電平變低電平,觸發(fā)外部中斷

ET0=1; //打開定時器0中斷

//ET1=1; //打開定時器1中斷

EX0=0; //關(guān)閉外部中斷

EA=1; //打開總中斷0

while(1) //程序循環(huán)

{

EA=0;

Trig=1;

delay_20us();

Trig=0; //產(chǎn)生一個20us的脈沖,在Trig引腳

while(Echo==0); //等待Echo回波引腳變高電平

succeed_flag=0; //清測量成功標(biāo)志

EX0=1; //打開外部中斷

TH1=0; //定時器1清零

TL1=0; //定時器1清零

TF1=0; //

TR1=1; //啟動定時器1

EA=1;

while(TH1 < 30);//等待測量的結(jié)果,周期65.535毫秒(可用中斷實現(xiàn))

TR1=0; //關(guān)閉定時器1

EX0=0; //關(guān)閉外部中斷

if(succeed_flag==1)

{

distance_data=outcomeH; //測量結(jié)果的高8位

distance_data<<=8; //放入16位的高8位

distance_data=distance_data|outcomeL;//與低8位合并成為16位結(jié)果數(shù)據(jù)

distance_data*=12; //因為定時器默認為12分頻www.dgzj.com

distance_data/=58; //微秒的單位除以58等于厘米

} //為什么除以58等于厘米, Y米=(X秒*344)/2

// X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58

if(succeed_flag==0)

{

distance_data=0; //沒有回波則清零

test = !test; //測試燈變化

}

/// distance[i]=distance_data; //將測量結(jié)果的數(shù)據(jù)放入緩沖區(qū)

/// i++;

/// if(i==3)

/// {

/// distance_data=(distance[0]+distance[1]+distance[2]+distance[3])/4;

/// pai_xu();

/// distance_data=distance[1];

a=distance_data;

if(b==a) CONT_1=0;

if(b!=a) CONT_1++;

if(CONT_1>=3)

{ CONT_1=0;

b=a;

conversion(b);

}

/// i=0;

///}

}

}

//***************************************************************

//外部中斷0,用做判斷回波電平

INTO_() interrupt 0 // 外部中斷是0號

{

outcomeH =TH1; //取出定時器的值

outcomeL =TL1; //取出定時器的值

succeed_flag=1; //至成功測量的標(biāo)志

EX0=0; //關(guān)閉外部中斷

}

//****************************************************************

//定時器0中斷,用做顯示

timer0() interrupt 1 // 定時器0中斷是1號

{

TH0=0xfd; //寫入定時器0初始值

TL0=0x77;

switch(flag)

{case 0x00:P0=ge; P2=0xfd;flag++;break;

case 0x01:P0=shi;P2=0xfe;flag++;break;

case 0x02:P0=bai;P2=0xfb;flag=0;break;

}

}

//*****************************************************************

/*

//定時器1中斷,用做超聲波測距計時

timer1() interrupt 3 // 定時器0中斷是1號

{

TH1=0;

TL1=0;

}

*/

//******************************************************************

//顯示數(shù)據(jù)轉(zhuǎn)換程序

void conversion(uint temp_data)

{

uchar ge_data,shi_data,bai_data ;

bai_data=temp_data/100 ;

temp_data=temp_data%100; //取余運算

shi_data=temp_data/10 ;

temp_data=temp_data%10; //取余運算

ge_data=temp_data;

bai_data=SEG7[bai_data];

shi_data=SEG7[shi_data];

ge_data =SEG7[ge_data];

EA=0;

bai = bai_data;

shi = shi_data;

ge = ge_data ;

EA=1;

}

//******************************************************************

void delay_20us()

{ uchar bt ;

for(bt=0;bt<100;bt++);

}

/*

void pai_xu()

{ uint t;

if (distance[0]>distance[1])

{t=distance[0];distance[0]=distance[1];distance[1]=t;} /*交換值

if(distance[0]>distance[2])

{t=distance[2];distance[2]=distance[0];distance[0]=t;} /*交換值

if(distance[1]>distance[2])

{t=distance[1];distance[1]=distance[2];distance[2]=t;} /*交換值

}

*/

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 51單片機
    +關(guān)注

    關(guān)注

    274

    文章

    5702

    瀏覽量

    123490
  • 超聲波測距
    +關(guān)注

    關(guān)注

    5

    文章

    246

    瀏覽量

    37908

原文標(biāo)題:51單片機超聲波測距程序代碼

文章出處:【微信號:changxuemcu,微信公眾號:暢學(xué)單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    最簡單的51超聲波測距程序分享

    直接顯示在數(shù)碼管上,距離超過20cm就顯示三個A,否則顯示正常的距離值。提示:以下是本篇文章正文內(nèi)容,下面案例可供參考一、51超聲波測距是什么?51
    發(fā)表于 01-24 06:45

    基于51單片機超聲波模塊測距程序設(shè)計系統(tǒng)

    基于51單片機超聲波模塊測距程序設(shè)計系統(tǒng)
    發(fā)表于 02-18 17:08 ?40次下載

    超聲波測距

    基于單片機超聲波測距,內(nèi)容包含程序代碼和電路。
    發(fā)表于 03-10 11:15 ?21次下載

    51單片機超聲波測距串口顯示

    51單片機串口顯示超聲波測距程序,里面有定義的接口。
    發(fā)表于 03-28 16:47 ?12次下載

    基于51單片機超聲波測距設(shè)計

    基于51單片機超聲波測距設(shè)計,(附源程序).doc。
    發(fā)表于 05-11 13:49 ?73次下載

    超聲波測距

    超聲波測距源文件,詳細介紹了基于51單片機超聲波測距原理,該文件包含設(shè)計的源
    發(fā)表于 05-20 10:12 ?182次下載

    51單片機超聲波測距仿真與分析

    51單片機超聲波測距仿真與分析
    發(fā)表于 09-04 08:49 ?30次下載

    基于51單片機超聲波測距的詳細資料合集包括了程序

    本文檔的主要內(nèi)容詳細介紹的是基于51單片機超聲波測距程序
    發(fā)表于 07-12 08:00 ?26次下載
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>超聲波</b><b class='flag-5'>測距</b>的詳細資料合集包括了<b class='flag-5'>程序</b>

    51單片機超聲波測距的上位程序和PCB原理圖

    本文檔的主要內(nèi)容詳細介紹的是51單片機超聲波測距的上位程序和PCB原理圖。
    發(fā)表于 03-13 16:41 ?68次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>超聲波</b><b class='flag-5'>測距</b>的上位<b class='flag-5'>機</b>和<b class='flag-5'>程序</b>和PCB原理圖

    使用51單片機進行超聲波測距程序資料免費下載

    本文檔的主要內(nèi)容介紹的是使用51單片機進行超聲波測距程序資料免費下載。
    發(fā)表于 03-29 15:16 ?23次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b>進行<b class='flag-5'>超聲波</b><b class='flag-5'>測距</b>的<b class='flag-5'>程序</b>資料免費下載

    使用51單片機進行超聲波測距程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用51單片機進行超聲波測距程序免費下載。
    發(fā)表于 08-28 17:29 ?9次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b>進行<b class='flag-5'>超聲波</b><b class='flag-5'>測距</b>的<b class='flag-5'>程序</b>免費下載

    使用STM32單片機51單片機實現(xiàn)HC04超聲波測距模塊的程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用STM32單片機51單片機實現(xiàn)HC04超聲波模塊測距程序免費
    發(fā)表于 08-21 17:31 ?27次下載
    使用STM32<b class='flag-5'>單片機</b>和<b class='flag-5'>51</b><b class='flag-5'>單片機</b>實現(xiàn)HC04<b class='flag-5'>超聲波</b><b class='flag-5'>測距</b>模塊的<b class='flag-5'>程序</b>免費下載

    51單片機超聲波測距模塊的程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是51單片機超聲波測距模塊的程序免費下載。
    發(fā)表于 07-03 17:42 ?16次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>超聲波</b><b class='flag-5'>測距</b>模塊的<b class='flag-5'>程序</b>免費下載

    基于51單片機超聲波測距模塊設(shè)計

    超聲波測距的模塊,51單片機接上12864液晶,HC-SR04超聲波模塊,就可以了,具體程序沒怎
    發(fā)表于 12-10 16:33 ?6968次閱讀

    51單片機驅(qū)動超聲波測距模塊

    51單片機驅(qū)動超聲波測距模塊(單片機最小系統(tǒng))-使用51單片
    發(fā)表于 07-22 10:01 ?61次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>驅(qū)動<b class='flag-5'>超聲波</b><b class='flag-5'>測距</b>模塊
    RM新时代网站-首页