搜索
bottom↓
回复: 24

基于51单片机的循迹蔽障智能小车

[复制链接]

出0入0汤圆

发表于 2011-11-4 18:54:38 | 显示全部楼层 |阅读模式
刚接触单片机,还属于菜鸟级别,还望各位前辈多多指教。
#include<reg51.h>  
sfr CCON=0xd8;
sfr CMOD=0xd9;
sfr CL=0xe9;
sfr CH=0xf9;
sfr CCAP0L=0xea;
sfr CCAP0H=0xfa;
sfr CCAP1L=0xeb;
sfr CCAP1H=0xfb;
sfr CCAPM0=0xda;
sfr CCAPM1=0xdb;
sfr PCA_PWM0=0xf2;
sfr PCA_PWM1=0xf3;
sbit CR=0xde;
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
sbit out1=P2^0;
sbit out2=P2^1;
sbit out3=P2^2;
sbit out4=P2^3;
unsigned char zhuangtai1,zhuangtai2,zhuangtai3;


/****************************************
函数名:延时子函数
调用:delay(unsigned int t);
参数:unsigned char j;
返回值:unsigned int t;
结果:
备注:
/*********************************************/
void delay(unsigned int t){                         //延时子程序
    unsigned char j;
    while(t--){
           for(j=1;j>0;j--);
                }
}
/*******************************************/


/********************************************
函数名:PWM初始化函数
调用:PWM_init();
参数:无
返回值:无
结果:将PCA初始化为PWM模式,初始占空比为0
备注:需要多路PWM输出直接插入CCAPnH和CCAPnL即可
/********************************************/
void PWM_init(void){
    CMOD=0x02;     //设置PCA定时器
        CL=0x00;
        CH=0x00;
        CCAPM0=0x42;       //PWM0设置PCA工作方式为PWM方式(0100 0010)
        CCAP0L=0x00;       //设置PWM0初始值与CCAP0H相同
        CCAP0H=0x00;       //PWM0初始时为0

        CCAPM1=0x42;       //PWM1设置PCA工作方式为PWM方式
        CCAP1L=0x00;       //设置PWM1初始值与CCAP0H相同
        CCAP1H=0x00;       //PWM1初始时为0
        CR=1;              //启动PCA定时器
}
/*****************************************************/


/****************************************
函数名:PWM0占空比设置函数
调用:PWM0_set();
参数:0x00~oxFF(也可用0~255)
返回值:无
结果:设置PWM模式占空比,为0时全部高电平,为1时全部为低电平
备注:如果需要PWM1的设置函数,只要把CCAP0L和CCAP0H中的0改为1即可
/**************************************************/
void PWM0_set(unsigned char a){
        CCAP0L=a;    //设置值直接写入CCAP0L
        CCAP0H=a;    //设置值直接写入CCAP0H
}                          
void PWM1_set(unsigned char a){
        CCAP1L=a;    //设置值直接写入CCAP1L
        CCAP1H=a;    //设置值直接写入CCAP1H
}

/**************************************************/


/*********************************************
函数名:电机转动
调用:comeleft();comeright();comeon();comeback();PWM0_set();PWM1_set();
参数:0xc0;0x00;
返回值:无
备注:
/****************************************************/
  void comeleft(){                         //左转
        unsigned char j;
        PWM0_set(0xc0);
        PWM1_set(0xff);
        out2=0;
        out4=0;
        out3=1;
        for(j=0;j<10;j++)
        {
        out1=0;
        delay(2);
        out1=1;
        out3=1;
        delay(1);
        }
}
void comeright()
{                                                        //右转
        unsigned char j;
        PWM0_set(0xff);
        PWM1_set(0xc0);
        out2=0;
        out4=0;
        out1=1;
        for(j=0;j<10;j++)
        {
        out3=0;
        delay(2);
        out1=1;
        out3=1;
        delay(1);
        }
}
void comeon()
{                                                   //直行
        PWM0_set(0xc0);
        PWM1_set(0xc0);
        out2=0;
        out4=0;
        out1=1;
        out3=1;
}
void comeback()
{                                   //后退
        PWM0_set(0xc0);
        PWM1_set(0xc0);
        out2=1;
        out4=0;
        out1=0;
        out3=0;
        delay(5);
}
/*************************************************/


