5563|5

965

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

元芳,这个51的HC-SR04超声波测距程序你怎么看 [复制链接]

#include
#include

#define ui unsigned int
#define uc unsigned char

sbit trig=P2^1;
sbit echo=P2^0;

sbit dula=P2^6;
sbit wela=P2^7;

uc code szdl[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

uc code szwl[]={
0xfe,0xfd,0xfb,
0xf7,0xef,0xdf,0xbf,0x7f};

double S;

void delay(ui z)
{
    ui x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}


void tinit()
{
    TMOD=0x11;
    TH0=(65536-55296)/256;
    TL0=(65536-55296)%256;
    EA=1;
    ET0=1;
    TR0=1;
    TH1=0;
    TL1=0;
    ET1=1;
}


void counttime()
{
    while(echo==0);
        TR1=1;
    while(echo==1);
        TR0=0;
}

void count()
{
    uc time;
    time=TH1*256+TL1;
    TH1=0;
    TL1=0;
   
    S=time*0.017;
}

void display()
{
    uc b,s,g;
    b=(int)S/100;
    s=(int)S%100/10;
    g=(int)S%10;

    wela=1;
    P0=szwl[0];
    wela=0;
    dula=1;
    P0=szdl;
    dula=0;
    delay(1);
   
    wela=1;
    P0=szwl[1];
    wela=0;
    dula=1;
    P0=szdl;
    dula=0;
    delay(1);

    wela=1;
    P0=szwl[2];
    wela=0;
    dula=1;
    P0=szdl[g];
    dula=0;
    delay(1);
}

void main()
{
    trig=0;
    P1=0xff;
    tinit();
    while(1)
    {
        counttime();
        count();
        display();
    }
}

void t0() interrupt 1
{
    TH0=(65536-55296)/256;
    TL0=(65536-55296)%256;
    trig=1;
    _nop_();_nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();_nop_();
    trig=0;
}

断断续续两个月了,,就 是做不成功,大家救救 我吧
此帖出自单片机论坛

最新回复

莫非?  详情 回复 发表于 2012-10-29 03:08
点赞 关注
 

回复
举报

141

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
#include   //器件配置文件
#include
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int  //宏定义无符号整型
#define  RX  P1_5
#define  TX  P1_7
unsigned int  time=0;
unsigned int  timer=0;
unsigned int  timee=0;
unsigned char posit=0;
unsigned long S=0;
bit      flag =0;
unsigned char const discode[] ={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0xff/*-*/};
unsigned char const positon[3]={ 0xdf,0xef,0xf7};
unsigned char disbuff[4]    ={ 0,0,0,0,};
/********************************************************/
    void Display(void)     //扫描数码管
{
  if(posit==0)
  {P0=(discode[disbuff[posit]])&0x7f;}
  else
  {P0=discode[disbuff[posit]];}
   P3=positon[posit];
   if(++posit>=3)
   posit=0;
}
/********************************************************************
                            延时函数
*********************************************************************/
void delay()//延时程序
{
uchar m,n,s;
for(m=20;m>0;m--)
for(n=200;n>0;n--)
for(s=248;s>0;s--);
}
/********************************************************/
    void Conut(void)
{
  time=TH0*256+TL0;
  TH0=0;
  TL0=0;

  S=(time*1.7)/100;     //算出来是CM
  if((S>=3000)||flag==1) //超出测量范围显示“-”  l
  {  
   flag=0;
   disbuff[0]=10;    //“-”
   disbuff[1]=10;    //“-”
   disbuff[2]=10;    //“-?
   }
  else
  {
   disbuff[0]=S%1000/100;
   disbuff[1]=S%1000%100/10;
   disbuff[2]=S%1000%10 %10;
   }
}
}
/********************************************************/
     void zd0() interrupt 1    //T0中断用来计数器溢出,超过测距范围
  {
    flag=1;        //中断溢出标志
  }
/********************************************************/
   void  zd3()  interrupt 3    //T1中断用来扫描数码管和计800MS启动模块
  {
  TH1=0xf8;
  TL1=0x30;
  Display();
  timer++;
  if(timer>=400)
  {
   timer=0;
   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=0x11;     //设T0为方式1,GATE=1;
TH0=0;
TL0=0;         
TH1=0xf8;     //2MS定时
TL1=0x30;
ET0=1;             //允许T0中断
ET1=1;      //允许T1中断
TR1=1;      //开启定时器
EA=1;      //开启总中断
while(1) {
{
  while(!RX);  //当RX为零时等待
  TR0=1;       //开启计数
  while(RX);   //当RX为1计数并等待
  TR0=0;    //关闭计数
     Conut();   //计算
  }  
}
此帖出自单片机论坛

点评

大哥,,这不就是送的资料吗,,我都看N遍了  详情 回复 发表于 2012-10-28 11:51
 
个人签名shop33392572.taobao.com
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

板凳
 
大人,此程序必有蹊跷!
此帖出自单片机论坛

点评

此话怎讲?  详情 回复 发表于 2012-10-28 11:52
 
 
 

回复

965

帖子

0

TA的资源

纯净的硅(高级)

4
 

回复 沙发 用心思考 的帖子

大哥,,这不就是送的资料吗,,我都看N遍了
此帖出自单片机论坛
 
 
 

回复

965

帖子

0

TA的资源

纯净的硅(高级)

5
 

回复 板凳 jishuaihu 的帖子

此话怎讲?
此帖出自单片机论坛
 
 
 

回复

1634

帖子

0

TA的资源

裸片初长成(高级)

6
 
莫非?
此帖出自单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表