當前位置:編程學習大全網 - 編程語言 - 51單片機超聲波測距儀流程及程序急需50分。

51單片機超聲波測距儀流程及程序急需50分。

# include & ltat89x52.h & gt

# include & ltintrins.h & gt

#定義uint無符號整數

#定義uchar無符號字符

#定義nop _nop_()

uchar代碼WE0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x 80 };//0x40-不帶點

//無符號char碼WE1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xf0,0xef,0x 80 };//0-9帶點

uchar碼W[]={0xfe,0xfd,0xfb,0xf 7 };

無符號字符溫度[3];

sbit rx=p3^4;//接收器,回聲

sbit tx=p3^5;//控制終端,觸發器

sbit wei=p2^7;

sbit duan=p2^6;

位標誌= 0;

uint time = 0;

uint s = 0;

Void delay(int xms)//延遲大約是x毫秒。

{

int i,j;

for(I = xms;我& gt0;我-)

for(j = 110;j & gt0;j-);

}

Void start() //給出至少10us的高電平來啟動模塊。

{

TX = 1;

nop

nop

nop

nop

nop

nop

nop

nop

nop

nop

nop

nop

nop

nop

TX = 0;

}

uchar計數()

{

時間= TH0 * 256+TL0;

TH0 = 0;

TL0 = 0;//清除

s=(時間* 1.7)/100;//cm

返回s;

}

Void dispros()//數據分段

{

temp[0]= s/100% 10;//數百

temp[1]= s/10% 10;//十個人

temp[2]= s % 10;//位

}

Void display() //顯示函數

{

if(s & gt;= 500 | | s & lt=2) //進入盲區,溢出?

{

烏恰爾壹世;

s = 0;

TH0 = 0;

TL0 = 0;//清除

P0 = 0x40

段= 1;

段= 0;

for(I = 0;我& lt3;i++)

{

P0 = W[I];

魏= 1;

魏= 0;

}

}

Else //正常顯示

{

魏= 1;

P0 = 0xfe

魏= 0;

段= 1;

P0 = WE0[temp[0]];

延遲(3);

段= 0;

魏= 1;

P0 = 0xfd

魏= 0;

段= 1;

P0 = WE0[temp[1]];

延遲(2);

段= 0;

魏= 1;

P0 = 0xfb

魏= 0;

段= 1;

P0 = WE0[temp[2]];

延時(1);

}

}

void main()

{

TMOD = 0x 01;//定時器工作模式0

TH0 = 0;

TL0 = 0;

EA = 1;//打開主機中斷

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

while(1)

{

start();//啟動模塊

而(!RX);//當RX為零時等待

TR0 = 1;//開始計數

while(RX);//RX為1時計數等待。

TR0 = 0;//關閉計數器

count();//計數

dispros();//處理,劃分數據

顯示();//顯示

延時(1);

}

}

  • 上一篇:java怎麽連接sqlserver數據庫
  • 下一篇:有哪些適合兒童看的電影?
  • copyright 2024編程學習大全網