找回密码
 立即注册

QQ登录

只需一步,快速开始

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

跪求c51的循迹程序,是四对管的

[复制链接]
跳转到指定楼层
楼主
ID:113369 发表于 2016-5-14 12:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
跪求c51的循迹程序,是四对管的
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:97007 发表于 2016-5-14 12:38 | 只看该作者
#include <REGX52.H>
#define uchar unsinged char
#define uint unsinged int
//*****驱动芯片l298管脚位声明******
sbit PWM2=P1^0;
sbit PWM1=P1^5;
sbit IN1=P1^4;
sbit IN2=P1^3;
sbit IN3=P1^2;
sbit IN4=P1^1;

//*******传感器TCRT管脚位声明*******
sbit XL=P3^7;//左一
sbit YL=P3^6;//左二
sbit XR=P3^5;//右一
sbit YR=P3^4;//右二

//******用于定时计数的两个全局变量位声明****

int count1=0;
int count2=0;

//*****左边电机前进*****
void forward_turn1()
{
   IN1=0;
   IN2=1;
}

//*****左边电机后退*****
void reverse_turn1()
{
   IN1=1;
   IN2=0;
}

//*****右边电机前进*****
void forward_turn2()
{
   IN3=0;
   IN4=1;
}

//*****右边电机后退*****
void reverse_tuen2()
{
   IN3=1;
   IN4=0;
}

//******左边电机速度控制函数*****
void speed1(int ct,int sd)
{
        if(ct<=sd)
          PWM1=1;
        else
          PWM1=0;
}

//******右边电机速度控制函数*****
void speed2(int ct,int sd)
{
        if(ct<=sd)
          PWM2=1;
        else
          PWM2=0;
}

//**********小车直线前进函数*******
void advance(int ct1,int sd1,int ct2,int sd2)
{
        forward_turn1();
        forward_turn2();

        speed1(ct1,sd1);
        speed2(ct2,sd2);
}
//******小车左转*******

void Left_turn1(int ct1,int sd1,int ct2,int sd2)
{
        forward_turn1();
        forward_turn2();

        speed1(ct1,sd1);
        speed2(ct2,sd2);
}
//******小车右转*******

void Right_turn2(int ct1,int sd1,int ct2,int sd2)
{
        forward_turn1();
        forward_turn2();

        speed1(ct1,sd1);
        speed2(ct2,sd2);
}

//*******主函数********
main()
{
        TMOD=0X11;
        TH0=(65536-1000)/256;
    TL0=(65536-1000)%256;
        EA=1;
        EX0=1;
        ET0=1;
        TR0=1;

        TH1=(65536-1000)/256;
    TL1=(65536-1000)%256;
        EA=1;
        EX1=1;
        ET1=1;
        TR1=1;

        while(1)
        {
                if(XL==0&&XR==0&&YL==0&&YR==0)        //传感器未检测到直线,小车直行
                {
                        advance(count1,500,count2,500);          
                }                          
                        if(XL==0&&XR==0&&YL==1&&YR==0)        //左边内测检测到,小左转
                {
                    Left_turn1(count1,0,count2,100);
                }       
                        if(XL==1&&XR==0&&YL==0&&YR==0)        //左外,大左转
                {
                        Left_turn1(count1,0,count2,150);
                }
                        if(XL==0&&XR==0&&YL==0&&YR==1)        //右内,小右转
                {
                        Right_turn2(count1,100,count2,0);
                }
                    if(XL==0&&XR==1&&YL==0&&YR==0)        //右外,大右转
                {
                        Right_turn2(count1,150,count2,0);          
                }                                                                       
                /*        if(XL==1&&XR==0&&YL==1&&YR==0)        //左2,中左转
                {
                        Left_turn1(count1,100,count2,300);
                }
                        if(XL==0&&XR==1&&YL==0&&YR==1)        //右2,中右转
                {
                        Right_turn2(count1,300,count2,100);
                }                        */
        }                          
}
//*********中断服务程序*******
void time0() interrupt 1
{
        TH0=(65536-1000)/256;
    TL0=(65536-1000)%256;
        count1++;
        if(count1>=1000)
        count1=0;
}
void time1() interrupt 3
{
    TH1=(65536-1000)/256;
    TL1=(65536-1000)%256;
        count2++;
        if(count2>=1000)
        count2=0;
}

评分

参与人数 1黑币 +100 收起 理由
admin + 100 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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