基于at89c51对stc89c51单片机超声波传感器完成测距系统制作的温度补偿精度设计论文 联系客服

发布时间 : 星期日 文章基于at89c51对stc89c51单片机超声波传感器完成测距系统制作的温度补偿精度设计论文更新完毕开始阅读a0d4b434842458fb770bf78a6529647d2728342b

// }

/*********************定时器0、定时器1初始化******************/ void time_init() { }

42

}

{ }

flag_csb_juli = 1;

if(flag_csb_juli == 1) { }

TR0=0;

//关定时器0定时

distance =flag_time0;

//读出定时器0的时间

distance *= 340 / 2 * 0.0001; // 0.017 = 340M / 2 = 170M = if(temperature <= 45)

distance

*=

wendu_buchang1[temperature]

/

2.0

*

0.0001;

0.017M 算出来是米

// 0.017 = 340M / 2 = 170M = 0.017M 算出来是米

else

distance *= 358 / 2.0 * 0.0001; // 0.017 = 340M / 2 = 170M =

//距离 = 速度 * 时间

//如果大于3.8m就超出超声波的量程

0.017M 算出来是米

if((distance > 500)) { }

distance = 888;

//开总中断

//定时器0、定时器1工作方式1

EA = 1; ET0 = 1; TR0 = 1; ET1 = 1; TR1 = 1;

TMOD = 0X11;

//开定时器0中断 //允许定时器0定时 //开定时器1中断 //允许定时器1定时 1

/****************按键处理数码管显示函数***************/ void key_with() { if(key_can == 1) //设置键

{ menu_1 ++; if(menu_1 >= 3) { menu_1 = 0; smg_i = 3;

//只显示3位数码管 }

if(menu_1 == 1) { smg_i = 4;

//只显示4位数码管 }

}

if(menu_1 == 1)

//设置报警

{ if(key_can == 2) { set_d ++ ; //加1

if(set_d > 400)

set_d = 400;

}

if(key_can == 3) { set_d -- ; //减1

if(set_d <= 1)

set_d = 1;

}

dis_smg[0] = smg_du[set_d % 10];

dis_smg[1] = smg_du[set_d / 10 % 10] ;

43

//取小数显示//取个位显示

}

/****************报警函数***************/ void clock_h_l() { }

/****************主函数***************/ void main() {

beep = 0;

//开机叫一声

delay_1ms(150); P0 = P1 = P2 = P3 = 0xff; send_wave(); //测距离函数

44

}

dis_smg[2] = smg_du[set_d / 100 % 10] & 0x7f ; //取十位显示 dis_smg[3] = 0x88; write_eeprom();

//a

//保存数据

static uchar value; if(distance <= set_d) { } else { }

value = 0; beep = 1;

//取消报警

value ++; //消除实际距离在设定距离左右变化时的干扰 if(value >= 2) { }

beep = ~beep;

//蜂鸣器报警

smg_display(); //处理距离显示函数

time_init(); //定时器初始化程序 init_eeprom(); //开始初始化保存的数据 send_wave(); //测距离函数 send_wave(); //测距离函数 while(1) { if(flag_300ms == 1) { flag_300ms = 0;

temperature = read_temp(); //先读出温度的值 clock_h_l(); //报警函数 send_wave(); //测距离函数 if(menu_1 == 0) smg_display();

//处理距离显示函数 if(menu_1 == 2)

//显示温度

{ dis_smg[0] = 0xff;

dis_smg[1] = smg_du[temperature % 10]; 位显示

dis_smg[2] = smg_du[temperature / 10 % 10] ; dis_smg[3] = 0xff; }

} key();

//按键函数

if(key_can < 10)

{ key_with();

//按键处理函数

}

}

}

45

//取温度的个//取温度的十位显示