您的位置 首页 设计

51单片机超声波模块数码管程序编写

51单片机超声波模块数码管程序编写-超声波原理简单测距准确,应用广泛下面贴一个自己写的数码管程序,显示部分需要改,写的是我使用的是慧净开发板,共阴数码管。

超声波原理简略测距精确,运用广泛下面贴一个自己写的数码管程序,显现部分需求改,写的是我运用的是慧净开发板,共阴数码管

51单片机超声波模块数码管程序编写

//超声波模块程序

//Trig = P2^0

//Echo = P3^2

#include

#define uchar unsigned char

#define uint unsigned int

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的码表

uint TIme = 0;

uint TImeH = 0;

uint TImeL = 0;

uint succeed_flag;

sbit dula=P2^0; //段选信号的锁存器操控

sbit wela=P2^1; //位选信号的锁存器操控

sbit Trig = P2^2;

sbit Echo = P3^2;

//

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++);

}

//***************************************************************

//显现数据转化程序

void display(uint temp)

{

uchar qian,ge,shi,bai;

qian = temp/1000;

bai=temp/100%10;

shi=temp%100/10;

ge=temp%10;

wela=1;

//P0=0xf7;

P0 = 0xfe;

wela=0;

dula=1;

P0=table[qian];

dula=0;

delay(5);

wela=1;

//P0=0xf7;

P0 = 0xfd;

wela=0;

dula=1;

P0=table[bai];

dula=0;

delay(5);

dula=1;

P0=0x00; //关位码

dula=0;

wela=1;

//P0=0xef;

P0 = 0xfb;

wela=0;

dula=1;

P0=table[shi];

dula=0;

delay(5);

dula=1;

P0=0x00; //关位码

dula=0;

dula=1;

P0=table[ge];

dula=0;

wela=1;

//P0=0xdf;

P0 = 0xf7;

wela=0;

delay(5);

dula=1;

P0=0x00; //关位码

dula=0;

}

//***************************************************************

void main()

{

uint distance;

uint test =0;

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.172; //厘米

display(distance);

}

if(succeed_flag==0)

{

distance=0; //没有回波则清零

test = !test; //测验灯改变

}

}

}

//***************************************************************

//外部中止0,用做判别回波电平

void exter() interrupt 0 // 外部中止0是0号

{

timeH =TH1; //取出定时器的值

timeL =TL1; //取出定时器的值

succeed_flag=1;//至成功丈量的标志

EX0=0; //封闭外部中止

}

//****************************************************************

//定时器1中止,用做超声波测距计时

void timer1() interrupt 3 //

{

TH1=0;

TL1=0;

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/347300.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部