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

发布者:心连心意最新更新时间:2021-02-04 来源: eefocus关键字: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的码表


uinttime = 0;


uintTImeH = 0;


uintTImeL = 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(uinttemp)


{


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;


}


关键字:51单片机  超声波模块  数码管 引用地址:51单片机超声波模块数码管程序编写

上一篇:基于AT89C51单片机直流电机PWM调速程序分享
下一篇:51单片机时钟电路原理

推荐阅读最新更新时间:2024-11-17 02:26

蜂鸣器播放DOREMI+普中51单片机+江科大自化协
现象 在无源蜂鸣器上循环演奏低音“DO、RE、MI、FA、SO、LA、SI”这7个音调。 参考程序 1 主函数 #include REGX52.H #include delayms.h #include timer0.h sbit Buzzer = P2^5; //音调与频率对照表,低中高:1,1#,2,2#,3,4,4#,5,5#,6,6#,7 //unsigned int FreqTable ={ // 63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528, // 64580,64633,64684,647
[单片机]
51单片机(三十)—— 矩阵键盘计算器
在《51单片机(二十九)—— 矩阵键盘输入实验》中,我们对矩阵键盘的原理及使用方法进行了介绍。在本文中,我们采用矩阵键盘设计一个计算器,实现简单的计算器功能。 这个实验的代码的主函数如下所示。 main() { init_T0(); for(;;) { keyma=KEYscan(); keyvalue=Keychange(keyma); if(keyvalue!=0xff) { if(mm==0) for(n=0;n 8;n++) showdata =0; //清除数码管显示 if(('+'==keyvalue)|| (mm
[单片机]
51单片机16X16点阵上移C语言程序
前面已经分享了,点阵汇编语言,想信大家大部分用C语言较多了,下面我就将16X16点阵上移C语言程序分享出来,希望能帮到需要的朋友!本人此程序有经过实物测试的。并非随意弄出来的。并且有配视频效果,可以点击查看的视频祥见: http://www.tudou.com/programs/view/D0SCJyO4RBQ/ 下面是原理图,请大家祥细看看,不懂的帖子留言! #include reg52.h #define uchar unsigned char #define uint unsigned int #define LINE P0//定义行线IO口,即74HC154控制端 #define shudu 20//字移动的
[单片机]
<font color='red'>51单片机</font>16X16点阵上移C语言程序
51单片机汇编语言实验(五)-----A/D 0809模数转换和DA0832
一、实验目的:    了解模/数转换基本原理,掌握ADC0809的使用方法,掌握DAC0832芯片的使用方法。 二、实验设备:    PC计算机一台,Dais-52PRO+实验系统一套。 三、实验内容:    1. A/D 0809模数转换    2. DA0832数模转换 四、 A/D 0809模数转换    1、实验原理:    利用实验系统上的ADC0809作为A/D转换器,实验系统的电位器提供模拟量输入,编制程序,将模拟量转换成数字量并显示。    2、实验步骤:   ① 将0809区的IN0与调压区的0-5V孔连接;   ②将控制线区的RD连到逻辑电路区或非门的一个输入端;   ③将端口地址区的300连到
[单片机]
<font color='red'>51单片机</font>汇编语言实验(五)-----A/D 0809模数转换和DA0832
利用51单片机做一个简易时钟
利用独立键盘,数码管完成一个简易的时钟,按键一可以修改时间,按键二可以设置闹钟,按键三进行加一操作,按键四进行减一操作。 主函数: void main() { bsp_init(); while(1) { TimeTim(); //正常时间在走 bsp_KeyScan(); //键盘扫描看哪个功能键被按下 bsp_KeyProc(keyvalue); //根据键值进行相应的功能处理 SetValueShow(); //数码管上显示的值 ShowSegCC(); //显示在数码管上 bsp_CheckAlarm(); /
[单片机]
基于51单片机的温控风扇-数码管显示-风扇人体感应
一.硬件方案 系统采用51单片机作为控制平台对风扇转速进行控制。可由用户设置高、低温度值,测得温度值在高低温度之间时打开风扇弱风档,当温度升高超过所设定的温度时自动切换到大风档,当温度小于所设定的温度时自动关闭风扇。风扇控制状态随外界温度而定,并通过PWM的方式控制风扇的转速。 主要由51单片机+最小系统+数码管显示模块+数码管驱动模块+温度采集模块+人体感应模块+风扇模块+按键模块等构成: 二.设计功能 (1)采用DS18B20温度传感器测温,三级管驱动数码管显示温度和风扇的档位,人体感应模块检测是否有人。 (2)共3个按键:1设置、2键加、3键减。按一下设置可以设置上限值,再按下设置下限,均可以按键加减调整; (3)利
[单片机]
基于<font color='red'>51单片机</font>的温控风扇-<font color='red'>数码管</font>显示-风扇人体感应
MCS-51单片机系统程序的设计
  微控制器MCS-51单片机具有64K程序存储器和64K数据存储器的寻址能力。其数据存储器和I/O设备统一编址均在64K的范围内。其复位后的程序指针为0000H,因此在设计系统的硬件时必须将程序存储器的地址安排在0000H开始的存储器,使其与系统复位后的程序指针保持一致。同时在设计系统程序时,也必须将程序的起始地址安排在0000H开始的单元中。   INTEL MCS-51单片机采用了5个中断,即外部中断0、定时器T0中断、外部中断1、定时器T1中断和串行口中断,这5个中断的中断服务程序入口地址分别为0003H、000BH、0013H、001BH和0023H。这样在地址0000H到0003H之间只有3个字节,因此在启动地址通常只能
[单片机]
51单片机操作系统开发中的问题与技巧
引 言   51系列单片机是美国Intel公司在1980年推出的高性能8位单片机,在我国的应用非常广泛。目前,在软件设计中需要软件工程师从底层做起,在系统软件设计方面需要做大量的重复性劳动。如果开发一套基于51系列单片机的操作系统,那么用户只需要编写各个任务的程序,不必同时将所有任务运行的各种情况记在心中,不但大大减少了程序编写的工作量,而且减少了出错的可能性。 1 开发平台的选择和论证   开发平台的选择至关重要,因为有时它不光影响进度、产品质量、可维护性等一般问题,还涉及到方案的可实现性。   在本系统中,选择51系列单片机作为操作系统的运行平台有以下原因。   首先,51系列单片机应用非常广泛,一大批性能优越的51兼容单片机
[单片机]
<font color='red'>51单片机</font>操作系统开发中的问题与技巧
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved