日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]超聲波原理簡單測距準確,應用廣泛下面貼一個自己寫的數(shù)碼管程序,顯示部分需要改,最近比賽寫的我使用的是慧凈開發(fā)板,共陰數(shù)碼管//超聲波模塊程序 //作者 : Z H //時間 2015/11/29 //Trig = P2^0 //Echo = P3^2 #

超聲波原理簡單測距準確,應用廣泛下面貼一個自己寫的數(shù)碼管程序,顯示部分需要改,最近比賽寫的我使用的是慧凈開發(fā)板,共陰數(shù)碼管


//超聲波模塊程序

//作者 : Z H

//時間 2015/11/29

//Trig = P2^0

//Echo = P3^2

#include

#define uchar unsigned char

#define uint unsigned int

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的碼表

uint time = 0;

uint timeH = 0;

uint timeL = 0;

uint succeed_flag;

sbit dula=P2^0; //段選信號的鎖存器控制

sbit wela=P2^1; //位選信號的鎖存器控制

sbit Trig = P2^2;

sbit Echo = P3^2;

//

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=125;y>0;y--);

}

//

void delay_20us()

{

uchar a ;

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

}

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

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

void display(uint temp)

{

uchar qian,ge,shi,bai;

qian = temp/1000;

bai=temp/100%10;

shi=temp%100/10;

ge=temp%10;

wela=1;

//P0=0xf7;

P0 = 0xfe;

wela=0;

dula=1;

P0=table[qian];

dula=0;

delay(5);

wela=1;

//P0=0xf7;

P0 = 0xfd;

wela=0;

dula=1;

P0=table[bai];

dula=0;

delay(5);

dula=1;

P0=0x00; //關位碼

dula=0;

wela=1;

//P0=0xef;

P0 = 0xfb;

wela=0;

dula=1;

P0=table[shi];

dula=0;

delay(5);

dula=1;

P0=0x00; //關位碼

dula=0;

dula=1;

P0=table[ge];

dula=0;

wela=1;

//P0=0xdf;

P0 = 0xf7;

wela=0;

delay(5);

dula=1;

P0=0x00; //關位碼

dula=0;

}

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

void main()

{

uint distance;

uint test =0;

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

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

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

while(1)

{

EA=0; //關總中斷

Trig=1; //超聲波輸入端

delay_20us(); //延時20us

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

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

succeed_flag=0; //清測量成功標志

EA=1;

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

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

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

TF1=0; //計數(shù)溢出標志

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

delay(20); //等待測量的結果

TR1=0; //關閉定時器1

EX0=0; //關閉外部中斷0

if(succeed_flag==1)

{

time=timeH*256+timeL;

distance=time*0.172; //厘米

display(distance);

}

if(succeed_flag==0)

{

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

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

}

}

}

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

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

void exter() interrupt 0 // 外部中斷0是0號

{

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

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

succeed_flag=1;//至成功測量的標志

EX0=0; //關閉外部中斷

}

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

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

void timer1() interrupt 3 //

{

TH1=0;

TL1=0;

}


本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關閉