找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4762|回复: 1
打印 上一主题 下一主题
收起左侧

测距模块程序初级1——51单片机用2个计数器控制2个超声波测距模块

[复制链接]
跳转到指定楼层
楼主
ID:76556 发表于 2015-4-10 02:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人认为该程序的处理速度即运行速度还有待增强!程序还有简化的余地
还有升级的必要:1、毕竟用了两个定时器!(这样一个51mcu只能处理两个模块工作,不能处理四个,
                            如此要使小车有避障或循迹功能至少需要三个51单片机!实在是浪费资源)
                            2、应该只用一个定时器(我理想的的方法是用一个单片机处理4个模块的数据一个单片机将处理后的数
                                据进行分析并作出响应,以控制电机转动,以控制小车)
            
#include<reg51.h>

#define uchar unsigned char
#define uint unsigned int
uchar num1,num2,num3,led0,led1,oo1,oo2,num11,num12,num13,led10,led11;
sbit tr=P1^0;
sbit ec=P1^1;
sbit lcd0=P2^0;
sbit lcd1=P2^1;
sbit tr1=P1^2;
sbit ec1=P1^3;
sbit lcd10=P2^2;
sbit lcd11=P2^3;
void timer(uint x)
{
uint q,w;
for(q=x;q>0;q--)
for(w=110;w>0;w--);
}
void init()
{
ec=0;
tr=0;
num1=0;
num2=0;
num3=0;
led0=1;
led1=1;
}
void trk()
{
tr=1;
timer(10);
tr=0;
num3=1;
}
void eck()
{
if(ec==1)
        {
        TR0=1;
        num2=1;
        }
if(ec==0&num2==1)
        {
        TR0=0;
        if(num1<30)
                {
                led0=0;
                num3=0;
                }
        if(num1>30)
                {
                led1=0;
                num3=0;
                }
        }
}
void open_time()
{
TMOD=0x11;
TH0=(65536-1)/256;
TL0=(65536-1)%256;
EA=1;
ET0=1;
TR0=0;
}
void dongzuo()
{
if(led0==0)
        {
        lcd0=0;
        lcd1=1;
        oo2=1;
        oo1=0;
        }
if(led1==0)
        {
        lcd1=0;
        lcd0=1;
        oo2=1;
        oo1=0;
        }
}
void init1()
{
ec1=0;
tr1=0;
num11=0;
num12=0;
num13=0;
led10=1;
led11=1;
}
void tr1k()
{
tr1=1;
timer(10);
tr1=0;
num13=1;
}
void ec1k()
{
if(ec1==1)
        {
        TR1=1;
        num12=1;
        }
if(ec1==0&num12==1)
        {
        TR1=0;
        if(num11<30)
                {
                led10=0;
                num13=0;
                }
        if(num11>30)
                {
                led11=0;
                num13=0;
                }
        }
}
void open_time1()
{
TMOD=0x01;
TH0=(65536-1)/256;
TL0=(65536-1)%256;
EA=1;
ET1=1;
TR1=0;
}
void dongzuo1()
{
if(led10==0)
        {
        lcd10=0;
        lcd11=1;
        oo1=1;
        oo2=0;
        }
if(led11==0)
        {
        lcd11=0;
        lcd10=1;
        oo1=1;
        oo2=0;
        }
}
void ff()
{
oo1=1;
oo2=0;
}
void main()
{
while(1)
        {
                ff();
                while(oo1==1)
                        {
                                init();
                                open_time();
                                trk();
                                while(num3==1)
                                        {
                                        eck();
                                        }
               
                                dongzuo();
                        }
                while(oo2==1)
                        {
                         init1();
                        open_time1();
                        tr1k();
                        while(num13==1)
                        {
                        ec1k();
                        }

                dongzuo1();
                }
        }
}
void time() interrupt 1
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
num1++;
if(num1==65536)
        {
        num1=0;
        }
}
void time1() interrupt 3
{
TH1=(65536-1)/256;
TL1=(65536-1)%256;
num11++;
if(num11==65536)
        {
        num11=0;
        }
}

此程序的设计者:薛羽豪

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:218542 发表于 2017-8-11 10:12 | 只看该作者
有详细的注解吗,还有这个程序是用来做什么的,现在我想用两个超声波同时测距,一起工作是不是会有干扰。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表