找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1794|回复: 2
收起左侧

智能小车 超声波红外壁障 没有合适的程序

[复制链接]
ID:389862 发表于 2018-8-25 10:48 | 显示全部楼层 |阅读模式
小车由小白 做到现在 从L298N 到 单片机程序的考入  经历了很多 也学习了很多   最好的就是小车开关打开后 能自己走了  可是红外的程序 又不好用  是不是我应该一步步来  红外和一起 弄是不是复杂 了   感觉自己进展的太慢了  有没有 可以指明方向的 求解呀

点
回复

使用道具 举报

ID:386381 发表于 2018-8-26 01:16 来自手机 | 显示全部楼层
既然红外的不好用,那就试试433的或者315的遥控呢
回复

使用道具 举报

ID:164602 发表于 2018-8-27 09:02 | 显示全部楼层
第一:单片机应用中,什么是合适的程序?能发挥硬件性能的程序,就是适合的。你不说你的配件,只要合适的程序是不可能有的。
第二:我有一个,你可以参考。/*
简易小车。51单片机最小系统板,L298N带动两个电机,12V电机电源,L298N自带5V逻辑电源,
供板子使用。
超声波测距HC-SR04,用舵机SG90使它转动探测。
目标:壁障;
*/
#include <reg51.h>
#include <intrins.h>

sbit ZLDJ10=P2^3;//直流电机的控制口
sbit ZLDJ11=P2^2;
sbit ZLDJ20=P2^1;
sbit ZLDJ21=P2^0;

sbit RX=P2^6;//超声波测距HC-SR04数据口Echo
sbit TX=P2^5;//超声波测距HC-SR04数据口Trig

sbit DJ=P2^7;//SG90舵机的数据口

bit flag=0;
unsigned int  time=0;
unsigned int  timer=0;
unsigned long S=0;
unsigned long SPD[5]={5000,5000,5000,5000,5000};

unsigned char GT,DT;

void Delay10ms(unsigned int c);
void Delay50us(unsigned int c);

void DJZD (void);
void SG90 (void);
void Conut(void);
void CSBCJ(void);

void main(void)
{
        TMOD=0x11;//设T0、T1为方式1,GATE=0;
        TH0=0;
        TL0=0;         
        TH1=0xf8;
        TL1=0x30;
        ET0=1;
        ET1=1;
        EA=1;
        TR1=1;

        GT=30;DT=350;DJ=0;
        DJZD();

        TC();

        RX=1;
        TX=0;
        Delay10ms(500);
        RX=0;
        while(1)
        {
                CSBCJ();
                SPD[2]=S;
                if((S>=2500)||flag==1)
                {         
                        KZXCYD();
                }
                if (S<=2500)
                {
                        ZL();
                }
        }
}

void Conut(void)
{
        time=TH0*256+TL0;
        TH0=0;
        TL0=0;
        S= (long)(time*0.17);
}

void zd1() interrupt 1
{                                       
        flag=1;
}

void  zd3()  interrupt 3
{
        TH1=0xf8;
        TL1=0x30;
        timer++;
        if(timer>=100)
        {
                timer=0;
                TX=1;
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                TX=0;
        }
}

void CSBCJ(void)
{  
        while(!RX);
        TR0=1;
        while(RX);
        TR0=0;
        Conut();
}

void SG90(void)
{
        flag=0;
        GT=10;DT=390;DJZD ();
        CSBCJ();
        if ((flag==0)&&(S<=2500))
        {
                SPD[0]=S;
        }
        else
        {
                SPD[0]=5000;
        }
        flag=0;
        GT=20;DT=380;DJZD ();
        CSBCJ();
        if ((flag==0)&&(S<=2500))
        {
                SPD[1]=S;
        }
        else
        {
                SPD[1]=5000;
        }
        flag=0;
        GT=30;DT=370;DJZD ();
        CSBCJ();
        if ((flag==0)&&(S<=2500))
        {
                SPD[2]=S;
        }
        else
        {
                SPD[2]=5000;
        }
        flag=0;
        GT=40;DT=360;DJZD ();
        CSBCJ();
        if ((flag==0)&&(S<=2500))
        {
                SPD[3]=S;
        }
        else
        {
                SPD[3]=5000;
        }
        flag=0;
        GT=50;DT=350;DJZD ();
        CSBCJ();
        if ((flag==0)&&(S<=2500))
        {
                SPD[4]=S;
        }
        else
        {
                SPD[4]=5000;
        }
        flag=0;
        GT=10;DT=390;DJZD ();
        CSBCJ();
        if ((flag==0)&&(S<=2500))
        {
                SPD[0]=S;
        }
        else
        {
                SPD[0]=5000;
        }
        flag=0;
        GT=20;DT=380;DJZD ();
        CSBCJ();
        if ((flag==0)&&(S<=2500))
        {
                SPD[1]=S;
        }
        else
        {
                SPD[1]=5000;
        }
        flag=0;
        GT=30;DT=370;DJZD ();
        CSBCJ();
        if ((flag==0)&&(S<=2500))
        {
                SPD[2]=S;
        }
        else
        {
                SPD[2]=5000;
        }
        flag=0;
        GT=30;DT=370;DJZD ();
        Delay10ms(5);
}

void DJZD (void)
{
        unsigned char i;
        for (i=0;i<75;i++)
        {
                DJ=1;
                Delay50us(GT);
                DJ=0;                  
                Delay50us(DT);
        }
        DJ=0;
}

void Delay10ms(unsigned int c)
{
    unsigned char a,b;
    for(c;c>0;c--)
    {
                for(b=44;b>0;b--)
                {
                        for (a=112;a>0;a--)
                        {
                        }
                }
        }
}

void Delay50us(unsigned int c)
{
    unsigned char a;
    for(c;c>0;c--)
        {
                for (a=19;a>0;a--)
                {
                }
        }
}



1.jpg
2.jpg

51最小系统.pdf

298.58 KB, 下载次数: 3

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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