久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2347|回復: 1
打印 上一主題 下一主題
收起左側

求幫助本人小白 幫忙整合兩個程序或寫一個

[復制鏈接]
跳轉到指定樓層
樓主
ID:59956 發表于 2014-3-24 11:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
控制直流電機和舵機的電機驅動模塊是L298N
程序一
#include <reg52.h>

sbit  out = P1^0;              //舵機信號線
sbit  K1  = P1^4;
sbit  K2  = P1^5;
sbit  K3  = P1^6;

char code reserve[3]_at_ 0x3b; //保留0x3b開始的3個字節

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

us延時子函數 (500us)

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

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

歸中子函數 (0度)

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

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

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

逆時針轉動子函數  1ms

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

順時針轉動子函數 2ms

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

主函數

**********************************************************/
void  main(void)
{
   P1 = 0xf0;
   Prog0();               //0度位置
   
   while(1)
   {
     if(K1 == 0)
     {
       delayus(40);       //延時20ms
       if(K1 == 0)
       Prog0();           //返回0度位置
     }
     else
     if(K2 == 0)
     {
       delayus(40);       //延時20ms
       if(K2 == 0)
       Prog1();           //逆時針轉動
     }
     else
     if(K3 == 0)
     {
       delayus(40);       //延時20ms
       if(K3 == 0)
       Prog2();           //順時針轉動
     }
   }
}
程序二
#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)                   //延時函數
                                     {        uint i,j;
                                         for(i=x;i>0;i--)
                                               for(j=110;j>0;j--);
                                                                                     }
                  void keyscan()
                     {
                        if(k1==0)             //   正轉
                           {          delay(10);
                                 if(k1==0)
                                      {
                                                IN1=0;   IN2=1;    num1=1;
                                               while(!k1);
                                                              }
                                           }
                     
                              if(k2==0)             //   反轉
                           {          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;                 //第一個數碼管顯示正轉(1)還是反轉(0)
                          P0=table[num] ;
                          delay(5);

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

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

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

            void dispose()                          //根據速度標記進行數據處理
                {
                     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()              //控制電機程序
                 {
                      uchar x;
                       if(num1==1)          //正轉占空比調節
                         {if(di_num!=0)
                           {
                              for(x=0;x<=di_num;  x++)
                                  { IN1=0;                   //PWM低電平輸出
                                     display();            //顯示函數延時
                                         }
                                           }
                              for(x=0;x<=gao_num;x++ )
                                   {        IN1=1;
                                       display();            //PWM高電平輸出
                                                         }
                                                            }
                               
                        if(num1==0)                  //反轉占空比調節
                         {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();
                                                   }
                          
                                                          }




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:59956 發表于 2014-3-24 12:49 | 只看該作者
求大神幫忙啊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品www| 国产一二区在线 | 久久久久久免费毛片精品 | 在线观看中文字幕 | 国产69久久精品成人看动漫 | 日本成人久久 | 国产精品久久99 | 亚洲精品视频免费观看 | 亚洲乱码一区二区三区在线观看 | 亚洲精品视频免费 | 日韩视频中文字幕 | 欧美aaaa视频 | 国产欧美一区二区三区久久 | 男女网站免费观看 | 91视频www.| 欧美一区二区在线观看视频 | 懂色av一区二区三区在线播放 | 国产剧情一区二区三区 | 国产免费看 | 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 国产精品久久久爽爽爽麻豆色哟哟 | 在线观看的av | 91中文视频| re久久| 亚洲高清网 | 最新日韩在线视频 | 国产专区在线 | 一区二区av | 亚洲精品国产成人 | 一区二区国产精品 | 欧美日韩在线不卡 | 国产一区二区三区在线 | 欧美电影在线观看网站 | 亚洲一区二区三区在线免费观看 | 狠狠干综合视频 | 中文字幕精 | 丝袜美腿一区二区三区动态图 | 精品1区| 国产乱码精品1区2区3区 | 久久久国产一区二区三区 | 嫩草视频免费 |