zhangjiusheng 发表于 2012-5-8 19:14:00

我刚接触单片机下面这个小车的电路图帮我看看吧

忙我看看无线信号接收模块怎么接单片机啊,还有程序可以用吗,我只要简单地前进后退左右转

zhangjiusheng 发表于 2012-5-8 19:14:53

程序
#define uint unsigned int
#define uchar unsigned char

void delay(uchar);
/*************位声明函数**************/
sbit in1=P0^1;//控制左边轮子
sbit in2=P0^2;
sbit in3=P0^4;//控制右边轮子
sbit in4=P0^5;
sbit ena=P0^0;//使能左边轮子
sbit enb=P0^3;//使能右边轮子

sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;

uchar pwm1,pwm2,a,b,flag=0;


/*************初始化函数**************/
void init_t0()
{
TMOD=0X01;
TH0=(65536-6000)/256;
TL0=(65536-6000)%256;
EA=1;
ET0=1;
TR0=1;
}


/********前进函数*****/
void qianjin()
{
   in1=0;
   in2=1;
   in3=0;
   in4=1;
   ena=1;
   enb=1;
   a=19;
   while(1)
   {
          if(pwm1==a)
          {
                  ena=0;
                enb=0;
          }
          if(pwm1==20)
          {
                  pwm1=0;
                ena=1;
                enb=1;
       
          }
          while(~P0)
        //                delay(5);
        //                while(~P0)
                        return;
}
   
}


/********后退函数*****/
void houtui()
{
   in1=1;
   in2=0;
   in3=1;
   in4=0;
   ena=1;
   enb=1;
   a=19;
   while(1)
   {
          if(pwm1==a)
          {
                  ena=0;
                enb=0;
          }
          if(pwm1==20)
          {
                  pwm1=0;
                ena=1;
                enb=1;
       
          }
          while(~P0)
                //        delay(5);
        //        while(~P0)
                        return;
}
   
}
/*************控制右转函数**************/
void controlright()
{
        in1=0;
    in2=1;
    in3=0;
    in4=1;
    ena=1;
    enb=1;
          while(1)
          {
                   a=19;b=0;
                  if(pwm1==a)
                  {
                                ena=0;
                  }
                  if(pwm1==20)
                  {
                                  pwm1=0;
                                ena=1;
                  }


                  if(pwm2==b)
                  {
                        enb=0;       
                  }
                  if(pwm2==20)
                       {
                                  pwm2=0;
                                enb=1;
                        }
                        while(~P0)
        //                delay(5);
        //                while(~P0)
                        return;
                }
}


/*************控制左转函数**************/
void controlleft()
{
       in1=0;
   in2=1;
   in3=0;
   in4=1;
   ena=1;
   enb=1;
          while(1)
          {
           a=0;b=19;
          if(pwm1==a)
          {
                        ena=0;
          }
          if(pwm1==20)
          {
                          pwm1=0;
                        ena=1;
          }
          if(pwm2==b)
          {
                  enb=0;       
          }
          if(pwm2==20)
               {
                          pwm2=0;
                        enb=1;
                }
                while(~P0)
                //        delay(5);
                //        while(~P0)
                        return;
        }
}



/*************主函数**************/
void main()
{
init_t0();
while(1)
{
       
                  if(key1==0)
                          {
                                  delay(5);
                                if(key1==0)
                                {
                             //        while(!key1);
                                //        delay(5);
                                //        while(!key1);
                                        flag=0;
                             }
                       }
       
                  if(key2==0)
                  {
                        delay(5);
                        if(key2==0)
                        {
                        //        while(!key2);
                        //        delay(5);
                        //        while(!key2);
                                  flag=1;
                        }
                  }
       
                  if(key3==0)
                  flag=2;
       
                  if(key4==0)
                  flag=3;
                  switch(flag)
                  {
                          case 0:qianjin();
                                break;
                        case 1:houtui();
                                break;
                        case 2:        controlright();
                                break;
                        case 3: controlleft();
                                break;
                }
        }
}


/*************定时器0中断1工作方式**************/
void timer0()interrupt 1
{
TH0=(65536-6000)/256;
TL0=(65536-6000)%256;
pwm1++;
pwm2++;
}


void delay(uchar z)
{
        uchar x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

jjj2012 发表于 2012-5-8 19:25:44

程序如上,{:titter:}但是不是我写的,哈哈

xinzhi1986 发表于 2012-5-8 19:30:08

各种毕业设计啊。。。我有现成的,哈哈,要不?卖你~

nanning2011 发表于 2012-5-8 19:33:32

这个没有用到无线传输吧!至少程序上没有用到的!!!

zhangjiusheng 发表于 2012-5-8 19:47:11

xinzhi1986 发表于 2012-5-8 19:30 static/image/common/back.gif
各种毕业设计啊。。。我有现成的,哈哈,要不?卖你~

不是毕业设计哦,我都毕业了,好吧

zhangjiusheng 发表于 2012-5-8 19:49:32

nanning2011 发表于 2012-5-8 19:33 static/image/common/back.gif
这个没有用到无线传输吧!至少程序上没有用到的!!!

不是程序上没用到的事,无线接收输出高电平可以控制单片机引脚高低电平

zhangjiusheng 发表于 2012-5-8 19:50:22

jjj2012 发表于 2012-5-8 19:25 static/image/common/back.gif
程序如上,但是不是我写的,哈哈

我也知道不是你写的,我就是搞不懂个具体的引脚接线

xinzhi1986 发表于 2012-5-8 20:05:17

别用别人的程序了,自己搭好硬件写一下很快的,就这么点功能而已~

jjj2012 发表于 2012-5-8 20:15:19

只有四个输入,四个输出,然后只要分别接在电机就可以,可以控制两个点击,一边一个刚刚好,要正传就给一个信号,要反转给相反正负电频,两边相互配合就可以了

zhangjiusheng 发表于 2012-5-8 20:30:56

xinzhi1986 发表于 2012-5-8 20:05 static/image/common/back.gif
别用别人的程序了,自己搭好硬件写一下很快的,就这么点功能而已~

能请教一下吗,我想加一个无线模块用无线信号驱动单片机输出高低电平控制直流电机,不知道怎么接也不懂程序思路

zhangjiusheng 发表于 2012-5-8 20:31:55

jjj2012 发表于 2012-5-8 20:15 static/image/common/back.gif
只有四个输入,四个输出,然后只要分别接在电机就可以,可以控制两个点击,一边一个刚刚好,要正传就给一个 ...

加上无线驱动模块单片机如何控制

bg6ixm 发表于 2012-5-8 20:37:37

你先学一些单片机的基础知识,至少了解IO口是怎么被控制的,再学着编写基础程序,比如点亮LED。
这些学完了,你贴的这个程序能看懂了,再看你的无线模块的说明,应该就知道怎么办了。

jjj2012 发表于 2012-5-8 22:41:31

单片机采集信息处理之后发到端口上,每次只要控制这样一个流程就好了

xinzhi1986 发表于 2012-5-8 23:09:38

无线另外一头放单片机吗?
这样的话两个无线相当于传输通道
自己写个简单协议,就等于按键。。。。
呃,真不知道怎么给你解释。。。
就是你装个无线可以,很多无线串口模块,直接连串口
然后另外一边的无线也连另外一边单片机串口,发控制指令过来就完了~

nongxiaoming 发表于 2012-5-8 23:11:59

没有无线传输~
页: [1]
查看完整版本: 我刚接触单片机下面这个小车的电路图帮我看看吧