1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 单片机测距雷达c语言代码 51单片机超声波测距倒车雷达Proteus仿真+源代码

单片机测距雷达c语言代码 51单片机超声波测距倒车雷达Proteus仿真+源代码

时间:2019-06-22 12:35:57

相关推荐

单片机测距雷达c语言代码 51单片机超声波测距倒车雷达Proteus仿真+源代码

#include

#include

#include "LCD.H"

#include "delay.h"

#defineuint unsigned int

#defineuchar unsigned char

//定义引脚

sbit k1=P3^5;

sbit k2=P3^6;

sbit Trig=P2^5; //trig 发射脉冲

sbit Echo=P3^2;//echo 接受脉冲

sbit bg=P2^6;

sbit beep=P3^3;//beep

sbit led=P1^2;

//定义固定显示

uchar juli[5]={'A','.','A','A','m'};

uchar set_juli[]={'A','.','A','A','m'};

uchar zifu[]={'D','i','s',':'}; //Distance

//定义全局变量

uchar time0_flag=0;//定时器溢出中断

uint time=0; //定时器定时时间

uchar one_final=0; //一次测量完成

uint distance=0.0,set_dis=100; //距离和设定报警距离

void display();

void Trig_SR04();

void button_choose();

void judge_baojing();

void main()

{

EA=1; //外部中断0下降沿触发定时器0加门控位 高电平开启

TMOD=0x09;//16位 TR0=1; INT0=1; 开启

TR0=1;

EX0=1;

IT0=1; //下降沿触发

TH0=0;

TL0=0;

init(); //1602初始化

Trig_SR04();

while(1)

{

if(one_final) //一次完成后再次触发

{

Trig_SR04();

one_final=0;

}

judge_baojing();

display(); //液晶显示

button_choose();//按键调整

}

}

void INT0_hander() interrupt 0

{

time = TH0*256+TH0; //time us

distance=time*0.0170;//cm 34000cm*10e-6*time/2

one_final=1;

TH0=0;

TL0=0;

}

void Trig_SR04()//仿真里是地脉冲触发

{

Trig=0;

Trig=1;

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

Trig=0;

}

void judge_baojing()

{

uint time_baojing,i;

if(distance

{

time_baojing=distance*10;

for (i=0;i

{

DelayUs2x(100);

beep=!beep; //BEEP取反

}

for (i=0;i

{

led=~led;

DelayUs2x(time_baojing);

}

}

}

void display()

{

if(distance<5) //测量值小于下限

{

juli[0]='-';

juli[2]='-';

juli[3]='-';

}

else if(distance>500) //测量值大于上限

{

juli[0]='C';

juli[2]='C';

juli[3]='C';

}

else

{

juli[0]=distance/100+'0';

juli[2]=distance/10%10+'0';

juli[3]=distance%10+'0';

}

set_juli[0]=set_dis/100+'0';

set_juli[2]=set_dis/10%10+'0';

set_juli[3]=set_dis%10+'0';

LCD_Write_String(11,0,juli);//显示测距

LCD_Write_String(5,0,zifu); //显示distance

LCD_Write_String(11,1,set_juli); //显示报警距离

}

void button_choose()

{

uint k,e,xs; //e 控制个性化显示 xs显示周期

uchar a1,a2,a3,n=0,m=0,z=0; //按键调整 a1,a2,a3调整设定距离的三位从高到低nmz控制循环

if(!k1) //按键处理程序

{

EA=0;

TR0=0;

set_juli[0]='A';

set_juli[1]='.';

set_juli[2]='A';

set_juli[3]='A';

set_juli[4]='m';

LCD_Write_String(11,1,set_juli);

k=500;

while(k)

{

k--;

DelayMs(2);

}

set_juli[0]=set_dis/100+'0';

set_juli[2]=set_dis/10%10+'0';

set_juli[3]=set_dis%10+'0';

LCD_Write_String(11,1,set_juli);

a1=set_dis/100;

a2=set_dis/10%10;

a3=set_dis%10;

//按键调整最小距离

n=1;

while(n)

{

if(!k2)

{

while(!k2);

e=1;

xs=3;

a1+=1;

if(a1>5)

a1=0;

juli[0]=a1+'0';

}

if (e==1)

{

xs++;

juli[0]=a1+'0';

if(xs>6)

{

xs=0;

e=0;

}

}

else

{

juli[0]=' ';

xs++;

if(xs>3)

{

xs=0;

e=1;

}

}

LCD_Write_String(11,1,juli);

if(!k1)

{

while(!k1);

juli[0]=a1+'0';

m=1;

while(m)

{

if(!k2)

{

while(!k2);

e=1;

xs=3;

a2+=1;

if(a2>9)

a2=0;

juli[2]=a2+'0';

LCD_Write_String(11,1,juli);

}

if (e==1)

{

xs++;

juli[2]=a2+'0';

if(xs>6)

{

xs=0;

e=0;

}

}

else

{

juli[2]=' ';

xs++;

if(xs>3)

{

xs=0;

e=1;

}

}

LCD_Write_String(11,1,juli);

if(!k1)

{

while(!k1);

juli[2]=a2+'0';

z=1;

while(z)

{

if(!k2)

{

while(!k2);

e=1;

xs=3;

a3+=1;

if(a3>9)

a3=0;

juli[3]=a3+'0';

LCD_Write_String(11,1,juli);

}

if (e==1)

{

xs++;

juli[3]=a3+'0';

if(xs>6)

{

xs=0;

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。