找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2748|回复: 0
打印 上一主题 下一主题
收起左侧

基于at89s52 LED超声波测距···

[复制链接]
跳转到指定楼层
楼主
ID:71259 发表于 2014-12-29 01:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
   
sbit TX =P3^6;   //信号发送端
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};  //数码管值
void delay(unsigned int i)   //定义一个小延时,哈哈
{
while(--i);
}
void sent()      //定义一个发送
{  
TX=1;       //发送端发送信号
delay(25);      //给一个大于10US的信号
TX=0;       //关闭发送端信号
}
void Count()
{
time=TH0*256+TL0;    //计算时间
TH0=0;       //复位
TL0=0;       //复位
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);     //持续延时RX为高电平的时间
TR0=0;      //定时器0关
Count();     //调用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();      //给发送端一个>10us的信号
  for(lv=2000;lv>0;lv--)
  {
   if(RX==1)
   {
    receive();   //调用RECEIVE
   }
  }
}
}

//写了我一天的时间,唉,效率还是太低···努力,努力···

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表