標(biāo)題: 求幫助本人小白 幫忙整合兩個(gè)程序或?qū)懸粋(gè) [打印本頁(yè)]

作者: 939474643    時(shí)間: 2014-3-24 11:38
標(biāo)題: 求幫助本人小白 幫忙整合兩個(gè)程序或?qū)懸粋(gè)
控制直流電機(jī)和舵機(jī)的電機(jī)驅(qū)動(dòng)模塊是L298N
程序一
#include <reg52.h>

sbit  out = P1^0;              //舵機(jī)信號(hào)線
sbit  K1  = P1^4;
sbit  K2  = P1^5;
sbit  K3  = P1^6;

char code reserve[3]_at_ 0x3b; //保留0x3b開始的3個(gè)字節(jié)

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

us延時(shí)子函數(shù) (500us)

**********************************************************/
void delayus(unsigned char x)
{
  unsigned char i;                                                 
  while (x--)
  {
    for (i = 0; i < 58; i++)
      ;
  }
}

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

歸中子函數(shù) (0度)

**********************************************************/
void  Prog0(void)
{
   unsigned char m;

   for(m=0; m<30; m++)
   {
     out = 1;
     delayus(3);           //延時(shí)1.5ms
     out = 0;
     delayus(37);          //延時(shí)18.5ms
   }
}

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

逆時(shí)針轉(zhuǎn)動(dòng)子函數(shù)  1ms

**********************************************************/
void  Prog1(void)
{
   unsigned char m;
   
   for(m=0; m<40; m++)
   {
     out = 1;             //延時(shí)1ms
     delayus(2);
     out = 0;
     delayus(38);        //延時(shí)19ms
   }
}
/**********************************************************

順時(shí)針轉(zhuǎn)動(dòng)子函數(shù) 2ms

**********************************************************/
void  Prog2(void)
{
   unsigned char m;
   
   for(m=0; m<40; m++)
   {
     out = 1;
     delayus(4);           //延時(shí)2ms
     out = 0;
     delayus(36);          //延時(shí)18ms
   }
}
/**********************************************************

主函數(shù)

**********************************************************/
void  main(void)
{
   P1 = 0xf0;
   Prog0();               //0度位置
   
   while(1)
   {
     if(K1 == 0)
     {
       delayus(40);       //延時(shí)20ms
       if(K1 == 0)
       Prog0();           //返回0度位置
     }
     else
     if(K2 == 0)
     {
       delayus(40);       //延時(shí)20ms
       if(K2 == 0)
       Prog1();           //逆時(shí)針轉(zhuǎn)動(dòng)
     }
     else
     if(K3 == 0)
     {
       delayus(40);       //延時(shí)20ms
       if(K3 == 0)
       Prog2();           //順時(shí)針轉(zhuǎn)動(dòng)
     }
   }
}
程序二
#include<reg52.h>  
                   #define uchar unsigned char
                   #define uint unsigned int
                   sbit k1=P3^0;
                   sbit k2=P3^1;
                   sbit k3=P3^2;
                   sbit k4=P3^3;
                   sbit k5=P3^4;
                   sbit IN1=P2^0;
                   sbit IN2=P2^1;
                   sbit EN=P2^2;
                  
         

                   uchar num=0, show_num=1, gao_num=1, di_num=3, num1;
                   uchar code table[]={
                                 0xc0,0xf9,0xa4,0xb0,0x99,
                                  0x92,0x82,0xf8,0x80,0x90
                                                                };
                           void delay(uint x)                   //延時(shí)函數(shù)
                                     {        uint i,j;
                                         for(i=x;i>0;i--)
                                               for(j=110;j>0;j--);
                                                                                     }
                  void keyscan()
                     {
                        if(k1==0)             //   正轉(zhuǎn)
                           {          delay(10);
                                 if(k1==0)
                                      {
                                                IN1=0;   IN2=1;    num1=1;
                                               while(!k1);
                                                              }
                                           }
                     
                              if(k2==0)             //   反轉(zhuǎn)
                           {          delay(10);
                                 if(k2==0)
                                      {
                                                IN1=1;   IN2=0;    num1=0;
                                               while(!k2);
                                                              }
                                           }

                         if(k3==0)             //   加速
                           {          delay(10);
                                 if(k3==0)
                                      {   num++;
                                           if(num==4)
                                                 num=3;
                                                
                                               while(!k3);
                                                              }
                                           }
                     
                              if(k4==0)                //減速
                             {     delay(10);
                                      if(k4==0)
                                          {        if(num!=0)
                                                    num--;
                                                else
                                                    num=0;
                                                while(!k4);
                                                          }
                                                            }
                             
                           if(k5==0)             //   停止
                           {          delay(10);
                                 if(k5==0)
                                      {
                                                IN1=1;   IN2=1;   
                                               while(!k5);
                                                              }
                                           }
                                 
                                                     }

                   void display()
                      {   
                                P2=0xfe;                 //第一個(gè)數(shù)碼管顯示正轉(zhuǎn)(1)還是反轉(zhuǎn)(0)
                          P0=table[num] ;
                          delay(5);

                          P2=0xfd;                   //第二位數(shù)碼管顯示速度標(biāo)志
                          P0=table[show_num];
                          delay(5);

                          P2=0xfb;                  //  顯示0
                          P0=table[0];
                          delay(5);

                          P2=0xf7;                    //            顯示0
                          P0=table[0];
                          delay(5);
                                                }

            void dispose()                          //根據(jù)速度標(biāo)記進(jìn)行數(shù)據(jù)處理
                {
                     switch (num)
                       {
                          case 0:
                                show_num=1;
                                  gao_num=1;
                                   di_num=3;
                                    break;
                       
                           case 1:
                                show_num=2;
                                  gao_num=2;
                                   di_num=2;
                                    break;

                            case 2:
                                show_num=3;
                                  gao_num=3;
                                   di_num=1;
                                    break;

                            case 3:
                                show_num=4;
                                  gao_num=4;
                                   di_num=0;
                                    break;
                                          }
                 
                                                 }
            void qudong()              //控制電機(jī)程序
                 {
                      uchar x;
                       if(num1==1)          //正轉(zhuǎn)占空比調(diào)節(jié)
                         {if(di_num!=0)
                           {
                              for(x=0;x<=di_num;  x++)
                                  { IN1=0;                   //PWM低電平輸出
                                     display();            //顯示函數(shù)延時(shí)
                                         }
                                           }
                              for(x=0;x<=gao_num;x++ )
                                   {        IN1=1;
                                       display();            //PWM高電平輸出
                                                         }
                                                            }
                               
                        if(num1==0)                  //反轉(zhuǎn)占空比調(diào)節(jié)
                         {if(di_num!=0)
                           {
                              for(x=0;x<=di_num;  x++)
                                  { IN2=0;
                                     display();
                                         }
                                           }
                              for(x=0;x<=gao_num;x++ )
                                   {        IN2=1;
                                       display();
                                                         }
                                                            }               
                                            
                                                  }


                        void main ()
                          {
                                   while(1)
                                   {        EN=1;
                                       keyscan();
                                        dispose();
                                        qudong();
                                                   }
                          
                                                          }





作者: 939474643    時(shí)間: 2014-3-24 12:49
求大神幫忙啊




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1