|
超聲波只能啟動(dòng)一次,數(shù)值都不變了
請(qǐng)問各位這是什么原因呢
- #include<reg52.h>
- #include<intrins.h>
- sbit TRIG=P2^6;
- sbit ECHO=P2^7;
- sbit zuo0=P2^0;
- sbit zuo1=P2^1;
- sbit zuo2=P2^2;
- sbit zuo3=P2^3;
- sbit clk=P1^2;
- sbit cs=P1^1;
- sbit din=P1^0;
- unsigned char i=0;
- unsigned int dis;
- unsigned int t;
- unsigned char flag=0;
- unsigned int timer=0;
- unsigned char code LedChar[]=
- {
- 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
- };
- unsigned char LedBuff[]=
- {
- 0xff,0xff,0xff,0xff
- };
- unsigned char code disp1[]=
- {
- 0x04,0x22,0x44,0x40,0x40,0x44,0x22,0x04,
- };
- unsigned char code disp2[]=
- {
- 0x00,0x22,0x12,0x10,0x10,0x12,0x22,0x00
- };
- void delay(unsigned int x)
- {
- unsigned char i;
- unsigned char j;
- for(i=0;i<x;i++)
- for(j=0;j<112;j++);
- }
- void write_byte(unsigned char Data)
- {
- unsigned char i;
- cs=0;
- for(i=8;i>=1;i--)
- {
- clk=0;
- din=Data&0x80;
- Data=Data<<1;
- clk=1;
- }
- }
- void write(unsigned add,unsigned char dat)
- {
- cs=0;
- write_byte(add);
- write_byte(dat);
- cs=1;
- }
- void chushi()
- {
- write(0x09,0x00);
- write(0x0a,0x03);
- write(0x0b,0x07);
- write(0x0c,0x01);
- write(0x0f,0x00);
- }
- void open()
- {
- TRIG=1;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- TRIG=0;
- }
- void jisuan()
- {
- TH1=0;
- TL1=0;
- while(!ECHO);
- TR1=1;
- while(ECHO);
- TR1=0;
- t=TH1*256+TL1;
- dis=(t*1.7)/100;
- if(dis>420)
- {
- dis=0;
- flag=0;
- LedBuff[0]=LedChar[15];
- LedBuff[1]=LedChar[15];
- LedBuff[2]=LedChar[15];
- LedBuff[3]=LedChar[15];
- }
- else
- {
- LedBuff[0]=LedChar[dis%10];
- LedBuff[1]=LedChar[dis/10%10];
- LedBuff[2]=LedChar[dis/100%10];
- LedBuff[3]=LedChar[dis/1000%10];
- }
- }
- void xianshixiao()
- {
- unsigned char i;
- delay(50);
- chushi();
- for(i=1;i<9;i++)
- write(i,disp1[i-1]);
- delay(1000);
- }
- void xianshiku()
- {
- unsigned char i;
- delay(50);
- chushi();
- for(i=1;i<9;i++)
- write(i,disp2[i-1]);
- delay(1000);
- }
- void main ()
- {
- TMOD=0x11;
- TR0=1;
- EA=1;
- ET0=1;
- ET1=1;
- while(1)
- {
- TH0=0XFC;
- TL0=0X67;
- open();
- jisuan();
- if(dis<=10)
- {
- xianshixiao();
- }
- else
- {
- xianshiku();
- }
- }
- }
- void timer1() interrupt 1
- {
- TH0=0XFC;
- TL0=0X67;
- P0=0XFF;
- switch(i)
- {
- case 0: zuo0=1;zuo1=1;zuo2=1;zuo3=0;i++;P0=LedBuff[0];break;
- case 1: zuo0=1;zuo1=1;zuo2=0;zuo3=1;i++;P0=LedBuff[1];break;
- case 2: zuo0=1;zuo1=0;zuo2=1;zuo3=1;i++;P0=LedBuff[2];break;
- case 3: zuo0=0;zuo1=1;zuo2=1;zuo3=1;i=0;P0=LedBuff[3];break;
- }
- timer++;
- }
- void timer0() interrupt 3
- {
- flag=1;
- }
復(fù)制代碼
|
|