标题:
STC89C52单片机+超声波测距传感器程序
[打印本页]
作者:
zyx123
时间:
2023-12-12 15:54
标题:
STC89C52单片机+超声波测距传感器程序
超声波测量距离,并且距离越近蜂鸣器报警的频率越高
单片机源程序如下:
//宏定义
#define uchar unsigned char
#define uint unsigned int
#define ULint unsigned long int
//温度零上与零下的标志位
char flag=0;
//超声波
char flags=0;
//超声波距离
char flag1s=0;
//计算定时间
uint time=0;
//计算距离
ULint L_=0;
//温度
uint t_=0;
//显示模式 0正常 1最大值调整 2最小值调整
uchar mode=0;
uint Max=490;
uint Min=30;
//按键标志
uchar k=0;
//数值有误
uchar FW=0;
//头函数
#include <reg52.h>
#include <intrins.h>
#include "BJ_Key.h" //报警按键
#include "display.h" //显示头函数
#include "ultrasonic_wave.h"//超声波头函数
#include "DS18B20.h" //温度传感器头函数
//函数声明
void delayms(uint ms);
//主函数
void main()
{
Init_ultrasonic_wave();
//屏幕初始化
Init1602();
//温度初始化
tmpchange();
t_=tmp();
tmpchange();
t_=tmp();
tmpchange();
t_=tmp();
//循环显示
while(1)
{
Key();
//正常显示
if(mode==0)
{
StartModule();//启动超声波
while(!RX); //当RX为零时等待
TR0=1; //开启计数
while(RX); //当RX为1计数并等待
TR0=0; //关闭计数
delayms(20); //20MS
tmpchange(); //温度转换
t_=tmp(); //度温度
Conut(t_/10); //计算距离
if(L_>Max||L_<Min)
{
TR1=1;
}
else
{
Feng=1;
TR1=0;
}
Display_1602(t_/10,L_);
}
//调整显示
else if(mode!=0)
{
//最大最小值
Init_MaxMin();
while(mode!=0)
{
Key();
if(k==1&&mode==1)
{
Init_MaxMin();
write_com(0x8d);//设置位置
}
else if(k==1&&mode==2)
{
Init_MaxMin();
write_com(0x8d+0x40);//设置位置
}
k=0;
}
//界面初始化
Init1602();
}
}
}
void delayms(uint ms)
{
uchar i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
//T0中断用来计数器溢出,超过测距范围
void CJ_T0() interrupt 1
{
flags=1; //中断溢出标志
}
//定时器1
void zd3() interrupt 3 //T1中断用来扫描数码管和计800MS启动模块
{
unsigned int m;
TH1=0xf8;
TL1=0x30; //定时器赋初值2ms
m++; //2ms m加一次
if(m>=(L_+10)) //m的值大于等于距离加10
{
m=0; //m清零
Feng=!Feng; //蜂鸣器取反
}
}
复制代码
原理图: 见附件
仿真: 无
代码:
超声波测距.zip
(49.02 KB, 下载次数: 34)
2023-12-12 15:49 上传
点击文件名下载附件
超声波测距
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1