鱼C论坛

 找回密码
 立即注册
查看: 2634|回复: 0

[技术交流] 测距程序(最大距离60cm)

[复制链接]
发表于 2011-10-7 18:32:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 crazylinux 于 2011-10-7 18:32 编辑



/***********************************************************************************************************/
//DYP-ME007 超声波测距模块 DEMO 程序
//晶振:11。0592
//程序编写:廖文丹   QQ:  80184985
//接线:模块TRIG接 P1.2  ECH0 接P1.1
//串口波特率9600
/***********************************************************************************************************/   
#include   <AT89X51.H>
#include   <intrins.h>
    #include   <STDIO.H>
    #define uchar unsigned  char
    #define uint  unsigned   int  
#define  RX  P1_1
    #define  TX  P1_2
  
unsigned int  time=0;
unsigned int  timer=0;
float         S=0;
    bit           flag =0;

/********************************************************/
    void Conut(void)
{
  time=TH0*256+TL0;
  TH0=0;
  TL0=0;
  S=(time*1.87)/100;     //算出来是CM
  if(flag==1)      //超出测量
  {
   flag=0;
   printf("-----\n");
  }
   printf("S=%f\n",S);
}
/********************************************************/
void delayms(unsigned int ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
  while(--i)
  {
   j=10;
   while(--j);
  }
}
}
/********************************************************/
     void zd0() interrupt 1    //T0中断用来计数器溢出,超过测距范围
  {
    flag=1;        //中断溢出标志
  }
/********************************************************/
   void  StartModule()            //T1中断用来扫描数码管和计800MS启动模块
  {
   TX=1;                    //800MS  启动一次模块
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   TX=0;
  }
/********************************************************/
void main(void)
{  
    TMOD=0x21;     //设T0为方式1,GATE=1;
SCON=0x50;
TH1=0xFD;
TL1=0xFD;
TH0=0;
TL0=0;
TR0=1;  
ET0=1;             //允许T0中断
TR1=1;      //开启定时器
TI=1;
EA=1;      //开启总中断

while(1)
{
  StartModule();
  while(!RX);  //当RX为零时等待
  TR0=1;       //开启计数
  while(RX);   //当RX为1计数并等待
  TR0=0;    //关闭计数
     Conut();   //计算
  delayms(100);  //100MS
}
}              
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-3 09:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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