#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仿真+源代码相关推荐

  1. 单片机温度控制器c语言代码,51单片机两路温度控制器设计方案

    原标题:51单片机两路温度控制器设计方案 本文提出了基于 两路 的设计方案,该设计方案采用两个DS18B20温度 ,采集两个不同地方的温度,通过AT89C51处理进行,由四位 数码管显示所测量温度,前 ...

  2. 单片机12864电子锁c语言代码,51单片机+LCD12864实现密码锁Proteus仿真和代码

    #include       //  包含51单片机寄存器定义的头文件 #include     //包含_nop_()函数定义的头文件 #include #include <12864.h&g ...

  3. 51单片机正弦波c语言,用51单片机产生正弦波

    <用51单片机产生正弦波>由会员分享,可在线阅读,更多相关<用51单片机产生正弦波(3页珍藏版)>请在人人文库网上搜索. 1.单片机产生50Hz正弦波1.实验要求用单片机产生5 ...

  4. 单片机显示屏c语言程序,51单片机驱动1602液晶显示器c程序

    51单片机驱动1602液晶显示器c程序 /* 程序效果:单片机控制液晶显示器1602显示字母数字,用户自行更改io 程序版权:http://www.51hei.com */ #include //头文 ...

  5. 单片机音乐盒c语言源程序,51单片机八音盒源程序(汇编语言)

    ;//***************************************************** ;文件名:  八音盒.asm ;描  述:  八音盒,P1选择音乐,低电平有效,P3. ...

  6. c51语言 12864菜单设计 不带自库,12864显示花屏 - c51编程(单片机的c语言) - 51单片机学习论坛 www.51c51.com - Powered by Discuz!...

    /**************************************************************************** *描述:12864+ds1302+ds18b ...

  7. 单片机右移c语言程序,51单片机+点阵8*8上、下、左、右移显示C程序(原创)

    最近在研究点阵,这东西看起来简单,但是要完全掌握它,可是要花一定时间的!我现在做得8*8点阵硬件电路是这样的,行采用74HC138+三极管8550驱动,列采用74HC595驱动,这种电路是非常用的,其 ...

  8. c51单片机时钟c语言程序设计,51单片机C编程(六、定时器时钟显示时分秒)

    //编程:jumpmysoul #include #define ulong unsigned long char tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x8 ...

  9. 51单片机烟雾传感器C语言程序,51单片机烟雾报警器制作+程序

    烟雾报警器制作过程及相关程序 //程序头函数 #include //宏定义 #define uint unsigned int #define uchar unsigned char #define ...

最新文章

  1. 2017年50道Java线程面试题
  2. 推荐:Webpack2入门到深入的中文文档
  3. 用c语言运行程序的优点,C语言学习与总结---第一章:C语言概述
  4. 数据结构与算法 / 冒泡排序最坏情况下的时间复杂度解析
  5. Java static用法代码讲解
  6. 回顾丨2021数据库大咖讲坛(第6期)视频PPT互动问答
  7. 2017.9.22 小约翰的游戏John 失败总结
  8. 程序员,你会说话吗?
  9. 铁大Facebook——十天冲刺(4)
  10. “后T+0”时代:基金电商人以变应变
  11. 无法导入 指定文件不是注册脚本 您在注册表编辑器中只能导入二进位注册文件.reg
  12. nacos运行报jar的错Failed to get nested archive for entry BOOT-INF/lib/XXX.jar
  13. 手把手教你如何高效落地单项目管理 | 一看既会
  14. tail -f和tail -F的区别
  15. 著名平面设计师有哪些?你想成为他们嘛?
  16. 关于自动布局(Autolayout)
  17. 如何让Ubuntu系统支持LDAC,APTX,AAC编码(提升蓝牙音质)
  18. python 打印机控制_python调用打印机
  19. layout_gravity和gravity的区分和应用
  20. win10添加美式键盘_Windows10添加中文美式键盘,传统语言栏,采用ctrl+shift切换输入法...

热门文章

  1. android沉浸式状态栏、变色状态栏、透明状态栏、修改状态栏颜色及透明
  2. 手机摄像头产业竞争格局趋势深度解读
  3. 《计算机工程与应用》投稿详解
  4. 会员计费系统c语言_高速公路计费系统 (代码)
  5. ssm毕设项目财务报账管理系统l6tbn(java+VUE+Mybatis+Maven+Mysql+sprnig)
  6. COSCon'22 数字徽章来啦!
  7. 4. 从神经元到意识的层级涌现
  8. 学习OpenCV:滤镜系列(15)——羽化(模糊边缘)
  9. 兰色幻想vba-作业1
  10. 一款轻便易用的物联网组态软件