找回密码
 立即注册

QQ登录

只需一步,快速开始

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

做了个超声波距离感应小车但是有问题,求大佬帮看一下啊问题在哪

[复制链接]
跳转到指定楼层
楼主
ID:143846 发表于 2016-10-21 23:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我做了个超声波距离感应小车但是有问题,求大佬帮看一下啊问题在哪
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit Trig=P1^6;
sbit Echo=P3^2;
sbit wela=P2^7;
sbit dula=P2^6;
sbit test=P1^5;

sbit PWM1=P2^0;
sbit PWM2=P2^1;
sbit PWM3=P2^3;
sbit PWM4=P2^4;

void delay(uint);
uint  time,timeL,timeH,c;
bit succeed_flag=0;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//
void delay_20us()
{
uchar a;
for(a=0;a<100;a++);
}
//***************************************************************

void display(uint temp)
{
uchar ge,shi,bai;
bai=temp/100;
shi=(temp%100)/10;
ge=temp%10;
wela=1;
P0=0xf7;
wela=0;
dula=1;
P0=table[bai];
dula=0;
delay(10);
dula=1;
P0=0x00;
dula=0;
wela=1;
P0=0xef;
wela=0;
dula=1;
P0=table[shi];
dula=0;
delay(10);
dula=1;
P0=0x00;
dula=0;
dula=1;
P0=table[ge];
dula=0;
wela=1;
P0=0xdf;
wela=0;
delay(10);
dula=1;
P0=0x00;
dula=0;
}
//***************************************************************
void main()
{
uint distance;
test =0;
Trig=0;
EA=1;
TMOD=0x10;
while(1)
{
delay(10);
EA=0;
Trig=1;
delay_20us();
Trig=0;
while(Echo==0);
succeed_flag=0;
EA=1;
EX0=1;
TH0=0;
TL0=0;
ET0=1;
TF0=0;
TR0=1;
while(Echo==1);
TR0=0;
EX0=0;
if(succeed_flag==1)
{
        
  distance=timeH*256+timeL;
        distance=distance/420;
        
if(distance>=120)
        {
                c=70;
    TMOD=0x01;
    TH1=0xff;
    TL1=0xf7;
    EA=1;
    ET1=1;
    TR1=1;
               
        }
        else
        {
                c=80-distance/6;
    TMOD=0x01;
    TH1=0xff;
    TL1=0xf7;
    EA=1;
    ET1=1;
    TR1=1;
        }
TR1=0;        
        display(distance);
}
if(succeed_flag==0)
{
distance=0;
test = !test;
        c=70;
  TMOD=0x01;
  TH1=0xff;
  TL1=0xf7;
  EA=1;
  ET1=1;
  TR1=1;

}
}
}
//***************************************************************

void exter() interrupt 0 // ????0?0?
{
timeH =TH0;
timeL =TL0;
succeed_flag=1;
EX0=0;
//        num=num+1;
        
}
//****************************************************************

void tim0() interrupt 3
{
TR1=0;
TH1=0xff;
TL1=0xf7;
TR1=1;

time++;
if(time>=100) time=0;
if(time<=c) PWM2=0,PWM3=0;
else PWM2=1,PWM3=1;
PWM1=0,PWM4=0;
}

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

使用道具 举报

沙发
ID:123732 发表于 2016-10-22 09:28 | 只看该作者
有问题?描述不清楚,有什么问题具体说说,是不会跑还是乱转圈还是----描述清楚了坛友们才有可能帮到你
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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