讀出來的距離不正確,是怎么回事
程序:
- #include <reg51.h>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit TRIG=P1^6;
- sbit ECHO=P1^7;
- uint sonicMeasure();
- void t0Init();
- void display(uchar v,uchar w,uchar x,uchar y);
- void delay20us();
- void delay2ms();
- void delay60ms();
- uchar code tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
- void main(){
- uchar yi,er,san,si;
- uint distance;
-
- t0Init();
- while(1){
- distance=sonicMeasure();
- delay60ms();
- yi=distance/1000;
- er=distance%1000/100;
- san=distance%100/10;
- si=distance%10;
- display(yi,er,san,si);
- }
- }
- uint sonicMeasure(){
- uint s;
- TRIG=1;
- delay20us();
- TRIG=0;
-
- while(!ECHO);
- TR0=1;
- while(ECHO);
- TR0=0;
- s=(TH0*256+TL0)*0.017;//cm
- TH0=TL0=0x00;
- return s;
- }
- void t0Init(){
- TMOD=0x00;
- TH0=TL0=0x00;
- EA=1;
- ET0=1;
- }
- void display(uchar i,uchar j,uchar x,uchar y){
- P2=0x01;P3=tab[i];delay2ms();
- P2=0x02;P3=tab[j];delay2ms();
- P2=0x04;P3=tab[x];delay2ms();
- P2=0x08;P3=tab[y];delay2ms();
- P3=0xff;
- }
- void delay20us() //@12.000MHz
- {
- unsigned char i;
- _nop_();
- i = 7;
- while (--i);
- }
- void delay2ms() //@12.000MHz
- {
- unsigned char i, j;
- i = 4;
- j = 225;
- do
- {
- while (--j);
- } while (--i);
- }
- void delay60ms() //@12.000MHz
- {
- unsigned char i, j;
- i = 117;
- j = 184;
- do
- {
- while (--j);
- } while (--i);
- }
復制代碼
51hei.png (82.68 KB, 下載次數: 16)
下載附件
2021-3-9 16:10 上傳
|