打印

求过程讲解。

[复制链接]
662|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
如梦般初醒|  楼主 | 2016-5-24 16:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg51.h>
#define    uchar  unsigned char
#define    uint   unsigned int
wdzh()
        {
                TR0=0;
                TH1=0x00;
                TL1=0x00;
                csbint=1;
                sx=0;
                delay(1700);
                csbfs();
                csbout=1;
                TR1=1;                       
       
                i=yzsj;                                       
                while(i--)
                {
                }
                i=0;
                while(csbint)                        //判断接收回路是否收到超声波的回波
                {
                        i++;
                        if(i>=3300)                       
                        csbint=0;
                }
                TR1=0;
                s=TH1;                                       
                s=s*256+TL1;
                TR0=1;
                csbint=1;
                jsz=s*csbc;                //计算测量结果
                jsz=jsz/2;
                return jsz;  
        }
void delay50ms()   //误差 0us
{
    unsigned char a,b;
    for(b=173;b>0;b--)
        for(a=143;a>0;a--);
}
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  //数码管显示数字断码
uint ta0,ta1,ta2;
uint temp=0;
void Display(uint ta)                         //显示函数
{         
   ta0=ta/100;
   ta1=ta%10/10;
   ta2=ta%100;
        uchar i,j;
          for(i=0;i<3;i++)
        {       
           // GPIO_DIG=table1[table[i]];//发送段码
                switch(i)         //位选,选择点亮的数码管,
                {
                        case(0):
                                P2=table[ta0];P3^4=1;P3^2=0;P3^3=0; break;//显示第1位          
                        case(1):
                                P2=table[ta1];P3^4=0;P3^2=1;P3^3=1; break;//显示第2位
                        case(2):
                                P2=table[ta2];P3^4=0;P3^2=1;P3^3=1; break;//                显示第3位
                }               
                j=50;                                                 //扫描间隔时间设定
                while(j--);       
                GPIO_DIG=0x00;//消隐
        }
}
void key()                          ///按键函数,设置报警距离多少
{
         delay50ms();
            if(P3^7==0)
         {temp++;}
         else if(P3^6==0)
         {temp--;}
}
viod main
{
         uchar a,b=0;
         while(1){
         if(P3^7==0|P3^6==0)  //判断按键是否按下
         {
                  key();
                 for(a=0;<20;a++)
                 {
                          Display(temp);
                 }
                 delay50ms();
                 delay50ms();
         }
         Display(wdzh())        //显示当前距离
         b=wdzh();
         if(temp>b)                  //比较距离,是否报警
         {
           P2^7=0;
           delay50ms();
           P2^7=1;
         }

         }
}



超声波测距子程序:
void wdzh()
        {
                TR0=0;
                TH1=0x00;
                TL1=0x00;
                csbint=1;
                sx=0;
                delay(1700);
                csbfs();
                csbout=1;
                TR1=1;                       
       
                i=yzsj;                                       
                while(i--)
                {
                }
                i=0;
                while(csbint)                        //判断接收回路是否收到超声波的回波
                {
                        i++;
                        if(i>=3300)                       
                        csbint=0;
                }
                TR1=0;
                s=TH1;                                       
                s=s*256+TL1;
                TR0=1;
                csbint=1;
                jsz=s*csbc;                //计算测量结果
                jsz=jsz/2;   
        }

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

16

帖子

0

粉丝