找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机智能车红外循迹源程序

[复制链接]
跳转到指定楼层
楼主
ID:441175 发表于 2018-12-6 19:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>

/***********循迹声明*************/
sbit  led_1 = P0^6;
sbit  led_2 = P0^5;
sbit  led_3 = P0^4;
sbit  led_4 = P0^3;
sbit  led_5 = P0^2;
sbit  led_6 = P0^1;
sbit  led_7 = P0^0;

/**************电机声明************/
sbit  left_frontmotor_in1 = P1^0;
sbit  left_frontmotor_in2 = P1^1;
sbit  left_backmotor_in1 = P1^2;
sbit  left_backmotor_in2 = P1^3;

sbit  right_frontmotor_in1 = P1^6;
sbit  right_frontmotor_in2 = P1^7;
sbit  right_backmotor_in1  = P1^4;
sbit  right_backmotor_in2  = P1^5;

float val;

void Turn_Left(int x);       //左轮直走
void Turn_Right(int x);      //右轮直走
void Straight(int x);
void Xunji(void);

void delay_ms(int n)
{
        unsigned int i,y;
       
        for(i=n;i>0;i--)
        for(y=114;y>0;y--);
}

int main(void)
{
        while(1)
        {
                 Xunji();
                if(val==0) Straight(10);
                else if(val>0){Turn_Right(30);Turn_Left(30-val*10);}
                        else if(val<0){Turn_Right(30+val*10);Turn_Left(30);}
        }
}

void Turn_Left(int x)
{
        left_frontmotor_in1 = 1;
        left_backmotor_in1 = 1;
        delay_ms(x);
        left_frontmotor_in1 = 0;
        left_backmotor_in1 = 0;
    left_frontmotor_in2 = 0;
    left_backmotor_in2 = 0;
        right_frontmotor_in1 = 0;
    right_frontmotor_in2 = 0;
    right_backmotor_in1 = 0;
    right_backmotor_in2 = 0;
        delay_ms(30-x);
}

void Turn_Right(int x)
{
        right_frontmotor_in1 = 1;
    right_backmotor_in1 = 1;
        delay_ms(x);
        right_frontmotor_in1 = 0;
    right_backmotor_in1 = 0;
        left_frontmotor_in1 = 0;
    left_frontmotor_in2 = 0;
    left_backmotor_in1 = 0;
    left_backmotor_in2 = 0;
        right_frontmotor_in2 = 0;
    right_backmotor_in2 = 0;
        delay_ms(30-x);
}

void Straight(int x)
{
        left_frontmotor_in1 = 1;
        left_backmotor_in1 = 1;
        right_frontmotor_in1 = 1;
        right_backmotor_in1 = 1;
        delay_ms(x);
        left_frontmotor_in1 = 0;
    left_frontmotor_in2 = 0;
        left_backmotor_in1 = 0;
    left_backmotor_in2 = 0;
        right_frontmotor_in1 = 0;
    right_frontmotor_in2 = 0;
        right_backmotor_in1 = 0;
    right_backmotor_in2 = 0;
        delay_ms(30-x);
}

void Xunji(void)
{       
        int p;
       
        p=P0&0x7f;
       
        switch(p)
        {
                case 0X7f:val=0;break;                //111 1111
                case 0X77:val=0;break;                //111 0111
                case 0X6F:val=2.3;break;                //110 1111
                case 0X7B:val=-2.3;break;                //111 1011
                case 0X5F:val=2.5;break;                //101 1111
                case 0X7D:val=-2.7;break;                //111 1101
                case 0X3F:val=3;break;                //011 1111
                case 0X7E:val=-3;break;                //111 1110
        }
       
//        if(led_1==1&&led_2==1&&led_3==1&&led_4==0&&led_5==1&&led_6==1&&led_7==1) val=0;
//        if(led_1==1&&led_2==1&&led_3==0&&led_4==1&&led_5==1&&led_6==1&&led_7==1) val=1;
//        if(led_1==1&&led_2==1&&led_3==1&&led_4==1&&led_5==0&&led_6==1&&led_7==1) val=-1;
//        if(led_1==1&&led_2==0&&led_3==1&&led_4==1&&led_5==1&&led_6==1&&led_7==1) val=2;
//        if(led_1==1&&led_2==1&&led_3==1&&led_4==1&&led_5==1&&led_6==0&&led_7==1) val=-2;
//        if(led_1==0&&led_2==1&&led_3==1&&led_4==1&&led_5==1&&led_6==1&&led_7==1) val=3;
//        if(led_1==1&&led_2==1&&led_3==1&&led_4==1&&led_5==1&&led_6==1&&led_7==0) val=-3;
}


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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