基于单片机的超声波测距系统设计实验报? - ?- 百度文库

ʱ : 基于单片机的超声波测距系统设计实验报? - ?- 百度文库ϿʼĶ

/**********************************************/ void key_with() { if(key_can == 1) //õk2ֵ趨 { menu_1 ++; if(menu_1 >= 2) { menu_1 = 0; } if(menu_1 == 0) //˳趨 { menu_ljsd = 10; //ٶȿƱλΪ500ms dis_smg[0] = smg_duan[distance % 10]; //ֵʾ dis_smg[1] = smg_duan[distance / 10 % 10] ; dis_smg[2] = smg_duan[distance / 100 % 10] & 0x7f; smg_i = 3; } if(menu_1 == 1) //ý { menu_ljsd = 1; //ٶȱ50ms dis_smg[0] = smg_duan[set_d % 10]; //趨ֵʾ dis_smg[1] = smg_duan[set_d / 10 % 10]; dis_smg[2] = smg_duan[set_d / 100 % 10] & 0x7f ; dis_smg[3] = 0x88; smg_i = 4; //A趨ֵ޸ıʶ } } if(menu_1 == 1) //ñֵ { if(flag_lj_3_en == 0) //֮ٶȼӿ menu_ljsd = 10 ; //500ms Ӽһ else menu_ljsd = 1; //50ms Ӽһ if(key_can == 2) //õk3ֵӣ { set_d ++ ; if(set_d > 350) set_d = 350; dis_smg[0] = smg_duan[set_d % 10]; //趨ֵʾ dis_smg[1] = smg_duan[set_d / 10 % 10] ; dis_smg[2] = smg_duan[set_d / 100 % 10] & 0x7f; dis_smg[3] = 0x88;

22

} if(key_can == 3) //õk4ֵ { set_d -- ; if(set_d <= 1) set_d = 1; dis_smg[0] = smg_duan[set_d % 10]; //趨ֵʾ dis_smg[1] = smg_duan[set_d / 10 % 10] ; dis_smg[2] = smg_duan[set_d / 100 % 10] & 0x7f ; dis_smg[3] = 0x88; //a } } }

/*********************ʱ0ʱ1ʼ******************/ void time_init() { EA = 1; //ж TMOD = 0X11; //ʱ0ʱ1ʽ1 ET0 = 1; //ʱ0ж TR0 = 1; //ʱ0ʱ ET1 = 1; //ʱ1ж TR1 = 1; //ʱ1ʱ }

/****************ӳٺ10usҪ********************/ void delay() {

int i=10; for(i;i>=0;i--) {

_nop_(); //ִһ_nop_()ָ1us } }

/**************************************************/ void send_wave() { long temp = 888; c_send = 1; //10usĸߵƽ delay(); c_send = 0; TH0 = 0; //ʱ0 TL0 = 0;

23

TR0 = 0; //ضʱ0ʱ flag_hc_value = 0; while(!c_recive); //c_reciveΪʱȴ TR0=1; while(c_recive) //c_reciveΪ1ȴ { flag_time0 = TH0 * 256 + TL0; if((flag_hc_value > 1) || (flag_time0 > 21000)) //Χʱʾ3888 { TR0 = 0; flag_csb_juli = 2; temp = 888; flag_hc_value = 0; break ; } else { flag_csb_juli = 1; } } if(flag_csb_juli == 1) //봦 { TR0=0; //ضʱ0ʱ EA = 0; temp = TH0; //ʱ0ʱ temp = temp * 256 + TL0; temp /= 59; //HC-SR04ģ 루ף=T*uS/58.823 EA = 1; if(temp > 380) //3.8mͳ { temp = 888; } } EA = 0; distance = temp; // EA = 1; }

/****************ðֵף**************************/ int iBuff[5];

void choise(int *a,int n) //ѡ {

24

int i,j,k,temp; for(i=0;ia[j]) k=j; //kָСԪ*/ if(i!=k) { //k!=iDzŽa[i]ΪС temp=a[i]; a[i]=a[k]; a[k]=temp; } } }

/*******************봦ʾ**********************/ void smg_display() { int Buff[5]; char i; if(distance == 95)return; //95ȥ iBuff[4] = iBuff[3]; iBuff[3] = iBuff[2]; iBuff[2] = iBuff[1]; iBuff[1] = iBuff[0]; iBuff[0] = (int)distance; for(i = 0; i<5; i++) Buff[i] = iBuff[i]; choise(Buff,5); //choiseð distance = (long)Buff[2]; //ȡ5ֵмֵ󴥣ȶ EA = 0; //ж dis_smg[0] = smg_duan[distance % 10]; //ȡٷλ׼ dis_smg[1] = smg_duan[distance / 10 % 10]; //ȡʮλ׼ dis_smg[2] = smg_duan[distance / 100 % 10] & 0x7f; //ȡ λ׼ EA = 1; //ж }

/*************************************************************/ void clock_h_l() { static uchar value; if(distance <= set_d) { value ++; //μ⣬ʵʾ趨ұ仯ʱĸ

25

ϵͬͷxxxxx#qq.com(#滻Ϊ@)