基于单片机的超声波测距仪的设计 - 图文 联系客服

发布时间 : 星期一 文章基于单片机的超声波测距仪的设计 - 图文更新完毕开始阅读a0ac6049168884868762d6e3

附录

附录一 系统原理图

附录二 系统PCB板图

20

附录三 源程序 #include #include #include

#define uchar unsigned char #define uint unsigned int

uchar code dispBUF[33]={\ uchar numcode[10]={'0','1','2','3','4','5','6','7','8','9'}; uint num[29]={0};

uchar jsh,jsl; //计数器的高低位 uchar count=0; //10秒计次数 uint distance; //距离 uint temp; //温度变量

uchar bdata flag; //DS18B20存在标准 sbit RS=P2^0; //LCD RS sbit RW=P2^1; //LCD RW sbit E =P2^2; //LCD E

sbit DQ=P2^7; //DS18B20数字端口 sbit Busy = P0^7; //LCD 忙

void Delay(uint time); void delay1ms(uint ms); void delay();

void delay15(uchar us); void BUMA(void);

void B20_WDAT(uchar dat); uchar B20_RDAT(void);

void Init_18B20(void); //初始化18B20 void Write_Comm(uchar); //写入LCD命令 void Write_Data(uchar); //写入LCD数据 void Init_LCD(void);

sbit sta_flag =flag^0; //10MS到标准位,flag即通用标志位,当sta_flag=1时,表示到了10ms

sbit fuhao =flag^1; //温度的符号位 sbit START =P1^0; //启动测距

21

sbit CNT =P2^5; //发射超声波 sbit CSBIN =P2^6; //返回信号 sbit BUZZER =P3^7;

/******************定时器1溢出***************************/ void timer1(void)interrupt 2 using 1 {TR1=0;}

//关闭定时器/计数器1

//定时器0

/*********定时器0溢出中断函数,每60MS溢出****************/ void timer0(void)interrupt 1 using 0 {

TH0=0x15; TL0=0xA0; TH1=0; TL1=0; count++;

_nop_(); _nop_(); _nop_(); _nop_();

CNT=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();

_nop_(); //40KHZ的倒数就是25us,12个_nop_();就是24us CNT=0; _nop_(); _nop_();

//保持一段时间高电平

//先延时,后开始发送40KHz的超声波

//定时器0设定初值

//计数器1清零

sta_flag=1;

22

_nop_(); _nop_(); TR1=1; }

/***************系统初始化*************************/ void SYS_INIT() {

uchar i;

for(i=0;i<29;i++) //显示清零 { num[i]=0;}

TMOD=0x11; 计数器0和1均为16位定时/计数器 TH0 =0x15;

TL0 =0xA0; //设置定时器/计数器0的初值,60ms溢出 P0 =0; CNT=0; CSBIN=1; EA =1; }

/******************距离计算***************************/ void JULIJS() //使用全局变量,可以定义为空 {

float c,d,s; uint t;

if(temp<0x8000) c=331.4+0.61*temp*0.0625; else

c=331.4-0.61*temp*0.0625; t=jsh*256+jsl-120; d=(c*t*0.001)/2; d*=d; s=d-7.98;

distance=sqrt(s); distance传输

//修正后的值,数据通过全局变量//计算计数值 //温度为负

//P2^5口,发射发射超声波 //P2^6口,接收信号 //开总中断

//工作方式寄存器TMOD,设置定时器/

//延时,避免直达信号干扰,启动定时器/计数器1

delay15(50); //延时避开直达信号

23