/**************************************************
函数名:循迹
调用:scanline();
参数:无
返回值:无
备注:
/*****************************************************/
void scanline()
{                                                        //循迹
        if(K3==1)
         {
         comeleft();                        // 左 转
         zhuangtai3=1;
         zhuangtai2=0;
         zhuangtai1=0;
         }
         else if(K1)
         {
         comeright();                   //右转
         zhuangtai3=0;
         zhuangtai2=0;
         zhuangtai1=1;
         }
         else if(K2||(!K1&&!K2&&!K3))
         {
         comeon();                          //直行
         zhuangtai3=0;
         zhuangtai2=1;
         zhuangtai1=0;
         }
         else{
         if(zhuangtai3){comeleft();}
         if(zhuangtai2){comeon();}
         if(zhuangtai1){comeright();}
         else{;}
         }
}
/***********************************************/


/*************************************************
函数名:主函数
调用:无
参数:无
返回值:无
结果:程序开始处,无限循环
备注:
/***********************************************/
void main(void){
        P1=0xff;
        P2=0xff;
        PWM_init();     //PWM初始化
        while(1){
        if(K4){
        scanline();
        }
        else{comeback();}
        }
}
/**********************************************/


循迹 (原文件名:20100301716.jpg)


(原文件名:20100301720.jpg)


(原文件名:图像028.jpg)

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-3-10 15:23:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-3-11 19:36:34 | 显示全部楼层
楼主做得不错,学习了

出0入0汤圆

发表于 2012-7-22 19:34:57 | 显示全部楼层
求交流,请楼主加qq821602050,谢谢

出0入0汤圆

发表于 2012-7-22 21:25:23 | 显示全部楼层
楼主这板子 是自己画的??功底可以哦

出0入0汤圆

发表于 2012-7-22 23:01:19 | 显示全部楼层
顶!!!!!!!!!!

出0入0汤圆

发表于 2012-7-22 23:52:39 | 显示全部楼层
不错,学习了。借用一下。谢谢。

出0入0汤圆

发表于 2012-10-16 10:36:24 | 显示全部楼层
我也正在做智能小车,学习中

出0入0汤圆

发表于 2012-10-16 10:42:38 | 显示全部楼层
程序没问题

出0入0汤圆

发表于 2012-11-9 00:26:58 | 显示全部楼层
值得学习咯~~不错

出0入0汤圆

发表于 2012-11-9 04:24:13 | 显示全部楼层
能不能发给电路图呢??????????????

出0入0汤圆

发表于 2012-12-3 13:51:19 | 显示全部楼层
mark!!mark!!mark!!

出0入0汤圆

发表于 2012-12-3 20:10:42 | 显示全部楼层
好玩的小车车~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

出0入0汤圆

发表于 2012-12-5 18:53:40 | 显示全部楼层
怎么没人给你穿裤子!!!!!!!!

出0入0汤圆

发表于 2012-12-5 18:54:34 | 显示全部楼层
可惜没有pid呀!!!!!!

出0入0汤圆

发表于 2012-12-6 15:30:09 | 显示全部楼层
mark  markmark  

出0入0汤圆

发表于 2012-12-6 17:05:33 | 显示全部楼层
楼主做的不错,求交流

出0入0汤圆

发表于 2012-12-6 17:06:00 | 显示全部楼层
楼主做的太好了,这是我Q123166532,求交流

出0入0汤圆

发表于 2012-12-6 17:13:09 | 显示全部楼层
sorry,我把标题看成智障循迹小车了。。

出0入0汤圆

发表于 2012-12-8 15:52:18 | 显示全部楼层

出0入0汤圆

发表于 2013-3-24 10:44:16 | 显示全部楼层
楼主真敢用万用表做啊

出0入0汤圆

发表于 2013-4-11 21:41:26 | 显示全部楼层
lou楼主 我也正在做一个小车 想跟你交流下,加我QQ1016686049

出0入0汤圆

发表于 2013-4-20 21:10:03 | 显示全部楼层
现在学到 小车这了,想想楼主学习使用超声波

出0入0汤圆

发表于 2013-5-3 21:33:33 | 显示全部楼层
楼主,很好的小车,求教啊qq942067383
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 09:48

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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