久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3236|回復: 2
收起左側

紅外小車加超聲波測距

[復制鏈接]
ID:138082 發表于 2016-11-12 18:09 | 顯示全部樓層 |閱讀模式
紅外小車加超聲波測距
程序哪里有錯誤?
#include<reg52.h>
#define uint  unsigned int
#define uchar  unsigned char   
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
sbit hw=P3^0;
sbit tr=P3^4;
sbit ec=P3^5;
sbit wela=P2^7;
sbit dula=P2^6;
uint distance,time,tl,th;
uchar code table[]={                                   
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay_20us(void )
{
    uchar a ;
    for(a=0;a<100;a++);
}
void delay(uint a )
{
    while(a--);
}
void delaym(uint xms)                     
{
uint i,j;
for(i=xms;i>0;i--)
  for(j=110;j>0;j--);
}
void display(uint temp)
{
    uint ge,shi,bai;
    bai=temp/100;
    shi=(temp%100)/10;  
    ge=temp%10;
  
    wela=1;
    P0=0xfe;
    wela=0;
    dula=1;
    P0=table[bai];
    dula=0;
    delaym(1);
    dula=1;
    P0=0x00;   //關位碼
    dula=0;
    wela=1;
    P0=0xfd;
    wela=0;
    dula=1;
    P0=table[shi];
    dula=0;
    delaym(1);
    dula=1;
    P0=0x00;   //關位碼
    dula=0;
    dula=1;
    P0=table[ge];
    dula=0;
    wela=1;
    P0=0xfb;
    wela=0;
    delaym(1);
    dula=1;
    P0=0x00;   //關位碼
    dula=0;
}     
void forward()                 //左右輪都正轉,前進                        //speed>=0&&speed<=100; time=speed*200us
{
      
        IN1=1;
        IN2=0;
        IN3=1;
        IN4=0;
}
void backward()                   //左右輪都后轉,后退
{
      
        IN1=0;
        IN2=1;                     
        IN3=0;
        IN4=1;
}
void main()
{  TMOD=0X10;
         while(1)
        {
                if(hw==1)
                {   
                           forward();
                }
               
                else
                {
                         backward();
                }
    tr=1;         //超聲波輸入端
       delay_20us();   //延時20us
       tr=0;         //產生一個20us的脈沖
       while(ec==0); //等待Echo回波引腳變高電平
       TH1=0;          //定時器1清零
       TL1=0;          //定時器1清零
       TF1=0;          //計數溢出標志
       TR1=1;          //啟動定時器1
    while(ec==1);
      th=TH1;
    tl=TL1;
    TL1=0;
    TH1=0;
       TR1=0;          //關閉定時器1
       time=th*256+tl;
       distance=time*0.017;  //厘米     
           display(distance+1);        
        }
   

}

回復

使用道具 舉報

ID:147443 發表于 2016-11-14 21:59 | 顯示全部樓層
你感覺哪里有問題呢,這樣讓人看一堆代碼 誰愿意看啊
回復

使用道具 舉報

ID:147916 發表于 2016-11-14 22:29 | 顯示全部樓層
        #include   <AT89X51.H>
        #include   <intrins.h>
    #include   <STDIO.H>

    #define uchar unsigned  char
    #define uint  unsigned   int  
        #define  RX  P1_6
    #define  TX  P1_5
  

        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

        }

}              

測距模塊加進去就好了
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品成人一区二区三区夜夜夜 | 中文字幕 亚洲一区 | 免费午夜视频在线观看 | 欧美 日韩 中文 | 欧美日韩高清一区二区三区 | 欧美久久久久久久久 | 黄色毛片黄色毛片 | 久草中文在线 | av官网在线 | 欧美综合国产精品久久丁香 | 天天综合天天 | 欧美一级片免费看 | 中文在线视频 | 国产精品视频播放 | 日韩一级二级片 | 欧美啪啪网站 | 亚洲欧美日韩国产综合 | 狠狠色狠狠色综合日日92 | 亚洲a一区二区 | 中文字幕第100页 | 免费99精品国产自在在线 | 亚洲三区在线观看 | 久久亚洲国产精品 | 国产激情在线 | 91精品国产综合久久久久 | 爱爱免费视频 | 久久专区 | 一级黄色录像毛片 | 婷婷开心激情综合五月天 | 欧区一欧区二欧区三免费 | 日韩中文字幕在线视频 | 欧美视频1区 | 亚洲国产精品日本 | 黄色片免费在线观看 | 综合国产第二页 | 国产高清亚洲 | 国产成人精品一区二三区在线观看 | 欧美一区二区三区 | 国产欧美在线播放 | 亚洲色视频| 欧美成人精品一区二区男人看 |