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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2954|回復: 2
打印 上一主題 下一主題
收起左側(cè)

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

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:268462 發(fā)表于 2017-12-28 17:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
P3口控制的矩陣鍵盤,P1口接的電機驅(qū)動模塊,加減速用的中斷,正反轉(zhuǎn)也可以,問題是我的啟動停止不會寫。。。。
#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延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
while(--t);
}
/*------------------------------------------------
mS延時函數(shù),含有輸入?yún)?shù) 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--;
                }
        }
}
/*-------------------程序調(diào)用--------------------------*/
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++;
       
}
/*------------------------------------------------
                    主函數(shù)
------------------------------------------------*/
main()
{
unsigned int i=512;//旋轉(zhuǎn)一周時間

EA=1;          //全局中斷開
EX0=1;
EX1=1;         //外部中斷0,2開
IT0=1;         //1表示邊沿觸發(fā)
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);         //改變這個參數(shù)可以調(diào)整電機轉(zhuǎn)速 ,數(shù)字越小,轉(zhuǎn)速越大,力矩越小                       
                                                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);         //改變這個參數(shù)可以調(diào)整電機轉(zhuǎn)速 ,
                                                                //數(shù)字越小,轉(zhuǎn)速越大,力矩越小
                                                 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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色日本视频 | 国产精品呻吟久久av凹凸 | 正在播放一区二区 | 欧美一区二区三区的 | 国产美女福利在线观看 | 精品久久国产 | 国产特级毛片 | 狠狠狠干 | 一级a性色生活片久久毛片波多野 | 成人在线观看欧美 | 日韩视频一区在线观看 | 超级乱淫av片免费播放 | 九九久久精品 | 亚洲精品一区二区 | 国产做爰 | 日本午夜精品一区二区三区 | 日韩成人在线免费视频 | 最新超碰 | 日韩中文字幕av | 成人在线视频免费播放 | 久久久精彩视频 | av电影手机在线看 | 中文日韩字幕 | 亚洲人成网站777色婷婷 | 精品一区二区三区四区在线 | 在线黄色影院 | 精品欧美一区二区精品久久 | 国产高清在线精品一区二区三区 | 欧产日产国产精品视频 | 国产资源在线视频 | 亚洲国产成人av好男人在线观看 | 精品熟人一区二区三区四区 | 日本五月婷婷 | 黄色片网此 | 久久国产精品一区二区三区 | 亚洲久久一区 | 日韩在线免费 | 男人天堂社区 | 老司机狠狠爱 | 国产精品欧美一区二区三区不卡 | 国产精品精品视频一区二区三区 |