|
大神們,能幫我看一下,為什么我的超聲波定位到人后停留時間變得只有一秒,我的這個程序設(shè)計的意義是定位到最近的人就直接超聲波舵機模塊就停止,物體或者人移動后,超聲波舵機就重新掃描再定位到人移動后的地方,做到一個跟蹤的功能,可是程序改完后,定位時間反而變短了,原先是直接停止,等待物體移動后繼續(xù)跟蹤。有沒有大神能幫我看一下是什么問題嗎?
單片機源程序如下:- #include “reg52.h”
- #include <intrins.h>
- unsigned char mos;
- sbit pwm1 =P1^4; //PWM信號輸出
- sbit RX = P0^6; //定義超聲波傳感器發(fā)射端
- sbit TX = P0^7; //定義超聲波傳感器接收端
- sbit jdq =P2^0; //定義電機
- sbit pwm2=P1^6;
- unsigned char juli,tt;
- unsigned long S=0;
- unsigned int ms,mm,suu,time,shu;
- sbit s=P1^5;
- sbit fmq=P1^3; //定義信號燈
- sbit led1=P1^0;
- sbit led2=P1^1;
- sbit led3=P1^2;
- unsigned char code su[]={ //數(shù)碼管碼共陰
- 0x3F,/*0*/
- 0x06,/*1*/
- 0x5B,/*2*/
- 0x4F,/*3*/
- 0x66,/*4*/
- 0x6D,/*5*/
- 0x7D,/*6*/
- 0x07,/*7*/
- 0x7F,/*8*/
- 0x6F,/*9*/
- };
- /*****************************************************
- 函數(shù)功能:延時若干毫秒
- 入口參數(shù):n
- ***************************************************/
- void delay(unsigned char i)//延時
- {
- unsigned char j,k;
- for(j=i;j>0;j--)
- for(k=125;k>0;k--);
- }
- /******************************************************************************/
- /* 函數(shù)名稱 : Init_timer0 */
- /* 函數(shù)描述 : 初始化單片機函數(shù) */
- /* 輸入?yún)?shù) : 無 */
- /* 參數(shù)描述 : 無 */
- /* 返回值 : 無 */
- /******************************************************************************/
- void Time0_Init() //定時器初始化
- {
- TMOD=0x11;
- TH1=0x00;
- TL1=0x00;
- TL0 = 0x49; //設(shè)置定時初值
- TH0 = 0xFD; //設(shè)置定時初值
- TR0=1; //定時器開始
- ET0=1;
- EA=1;
- TR1=0;
- }
- /******************************************************************************/
- /* 函數(shù)名稱 : timer0 */
- /* 函數(shù)描述 : T0中斷處理函數(shù) */
- /* 輸入?yún)?shù) : 無 */
- /* 參數(shù)描述 : 無 */
- /* 返回值 : 無 */
- /******************************************************************************/
- void Time0_Int() interrupt 1 //中斷程序
- {
- TL0 = 0xA6; //設(shè)置定時初值
- TH0 = 0xFF; //設(shè)置定時初值
- ms++;
- if(ms>mm){pwm1=0;}
- else pwm1=1;
- if(ms>200){ms=0;}
- }
- void ceju()
- {
- TX=1;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- TX=0;
- TH1=0;
- TL1=0;
- suu=0;
- while(!RX) //當(dāng)RX為零時等待
- {
- suu++;
- if(suu>2000) break;
- }
- TR1=1; //開啟定時器
- suu=0;
- while(RX) //當(dāng)RX為零時等待
- {
- suu++;
- if(suu>2000) break;
- }
- TR1=0; //關(guān)閉計數(shù)
- time=TH1*256+TL1;
- TH1=0;
- TL1=0;
- S=(time*1.7)/100; //算出來是CM
- shu=(unsigned char)S;
- }
- void xunbo()
- {
- delay(100);
- if(mos==0)
- {
- mm++;
- ms=0;
- TR0=1;
- delay(200);
- TR0=0;
- if(mm>=25){mos=1;}
- }
- if(mos==1)
- {
- mm--;
- ms=0;
- TR0=1;
- delay(200);
- TR0=0;
- if(mm<=5){mos=0;tt++;}
- }
- }
- unsigned char i;
- void delayms(void)
- {while(i--);
- }
- void disp1()
- {
- pwm2=1;delay(8000);
- pwm2=0;delay(12000);
- led1=0;
- }
- void disp2()
- {pwm2=1;delay(12000);
- pwm2=0;delay(12000);
- led1=1;led2=0;
- }
- void disp3()
- {
- pwm2=1;
- led2=1;led3=0;
- }
- void disp4()
- {pwm2=0;
- led3=0;
- }
- void keyscan()
- {if(s==0)
- {delay(5000);
- if(s==0)
- fmq=0;delay(12000);
- fmq=1;
- {if(++i==5)i=1;}
- TR2=0;
- }
- }
- void main()
- { juli=100;
- Time0_Init();
- mm=5;
- ms=0;
- keyscan();
- i=0;
- TH2=(65536-50000)/256;
- TL2=(65536-50000)%256;
- ET2=1;
- EA=1;
- TR2=1;
- while(1)
- {
- P0=~su[tt%10];
- if(tt==0)
- {
- xunbo();
- ceju();
- if(shu<juli){juli=shu;}
- }
- if(tt==1)
- {
- xunbo();
- ceju();
- if(tt==2){tt=0;juli=100;}
- if(shu<(juli+3)) { xunbo(); xunbo(); tt=5;}
- }
- if(tt==5)
- {
- jdq=0;
- delay(200);
- delay(200);
- delay(200);
- delay(200);
- ceju();
- if(juli>5)
- if((shu<(juli-5))||(shu>(juli+5))) {tt=0; juli=100;jdq=1;}
- if (led1==0)
- {disp1();}
- if (led2==0)
- {disp2();}
- if (led3==0)
- {disp3();}
- if (led3==0)
- {disp4();}
- }
- }
- }
- //定時器2中斷程序
- void timer2() interrupt 5
- {TF2=0;
- switch(i)
- {
- case 1:disp1();break;
- case 2:disp2();break;
- case 3:disp3();break;
- case 4:disp4();break;
- default:;
- }
- }
復(fù)制代碼
|
|