标题:
写一个简单的单片机超声波测距程序,数码管显示距离,单位厘米
[打印本页]
作者:
落日手工
时间:
2020-5-3 20:03
标题:
写一个简单的单片机超声波测距程序,数码管显示距离,单位厘米
写一个简单地超声波测距程序,数码管显示距离,单位厘米
单片机源程序如下:
#include "reg51.h"
unsigned char table[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
#define uint unsigned int
#define uchar unsigned char
sbit D1= P2^7;
sbit Trig = P2^2;
sbit Echo = P3^2;
sbit SMG_q = P1^0;
sbit SMG_b = P1^1;
sbit SMG_s = P1^2;
sbit SMG_g = P1^3;
uint time = 0;
uint timeH = 0;
uint timeL = 0;
uint succeed_flag;
void display(uint da);
void delay(uint z);
void delay_20us();
void main(void)
{
uint distance;
Trig=0; //首先拉低脉冲输入引脚
EA=1; //打开总中断0
TMOD=0x10; //定时器1,16位工作方式
while(1)
{
EA=0; //关总中断
Trig=1; //超声波输入端
delay_20us(); //延时20us
Trig=0; //产生一个20us的脉冲
while(Echo==0); //等待Echo回波引脚变高电平
succeed_flag=0; //清测量成功标志
EA=1;
EX0=1; //打开外部中断0
TH1=0; //定时器1清零
TL1=0; //定时器1清零
TF1=0; //计数溢出标志
TR1=1; //启动定时器1
delay(20); //等待测量的结果
TR1=0; //关闭定时器1
EX0=0; //关闭外部中断0
if(succeed_flag==1)
{
time=timeH*256+timeL;
distance=time*0.0172; //厘米
display(distance );
if(distance<=150 && distance>=80)
{
D1=0;
}
else D1=1;
}
if(succeed_flag==0)
{
distance=9999;
D1=1;
delay(24);
}
}
}
void display(uint da)
{
SMG_q=0;
P0=table[da/1000];
delay(1);
P0=0XFF;
SMG_q=1;
SMG_b=0;
P0=table[da/100%10];
delay(1);
P0=0XFF;
SMG_b=1;
SMG_s=0;
P0=table[da%100/10];
delay(1);
P0=0XFF;
SMG_s=1;
SMG_g=0;
P0=table[da%10];
delay(1);
P0=0XFF;
SMG_g=1;
}
void exter() interrupt 0 // 外部中断0是0号
{
timeH =TH1; //取出定时器的值
timeL =TL1; //取出定时器的值
succeed_flag=1;//至成功测量的标志
EX0=0; //关闭外部中断
}
//****************************************************************
//定时器1中断,用做超声波测距计时
void timer1() interrupt 3 //
{
TH1=0;
TL1=0;
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}
void delay_20us()
{
uchar a ;
for(a=0;a<100;a++);
}
复制代码
所有程序51hei提供下载:
超声波测距—数码管显示距离(单位厘米)程序.rar
(28.34 KB, 下载次数: 31)
2020-5-3 20:00 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2020-5-5 14:27
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
作者:
单片机编程好难
时间:
2020-5-24 15:16
你好,请问数码管怎么连接的,我在仿真上没有结果
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1