找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2770|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于at89s52 LED超聲波測距···

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71259 發(fā)表于 2014-12-29 01:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>
   
sbit TX =P3^6;   //信號發(fā)送端
sbit RX =P3^7;   //信號接收端
unsigned long S;
unsigned int time;
unsigned char qian,bai,shi,ge;
code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  //數(shù)碼管值
void delay(unsigned int i)   //定義一個小延時,哈哈
{
while(--i);
}
void sent()      //定義一個發(fā)送
{  
TX=1;       //發(fā)送端發(fā)送信號
delay(25);      //給一個大于10US的信號
TX=0;       //關(guān)閉發(fā)送端信號
}
void Count()
{
time=TH0*256+TL0;    //計算時間
TH0=0;       //復(fù)位
TL0=0;       //復(fù)位
S=(time*1.7)/10;    //計算距離,單位MM
if(S<5000)
{
  qian=tab[S/1000];    //定義第四位
  bai=tab[S/100%10];    //定義第三位
  shi=tab[S/10%10];    //定義第二位
  ge=tab[S%10];     //定義第一位
  P1=ge;     //送出顯示
  P0=3;
  delay(300);
  P1=shi;
  P0=2;
  delay(300);
  P1=bai;
  P0=1;
  delay(300);
  P1=qian;
  P0=0;
  delay(300);
}
}
void receive()     //定義一個接收
{
TR0=1;      //定時器0開
while(RX);     //持續(xù)延時RX為高電平的時間
TR0=0;      //定時器0關(guān)
Count();     //調(diào)用Count
}
main()
{
int lv;
EA=1;          //總中斷開
ET0=1;       //定時器中斷0開
ET1=1;       //定時器中斷1開
TMOD=0X11;      //定義TO,T1由TCON控制,工作方式為方式1
TH0=0;
TL0=0;
TH1=0;
TL1=0;
while(1)
{
  RX=1;      //給RX一個高電平
  sent();      //給發(fā)送端一個>10us的信號
  for(lv=2000;lv>0;lv--)
  {
   if(RX==1)
   {
    receive();   //調(diào)用RECEIVE
   }
  }
}
}

//寫了我一天的時間,唉,效率還是太低···努力,努力···

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表