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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求大神幫我看看我的52單片機控制四相五線步進電機的啟停程序為什么不行。球球

[復制鏈接]
跳轉到指定樓層
樓主
ID:268462 發表于 2017-12-28 17:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
P3口控制的矩陣鍵盤,P1口接的電機驅動模塊,加減速用的中斷,正反轉也可以,問題是我的啟動停止不會寫。。。。
#include <reg52.h>
sbit A1=P1^0; //定義步進電機連接端口
sbit B1=P1^1;
sbit C1=P1^2;
sbit D1=P1^3;
sbit K1=P3^0;
sbit K2=P3^1;
sbit K3=P3^2;
sbit K4=P3^3;

#define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通電,其他相斷電
#define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通電,其他相斷電
#define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通電,其他相斷電
#define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通電,其他相斷電
#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通電,其他相斷電
#define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通電,其他相斷電
#define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通電,其他相斷電
#define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通電,其他相斷電
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部斷電

unsigned char Speed=10;
unsigned char run=0;

bit Flag;
/*------------------------------------------------
uS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
while(--t);
}
/*------------------------------------------------
mS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M
------------------------------------------------*/
void DelayMs(unsigned char t)
{
     
while(t--)
{
     //大致延時1mS
     DelayUs2x(245);
     DelayUs2x(245);
}
}
/*------------------------------------------------
                 外部中斷程序
------------------------------------------------*/
void ISR_K3(void) interrupt 0            //減速
{

        if(K3==0)
        {
           DelayMs(10);//去抖動程序,防止按鍵抖動造成錯誤
           if(K3==0)
           while(K3==0);//等待按鍵釋放
                {
             Speed++;   
            }
        }
}
void ISR_K4(void) interrupt 2          //加速
{
        if(K4==0)
        {
           DelayMs(10) ;
           if(K4==0)
           while(K4==0);
                {
                           Speed--;
                }
        }
}
/*-------------------程序調用--------------------------*/
void zhengfan()
{
        if(K2==0)
        DelayMs(10);
        if(K2==0)
        Flag=!Flag;
        while(!K2);
}
void run_stop()                                 //run%2==1 啟動   run%2==0 停止
{
        if(K1==0)
        DelayMs(5);
        if(K1==0)
        while(K1==0);
                run++;
       
}
/*------------------------------------------------
                    主函數
------------------------------------------------*/
main()
{
unsigned int i=512;//旋轉一周時間

EA=1;          //全局中斷開
EX0=1;
EX1=1;         //外部中斷0,2開
IT0=1;         //1表示邊沿觸發
P3=0xcf;                // 1100         1111

while(1)
{
        run_stop();
        if(run%2==1)
        {
                                        Coil_OFF
                                        while((i--)&&(Flag))  //正向
                                        {
                                                run_stop();  
                                                zhengfan();
                                       

                                                Coil_A1      
                                                DelayMs(Speed);
                                                Coil_AB1                //遇到Coil_AB1  用{A1=1;B1=1;C1=0;D1=0;}代替
                                                DelayMs(Speed);         //改變這個參數可以調整電機轉速 ,數字越小,轉速越大,力矩越小                       
                                                Coil_B1      
                                                DelayMs(Speed);
                                                Coil_BC1
                                                DelayMs(Speed);
                                                Coil_C1      
                                                DelayMs(Speed);
                                                Coil_CD1
                                                DelayMs(Speed);
                                                Coil_D1      
                                                DelayMs(Speed);
                                                Coil_DA1
                                                DelayMs(Speed);
                                       
                                               
               
                                        }


                                        Coil_OFF
                       
                                        i=512;
                                        while((i--)&&(!Flag))//反向
                                        {
                                            run_stop();  
                                                zhengfan();


                                                Coil_A1      
                                                DelayMs(Speed);
                                                Coil_DA1                //遇到Coil_AB1  用{A1=1;B1=1;C1=0;D1=0;}代替
                                                DelayMs(Speed);         //改變這個參數可以調整電機轉速 ,
                                                                //數字越小,轉速越大,力矩越小
                                                 Coil_D1      
                                                DelayMs(Speed);
                                                Coil_CD1
                                                DelayMs(Speed);
                                                 Coil_C1      
                                                DelayMs(Speed);
                                                Coil_BC1
                                                DelayMs(Speed);
                                                 Coil_B1      
                                                DelayMs(Speed);
                                                Coil_AB1
                                                DelayMs(Speed);
                                               
                                       
                                        }


        }

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

使用道具 舉報

沙發
ID:164602 發表于 2017-12-29 09:35 | 只看該作者
啟停非常簡單啊。
只要想辦法通過按鍵,將脈沖信號停掉,電機就停了。
恢復脈沖信號,電機就轉動。
回復

使用道具 舉報

板凳
ID:78322 發表于 2017-12-29 11:20 | 只看該作者
看到這個程序我無從評價,一次循環竟然能延時85ms以上,MCU 99.9%的時間再做延時處理,代碼量有50%是延時,這樣程序走起來真累,而且按鍵肯定不會靈敏,好好找個例子學下怎么處理延時。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧洲视频一区 | jlzzjlzz国产精品久久 | 色婷婷综合网站 | 亚洲最新在线视频 | 81精品国产乱码久久久久久 | 羞羞色在线观看 | 国产精品久久久免费 | 国产精品爱久久久久久久 | 韩日一区二区 | 天天操伊人 | 国产成人精品一区二区三区 | 成年人的视频免费观看 | 欧美日韩三级视频 | 久久99蜜桃综合影院免费观看 | 国产精品久久久久久久久污网站 | 亚洲欧美激情网 | 日本不卡一区二区三区在线观看 | 97色免费视频 | 欧美日韩亚 | 国产精品视频一区二区三区四蜜臂 | xxx.在线观看 | 九色视频网站 | 人人擦人人| 国产精品成人在线播放 | 成年人黄色小视频 | 在线看91| 欧美亚洲国产一区 | 久久青青| 午夜免费福利片 | 四虎伊人 | 四虎精品在线 | 亚洲精品一 | 综合久久综合久久 | 国产一区亚洲 | 性一交一乱一透一a级 | 日本亚洲精品 | 欧美一区免费 | 亚洲精品二区 | 日韩高清中文字幕 | 日韩国产在线 | 中文字幕精品一区 |