单片机测距雷达c语言代码,51单片机超声波测距倒车雷达Proteus仿真+源代码
#include
#include
#include "LCD.H"
#include "delay.h"
#define uint unsigned int
#define uchar 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黑下载附件…………
单片机测距雷达c语言代码,51单片机超声波测距倒车雷达Proteus仿真+源代码相关推荐
- 单片机温度控制器c语言代码,51单片机两路温度控制器设计方案
原标题:51单片机两路温度控制器设计方案 本文提出了基于 两路 的设计方案,该设计方案采用两个DS18B20温度 ,采集两个不同地方的温度,通过AT89C51处理进行,由四位 数码管显示所测量温度,前 ...
- 单片机12864电子锁c语言代码,51单片机+LCD12864实现密码锁Proteus仿真和代码
#include // 包含51单片机寄存器定义的头文件 #include //包含_nop_()函数定义的头文件 #include #include <12864.h&g ...
- 51单片机正弦波c语言,用51单片机产生正弦波
<用51单片机产生正弦波>由会员分享,可在线阅读,更多相关<用51单片机产生正弦波(3页珍藏版)>请在人人文库网上搜索. 1.单片机产生50Hz正弦波1.实验要求用单片机产生5 ...
- 单片机显示屏c语言程序,51单片机驱动1602液晶显示器c程序
51单片机驱动1602液晶显示器c程序 /* 程序效果:单片机控制液晶显示器1602显示字母数字,用户自行更改io 程序版权:http://www.51hei.com */ #include //头文 ...
- 单片机音乐盒c语言源程序,51单片机八音盒源程序(汇编语言)
;//***************************************************** ;文件名: 八音盒.asm ;描 述: 八音盒,P1选择音乐,低电平有效,P3. ...
- c51语言 12864菜单设计 不带自库,12864显示花屏 - c51编程(单片机的c语言) - 51单片机学习论坛 www.51c51.com - Powered by Discuz!...
/**************************************************************************** *描述:12864+ds1302+ds18b ...
- 单片机右移c语言程序,51单片机+点阵8*8上、下、左、右移显示C程序(原创)
最近在研究点阵,这东西看起来简单,但是要完全掌握它,可是要花一定时间的!我现在做得8*8点阵硬件电路是这样的,行采用74HC138+三极管8550驱动,列采用74HC595驱动,这种电路是非常用的,其 ...
- c51单片机时钟c语言程序设计,51单片机C编程(六、定时器时钟显示时分秒)
//编程:jumpmysoul #include #define ulong unsigned long char tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x8 ...
- 51单片机烟雾传感器C语言程序,51单片机烟雾报警器制作+程序
烟雾报警器制作过程及相关程序 //程序头函数 #include //宏定义 #define uint unsigned int #define uchar unsigned char #define ...
最新文章
- 2017年50道Java线程面试题
- 推荐:Webpack2入门到深入的中文文档
- 用c语言运行程序的优点,C语言学习与总结---第一章:C语言概述
- 数据结构与算法 / 冒泡排序最坏情况下的时间复杂度解析
- Java static用法代码讲解
- 回顾丨2021数据库大咖讲坛(第6期)视频PPT互动问答
- 2017.9.22 小约翰的游戏John 失败总结
- 程序员,你会说话吗?
- 铁大Facebook——十天冲刺(4)
- “后T+0”时代:基金电商人以变应变
- 无法导入 指定文件不是注册脚本 您在注册表编辑器中只能导入二进位注册文件.reg
- nacos运行报jar的错Failed to get nested archive for entry BOOT-INF/lib/XXX.jar
- 手把手教你如何高效落地单项目管理 | 一看既会
- tail -f和tail -F的区别
- 著名平面设计师有哪些?你想成为他们嘛?
- 关于自动布局(Autolayout)
- 如何让Ubuntu系统支持LDAC,APTX,AAC编码(提升蓝牙音质)
- python 打印机控制_python调用打印机
- layout_gravity和gravity的区分和应用
- win10添加美式键盘_Windows10添加中文美式键盘,传统语言栏,采用ctrl+shift切换输入法...