51 단편기 초음파 거리 측정 디지털 파이프 디스플레이

3007 단어 단편기
초음파 원리는 간단하고 거리 측정이 정확하며 광범위한 아래에 자신이 쓴 디지털 파이프 프로그램을 붙여서 디스플레이 부분을 고쳐야 한다. 최근에 경기에서 쓴 것은 혜정 개발판, 공음 디지털 파이프를 사용했다.
//       
//   : Z H
//   2015/11/29
//Trig  = P2^0
//Echo  = P3^2
#include     
#define uchar unsigned char
#define uint  unsigned int

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
                            0x6d,0x7d,0x07,0x7f,0x6f};			//0-9   
					
uint time = 0;
uint timeH = 0;
uint timeL = 0;
uint succeed_flag;


sbit dula=P2^0;		//          
sbit wela=P2^1;		//          
sbit Trig  = P2^2;
sbit Echo  = P3^2;

//
void delay(uint z)
{
 uint x,y;
  for(x=z;x>0;x--)
  for(y=125;y>0;y--);
}
//
void delay_20us()
 { 
    uchar a ;
    for(a=0;a<100;a++);
 }
//***************************************************************
//        
void display(uint temp) 
 { 
    uchar qian,ge,shi,bai;
	qian = temp/1000;
    bai=temp/100%10;
    shi=temp%100/10;  
    ge=temp%10;
	wela=1;
    //P0=0xf7;
	P0 = 0xfe;
    wela=0;
    dula=1;
    P0=table[qian];
    dula=0;
    delay(5);  
    wela=1;
    //P0=0xf7;
	P0 = 0xfd;
    wela=0;
    dula=1;
    P0=table[bai];
    dula=0;
    delay(5);
    dula=1;
    P0=0x00;   //   
    dula=0;
    wela=1;
    //P0=0xef;
	P0 = 0xfb;
    wela=0;
    dula=1;
    P0=table[shi];
    dula=0;
    delay(5);
    dula=1;
    P0=0x00;   //   
    dula=0;

    dula=1;
    P0=table[ge];
    dula=0;
    wela=1;
    //P0=0xdf;
	P0 = 0xf7;
    wela=0;
    delay(5);
    dula=1;
    P0=0x00;   //   
    dula=0;
 }
//***************************************************************
void main()  
{ 
    uint distance;

    uint test =0;
    Trig=0;       //          
    EA=1;         //     0 
    TMOD=0x10;    //   1,16      
    while(1)        
    {
        EA=0;           //    
        Trig=1;         //      
        delay_20us();   //  20us
        Trig=0;         //    20us   
        while(Echo==0); //  Echo        
        succeed_flag=0; //       
        EA=1; 
        EX0=1;          //      0
        TH1=0;          //   1  
        TL1=0;          //   1  
        TF1=0;          //      
        TR1=1;          //     1
        delay(20);      //       
        TR1=0;          //     1
        EX0=0;          //      0
       if(succeed_flag==1)
       {   
          time=timeH*256+timeL;
          distance=time*0.172;  //  
          display(distance);
       }                         
      if(succeed_flag==0)
       {
          distance=0;                    //       
          test = !test;                  //     
        }               
    }
}
//***************************************************************
//    0,        
void exter()  interrupt 0   //     0 0 
 {   
     timeH =TH1;    //       
     timeL =TL1;    //       
     succeed_flag=1;//        
     EX0=0;         //      
 }
//****************************************************************
//   1  ,         
void timer1() interrupt 3  //
    {
         TH1=0;
         TL1=0;
     }

좋은 웹페이지 즐겨찾기