超声波测距仪的设计(2)

2019-04-14 23:42

(六)软件设计方案:

开始变量及定时器0初始化给Trig端20us的高电平进行触发等待Echo变高Echo=1?TR0=1打开定时器,开始计时等待Echo变低Echo=1?Flag=1?检测是否超过65msTR0=0停止计时,计算出传播时间timeTH0=0,TL0=0计算出传输距离SS是否超出检测范围调用Display()进行显示显示‘- - - -’结束

程序如下:

#include #include< reg52.h > #define uint unsigned int #define uchar unsigned char uchar qian,bai,shi,ge; //数码管显示千,百,十,个,单位为cm uint time=0; //探测时间 unsigned long S=0; //探测距离,注意是长整型 //uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66, //0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //共阳数码管 uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; sbit echo=P3^7; //接收端 sbit trig=P3^6; //发射端 sbit SMG_q = P2^4; //定义数码管阳级控制脚(千位) sbit SMG_b = P2^5; //定义数码管阳级控制脚(百位) sbit SMG_s = P2^6; //定义数码管阳级控制脚(十位) sbit SMG_g = P2^7; //定义数码管阳级控制脚(个位) uchar flag,a; //标志位 /*函数名称:init() **输入参数:void **输出参数:void **函数功能:初始化超声波测距仪,定时器,中断 */ void init() { echo=0; trig=0; flag=1; qian=10;bai=10;shi=10;ge=10; //数码管显示- - - - TMOD=0x01; //设T0为方式1 TH0=0; TL0=0; ET0=1; //允许T0中断 TR0=0; EA=1; //开启总中断 } /*函数名称:delay() **输入参数:unsigned char cnt **输出参数:void **函数功能:延时函数 */ void delay(unsigned char cnt) //大约延时2*cnt 微妙 { while(--cnt); } /*函数名称:display() **输入参数:uchar qian, uchar bai, uchar shi, uchar ge **输出参数:void **函数功能:数码管显示模块 */ void display(uchar qian,uchar bai,uchar shi,uchar ge) { SMG_q=1; //选择千位数码管 P0=table[qian]; //查找\定义好的数码管段值与P0口输出,显示相应的1 delay(100); //加入短暂延时 P0=0XFF; //清除数码管显示,因是共阳型,所以不是0 SMG_q=0; //关闭千位数码管 SMG_b=1; //选择百位数码管 P0=table[bai]; //查找\定义好的数码管段值与P0口输出,显示相应的2 delay(100); //加入短暂延时 P0=0XFF; //清除数码管显示,因是共阳型,所以不是0 SMG_b=0; //关闭百位数码管 SMG_s=1; //选择十位数码管 P0=table[shi]&0x7f; //查找\定义好的数码管段值与P0口输出,显示相应的2 delay(100); //加入短暂延时 P0=0XFF; //清除数码管显示,因是共阳型,所以不是0 SMG_s=0; //关闭十位数码管 SMG_g=1; //选择个位数码管 P0=table[ge]; //查找\定义好的数码管段值与P0口输出,显示相应的2 delay(100); //加入短暂延时 P0=0XFF; //清除数码管显示,因是共阳型,所以不是0 SMG_g=0; //关闭个位数码管 } /*函数名称:startmodule() **输入参数:void **输出参数:void **函数功能:超声波测距仪触发模块 */ void startmodule() { trig=1; //15us 启动一次模块 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); trig=0; delay(10); } /*函数名称:main() **输入参数:void **输出参数:void **函数功能:控制模块 */ void main() { init(); //初始化子程序 while(1) { startmodule(); while(!echo) //起始为0,当为1时,开始计时 ; TR0=1; //开启计数 while(echo&&flag); //当echo为1计数并等待 //flag标志位,当检测超过65ms退出等待回波,继续下一次检测 time=(TH0*256+TL0)*(12/11.0592);


超声波测距仪的设计(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:法律 行政法

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: