找回密码
 立即注册

QQ登录

只需一步,快速开始

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

遥控模块控制四驱小车c程序代码

[复制链接]
跳转到指定楼层
楼主
ID:129080 发表于 2016-7-7 17:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  #include <reg52.h>
#define uint  unsigned int   
#define uchar unsigned char


sbit D0 = P0^0;       
sbit D1 = P0^1;       
sbit D2 = P0^2;
sbit D3 = P0^3;       
//sbit VT = P0^4;
sbit MD_L1 = P1^0;         
sbit MD_L2 = P1^1;
sbit MD_L3 = P1^2;
sbit MD_L4 = P1^3;
sbit MD_R1 = P1^4;         
sbit MD_R2 = P1^5;
sbit MD_R3 = P1^6;
sbit MD_R4 = P1^7;         
sbit LENA  = P2^0;
sbit LENB  = P2^1;
sbit RENA  = P2^2;
sbit RENB  = P2^3;


uchar pwm,num = 0, duty = 0, speed = 0,x=0, x1=0,x2=0,x3=0;


void delay(uint ms)
{
        uchar i;
    while(ms--)
        {
        for(i=0;i<200;i++);
        }
}
void advance()
{
    MD_L1=1;
               
    MD_L2=0;
               
        MD_L3=1;
               
        MD_L4=0;
               
        MD_R1=1;
       
        MD_R2=0;
       
        MD_R3=1;
       
        MD_R4=0;
}


void back()       
{
    MD_L1=0;
               
    MD_L2=1;
               
        MD_L3=0;
               
        MD_L4=1;
               
        MD_R1=0;
       
        MD_R2=1;


        MD_R3=0;
       
        MD_R4=1;






}
void left()                 
{
    MD_L1=0;
               
    MD_L2=0;
               
        MD_L3=0;
               
        MD_L4=0;
               
        MD_R1=1;
       
        MD_R2=0;
       
        MD_R3=1;
       
        MD_R4=0;






}
void left1()       
{
    MD_L1=0;
               
    MD_L2=1;
               
        MD_L3=0;
               
        MD_L4=1;
               
        MD_R1=0;
       
        MD_R2=0;
       
        MD_R3=0;
       
        MD_R4=0;


}
void left2()       
{
    MD_L1=0;
               
    MD_L2=1;
               
        MD_L3=0;
               
        MD_L4=1;
               
        MD_R1=1;
       
        MD_R2=0;
       
        MD_R3=1;
       
        MD_R4=0;
}
void right()  
{
    MD_L1=1;
               
    MD_L2=0;
               
        MD_L3=1;
               
        MD_L4=0;
               
        MD_R1=0;
       
        MD_R2=0;
       
        MD_R3=0;
       
        MD_R4=0;




}
void right1()  
{
    MD_L1=0;
               
    MD_L2=0;
               
        MD_L3=0;
               
        MD_L4=0;
               
        MD_R1=0;
       
        MD_R2=1;
       
        MD_R3=0;
       
        MD_R4=1;
}
void right2()  
{
    MD_L1=1;
               
    MD_L2=0;
               
        MD_L3=1;
               
        MD_L4=0;
               
        MD_R1=0;
       
        MD_R2=1;
       
        MD_R3=0;
       
        MD_R4=1;
}
void stop()  
{
    MD_L1=0;
               
    MD_L2=0;
               
        MD_L3=0;
               
        MD_L4=0;
               
        MD_R1=0;
       
        MD_R2=0;
       
        MD_R3=0;
       
        MD_R4=0;




}
void keyscan()
{
   if(D0==0)
   {
     delay(5);
         if(D0==50)
         {
          if(pwm<32)
          {
            pwm++;
                delay(100);
          }
         }
   }
         if(D1==0)
   {
     delay(50);
         if(D1==0)
         {
          if(pwm>1)
          {
            pwm--;
                delay(100);
          }
         }
   }
  if(D2==0)
   {
     delay(50);
         if(D2==0)
         {
          if(pwm<32)
          {
            pwm++;
                delay(100);
          }
         }
   }
         if(D3==0)
     {
     delay(50);
         if(D3==0)
         {
          if(pwm>1)
          {
            pwm--;
                delay(100);
          }
         }
   }
}
void main(void)
{


    TMOD =0x01;
        TH0=(65536-500)/256;
    TL0=(65536-500)%256;                       
    EA = 1;                           
    ET0=1;
        TR0=1;                  


    while(1)
    {
     
   
                if(D0==1)
                {
                 advance();
               
                }   
            else if(D1==1)
                {
                back();
       
                }
                else if(D2==1)
                {
               
                left();
               
                }
                else if(D3==1)
                {
                right();
       
                }
                else if(D0&D2==1)
                {
                 
                 void left2();
         
                }
                else if(D0&D3==1)
                {


                void right2();
                 
                }
                else if(D1&D2==1)
                {
                back();
                left();
                }
                else if(D1&D3==1)
                {
                 back();
                 right();
                }
                        else
                {
                stop();
                }  
               
        }
   
}
   
void int0() interrupt 1
{
    num ++;
        duty ++;                           
        x++;
        x1++;
        x2++;
        x3++;
    if(num <=50)
    {
      
           RENA=1;
           RENB=1;
    }
    else  
    {
           RENA=0;
           RENB=0;
    }                                                                                                                                                                                  


    if(num >=52)          
    {
       num = 0;


    }
            if(x3 <= 100)
    {
      
           LENA=1;
           LENB=1;
    }
    else  
    {
       LENA=0;
           LENB=0;
    }                                                                                                                                                                                  


    if(x3 >= 100)          
    {
       x3 = 0;


    }
if(D0&D2==1)
{         
    if(duty<=60)
        {
           RENA=1;
           RENB=1;
       
        }
        else
        {
           RENA=0;
           RENB=0;
       
        }  
   if(duty >= 65)
    {
       duty = 0;
    }
          if(x<=20)
        {
           LENA=1;
           LENB=1;
        }
        else
        {
           LENA=0;
           LENB=0;
        }  
   if(x >= 30)
    {
       x = 0;
    }
         }
          if(D0&D3==1)
{         
    if(x1<=60)
        {
           LENA=1;
           LENB=1;
        }
        else
        {
           LENA=0;
           LENB=0;
        }  
   if(x1 >= 100)
    {
       x1 = 0;
    }
   if(x2<=20)
        {          
           RENA=1;
           RENB=1;
       
        }
        else
        {
           RENA=0;
           RENB=0;
       
        }  
   if(x2>= 100)
    {
       x2 = 0;
    }
         }        
}


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:79544 发表于 2016-7-8 17:14 | 只看该作者
整的这么复杂啊。
回复

使用道具 举报

板凳
ID:129080 发表于 2016-7-10 08:26 | 只看该作者
谢谢你们
回复

使用道具 举报

地板
ID:129080 发表于 2016-7-10 14:43 | 只看该作者
腾飞的龙 发表于 2016-7-8 17:14
整的这么复杂啊。

要不你来个简单的我看一下
回复

使用道具 举报

5#
ID:129080 发表于 2016-7-10 14:44 | 只看该作者
腾飞的龙 发表于 2016-7-8 17:14
整的这么复杂啊。

求高手,
回复

使用道具 举报

6#
ID:79544 发表于 2016-7-11 19:19 | 只看该作者
4键无线遥控小车程序
  1. /**********************************************
  2.         功能:4键无线遥控小车程序
  3.         单片机:STC12C5A60S2
  4.         晶振  :11.0592M
  5.         注释 : 遥控器就是普通的4键315M遥控器加接收模块。
  6.                         电机驱动用LM298或者LM293D,驱动板的电机使能端接5v。
  7. ********************************************/

  8. #include <reg52.h>
  9. #include <intrins.h>
  10. #define uint unsigned int
  11. #define uchar unsigned char

  12. #define A   P3_4 //遥控按键A  
  13. #define BB  P3_5 //遥控按键B   
  14. #define C   P3_6 //遥控按键C     
  15. #define D   P3_7 //遥控按键D  
  16. sbit in1=P1^0; //小车端口
  17. sbit in2=P1^1; //小车端口
  18. sbit in3=P1^2; //小车端口
  19. sbit in4=P1^3; //小车端口
  20. sbit P3_4=P3^4;//遥控按键A
  21. sbit P3_5=P3^5;//遥控按键B
  22. sbit P3_6=P3^6;//遥控按键C
  23. sbit P3_7=P3^7;//遥控按键D
  24. sbit xj_l=P2^0;//循迹或避障左传感器
  25. sbit xj_r=P2^1;//循迹或避障右传感器
  26. void delay10ms(uint z)   
  27. {
  28.         uint a,b;
  29.     for(a=z;a>0;a--)
  30.       for(b=425;b>0;b--);
  31. }
  32. void qianjin()
  33. {
  34.         in1 = 0 ;
  35.     in2 = 1 ;
  36.     in3 = 0;
  37.     in4 = 1;
  38.         delay10ms(100);
  39. }
  40. void houtui()
  41. {
  42.         in1 = 1 ;
  43.     in2 = 0 ;
  44.     in3 = 1;
  45.     in4 = 0;
  46.         delay10ms(100);
  47. }
  48. void zuozhuan()
  49. {
  50.         in1 = 0 ;
  51.     in2 = 1 ;
  52.     in3 = 1;
  53.     in4 = 0;
  54.         delay10ms(100);
  55. }
  56. void youzhuan()
  57. {
  58.         in1 = 1 ;
  59.     in2 = 0 ;
  60.     in3 = 0;
  61.     in4 = 1;
  62.         delay10ms(100);
  63. }
  64. //********************************************************

  65. //********************************************************
  66. void main()
  67. {
  68.     while(1)               
  69.     {
  70.                
  71.         //循迹或避障功能,循迹的时候把传感器朝下安装
  72.         //避障的时候把传感器安装在车的前面朝前安装
  73.         if(xj_l==1&&xj_r==1)
  74.                 qianjin();
  75.         if(xj_l==0&&xj_r==1)
  76.                 youzhuan();
  77.         if(xj_l==1&&xj_r==0)
  78.                 zuozhuan();
  79.         if(xj_l==0&&xj_r==0)
  80.                 houtui();
  81.                 delay10ms(1500);
  82.         //无线遥控功能
  83.         /*        in1 = 0;
  84.                 in2 = 0 ;
  85.                 in3 = 0 ;
  86.                 in4 = 0;                     
  87.         if(A)  //前进
  88.         {                              
  89.             in1 = 0 ;
  90.             in2 = 1 ;
  91.             in3 = 0;
  92.             in4 = 1;
  93.                         delay10ms(100);
  94.         }
  95.         if(BB) //后退
  96.         {
  97.            in1 = 1;
  98.            in2 = 0 ;
  99.            in3 = 1 ;
  100.            in4 = 0;
  101.                         delay10ms(100);
  102.         }

  103.        if(C) //左转
  104.        {
  105.            in1 = 0;
  106.            in2 = 1 ;
  107.            in3 = 1 ;
  108.            in4 = 0;
  109.                 delay10ms(100);
  110.        }
  111.        if(D) //右转
  112.        {
  113.                in1 = 1 ;
  114.                in2 = 0 ;
  115.                in3 = 0 ;
  116.                in4 = 1;
  117.                         delay10ms(100);                     
  118.        }*/
  119.         }
  120. }
复制代码
回复

使用道具 举报

7#
ID:129080 发表于 2016-7-12 09:41 | 只看该作者
腾飞的龙 发表于 2016-7-11 19:19
4键无线遥控小车程序

谢谢大神,还有我现在一个寻黑线,就是寻迹的程序总是搞不出来帮我看看,有四个寻迹红外,中间有两个。
我写的程序是这样的,大神帮我改一改试一下,多谢大神#include<AT89X52.H>                            //reg52.h
#define uchar unsigned char
#define uint unsigned int
sbit QL1 =  P1^0;
sbit QL2 =  P1^1; // 前面左边 前进(正转)
sbit HL1 =        P1^2; // 前面左边 后退(反转)
sbit HL2 =  P1^3;
sbit QR1 =  P1^4;
sbit QR2 =  P1^5;
sbit HR1 =        P1^6;  
sbit HR2 =  P1^7;

sbit EN1 =        P2^0;   // 高电平使能
sbit EN2 =  P2^1;        // 高电平使能
sbit EN3 =        P2^2;   // 高电平使能
sbit EN4 =  P2^3;        // 高电平使能
                  
#define Left_go      {QL1=1,QL2=0,HL1=1,HL2=0;}        //左边电机向前走
#define Left_back    {QL1=0,QL2=1,HL1=0,HL2=1;}        //左边电机向后走
#define Left_Stop    {QL1=1,QL2=1,HL1=1,HL2=1;}          //左边电机停转                     
#define Right_go     {QR1=1,QR2=0,HR1=1,HR2=0;}        //右边电机向前走
#define Right_back   {QR1=0,QR2=1,HR1=0,HR2=1;}        //右边电机向后走
#define Right_Stop   {QR1=1,QR2=1,HR1=1,HR2=1;}          //右边电机停转

#define XL    P2_3         // 左传感器
#define XML   P2_4         // 中左传感器      
#define XMR   P2_5         // 中右传感器      
#define XR    P2_6         // 右传感器
                                                 
#define Left_pwm1          P2_0         //PWM信号端
#define Left_pwm2          P2_1         //PWM信号端
#define Right_pwm1          P2_2          //PWM信号端
#define Right_pwm2          P2_3          //PWM信号端

uchar pwmleft  =0;//变量定义
uchar pushleft1 =0;// 左电机1占空比N/20
uchar pushleft2 =0;// 左电机2占空比N/20
uchar pwmright =0;
uchar pushright1=0;// 右电机1占空比N/20
uchar pushright2=0;// 右电机2占空比N/20
bit Right_stop=1;

bit Left_stop =1;

uint  time=0;


//延时函数       
   void delay(unsigned int k)
{   
     unsigned int x,y;
         for(x=0;x<k;x++)
           for(y=0;y<2000;y++);
}
   
   
//go
     void  run(void)
{
     pushleft1=7;         //速度调节变量 0-20,0最小,20最大
         pushleft2=7;
         pushright1=7;
         pushright2=7;
         Left_go ;   //左电机往前走
         Right_go ;  //右电机往前走
}



//left
     void  leftrun(void)
{         
     pushleft1=7;
         pushleft2 =7;
         pushright1=7;
         pushright2=7;
         Right_go ;  //右电机往前走
     Left_Stop ;  //左电机停止
}

//right
     void  rightrun(void)
{
         pushleft1=7;
         pushleft2=7;
         pushright1=7;
         pushright2=7;
     Left_go;   //左电机往前走
         Right_Stop;  //右电机往前走       
}


                       

//                    左电机调速                                       
//调节push_val_left的值改变电机转速,占空比           
void pwm_out_left(void)
{  
   if(Left_stop&&Left_stop)
   {
    if(pwmleft<=pushleft1&&pwmleft<=pushleft2)
               {
                     Left_pwm1=1;
                         Left_pwm2=1;

                   }
        else
               {
                 Left_pwm1=0;
                         Left_pwm2=0;

                   }
        if(pwmleft>=20)
               pwmleft=0;
   }
   else   
          {
           Left_pwm1=0;
                   Left_pwm2=0;

                  }
}

//    右电机调速         
   void pwm_out_right(void)
{
  if(Right_stop)
   {
    if(pwmright<=pushright1&&pwmright<=pushright2)
              {
               Right_pwm1=1;
                   Right_pwm2=1;
                   }
        else
              {
                   Right_pwm1=0;
                   Right_pwm2=0;
                  }
        if(pwmright>=20)
               pwmright=0;
   }
   else   
          {
           Right_pwm1=0;
                   Right_pwm2=0;

              }
}
      




void main(void)
{       

       
    P1=0X00;
        delay(100);
        run();
       
        TMOD=0X01;
    TH0= 0XFc;                  //1ms定时
    TL0= 0X18;
    TR0= 1;
    ET0= 1;
        EA = 1;                           //开总中断

        while(1)       
         {
              //有信号为0  没有信号为1
       if(XL==0&&XR==0&&XML==0&&XMR==0)
              run();   
                  else
                   {                          
                        if(XL==1&&XR==0)          //左边检测到黑线
                                 {
                                         leftrun();                  
                                }
                         if(XR==1&&XL==0)      //右边检测到黑线
                                     {          
                                        rightrun();                  
                                      }
                        }         
         }
}



//TIMER0中断服务子函数产生PWM信号
        void timer0()interrupt 1   using 2
{
     TH0=0XFc;          //1Ms定时
         TL0=0X18;
         time++;
         pwmleft++;
         pwmright++;
         pwm_out_left();
         pwm_out_right();
}        C:\Documents and Settings\Administrator\桌面
回复

使用道具 举报

8#
ID:312000 发表于 2018-4-19 21:00 | 只看该作者
您这遥控是用的蓝牙吗
回复

使用道具 举报

9#
ID:46065 发表于 2018-4-19 21:24 | 只看该作者
单片新手 发表于 2018-4-19 21:00
您这遥控是用的蓝牙吗

4键遥控就可以,某报上10元以内
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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