找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 2230|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

這個(gè)超聲波測(cè)距儀程序只會(huì)顯示0000

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:673128 發(fā)表于 2019-12-29 10:17 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include"myhead.h"    //還有一部分是digdisplay(unsigned char wei,unsigned char duan)的封裝函數(shù),這一部分沒(méi)問(wèn)題(我確定)

sbit Trig=P2^1;
sbit Echo=P2^0;   
bit flag=0;                  //定義一個(gè)中斷標(biāo)志位
u16 time,distance;

u8 n,date[4]={0,0,0,0};



void Count()
{
  time=TH0*256+TL0;
  distance=time*0.17;                    //算出距離單位是毫米       
  if(flag==1||distance>4500)                //說(shuō)明超過(guò)超聲波測(cè)距儀測(cè)試范圍                         最小2厘米最大450厘米
  {
    flag=0;
    date[3]=12;
        date[2]=13;
        date[1]=13;
        date[0]=0;
  }
  else
  {

         date[3]=distance/1000;
         date[2]=distance%1000/100;
         date[1]=distance%100/10;
         date[0]=distance%10;
  }
         
}

void Int0() interrupt 1                   //標(biāo)志位的改變
{
   flag=1;
}

void Int1() interrupt 3        //做每隔100毫秒給超聲波測(cè)距儀發(fā)送啟動(dòng)命令
{
        TL1 = 0x18;                //設(shè)置定時(shí)初值
        TH1 = 0xFC;                //設(shè)置定時(shí)初值
        digdisplay(3,date[3]);
        digdisplay(2,date[2]);
        digdisplay(1,date[1]);
        digdisplay(0,date[0]);
   n++;
   if(n==100)                //200毫秒定時(shí)時(shí)間到
   {
     n=0;
    TL0 = 0;               
    TH0 = 0;       
         Trig=1;
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
         Trig=0;
   }
}
void main()
{
   TMOD=0x11;  //開(kāi)啟定時(shí)器0,1
   TL0 = 0;                //設(shè)置定時(shí)初值                         時(shí)間 26470微秒
   TH0 = 0;                //設(shè)置定時(shí)初值                         最大距離 450厘米
   TF0=0;
   ET0=1;
   TL1 = 0x18;                //設(shè)置定時(shí)初值
   TH1 = 0xFC;                //設(shè)置定時(shí)初值
   TF1 = 0;                //清除TF1標(biāo)志
   TR1 = 1;                //定時(shí)器1開(kāi)始計(jì)時(shí)
   ET1=1;
   EA=1;
   while(1)
   {
      while(!Echo);
          TR0=1;
          while(Echo);
          TR0=0;
          Count();                                //對(duì)測(cè)試出來(lái)的時(shí)間進(jìn)行處理
   }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:437615 發(fā)表于 2019-12-29 22:43 | 只看該作者
主循環(huán)里沒(méi)有起動(dòng)函數(shù),while(!Echo);前面加啟動(dòng)函數(shù)
回復(fù)

使用道具 舉報(bào)

板凳
ID:673128 發(fā)表于 2019-12-30 12:03 | 只看該作者
zhy123654 發(fā)表于 2019-12-29 22:43
主循環(huán)里沒(méi)有起動(dòng)函數(shù),while(!Echo);前面加啟動(dòng)函數(shù)

啟動(dòng)函數(shù)在中斷3中,
回復(fù)

使用道具 舉報(bào)

地板
ID:673128 發(fā)表于 2019-12-30 14:40 | 只看該作者
大家問(wèn)題我找到了,沒(méi)想到在顯示部分(尷尬了),我的數(shù)碼管顯示程序是一次延時(shí)時(shí)間是1毫秒(共顯示四次也就是4毫秒),導(dǎo)致程序在中斷部分延時(shí)時(shí)間過(guò)長(zhǎng),縮短顯示函數(shù)的延時(shí)時(shí)間就行了,主程序沒(méi)問(wèn)題可以參考一下,也可以用查詢式的方法,不用定時(shí)器1,這樣就不用考慮程序的中斷了,而且還解決了某些小問(wèn)題。謝謝大家的解答了。
回復(fù)

使用道具 舉報(bào)

5#
ID:673128 發(fā)表于 2019-12-30 14:43 | 只看該作者
問(wèn)題出在顯示程序上,我的顯示程序延時(shí)時(shí)間過(guò)長(zhǎng)導(dǎo)致在中斷中的時(shí)間過(guò)長(zhǎng)了,縮短顯示程序的延時(shí)時(shí)間就可以了,謝謝大家對(duì)我問(wèn)題的解答。十分感謝!
回復(fù)

使用道具 舉報(bào)

6#
ID:673128 發(fā)表于 2019-12-30 14:44 | 只看該作者
左眼 發(fā)表于 2019-12-30 12:03
啟動(dòng)函數(shù)在中斷3中,

問(wèn)題出在顯示程序上,我的顯示程序延時(shí)時(shí)間過(guò)長(zhǎng)導(dǎo)致在中斷中的時(shí)間過(guò)長(zhǎng)了,縮短顯示程序的延時(shí)時(shí)間就可以了,謝謝大家對(duì)我問(wèn)題的解答。十分感謝!
回復(fù)

使用道具 舉報(bào)

7#
ID:130230 發(fā)表于 2019-12-30 16:44 | 只看該作者
正確的做法是用中斷+標(biāo)志實(shí)現(xiàn)延時(shí)。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表