VR2YIN 發表於 27-9-2015 21:21:08

求教程序代碼

中秋節快樂!!!

以下程序代碼,想按A鍵,步進電機行200步停止,請教應該怎樣寫啊???

想及試了很多,未能成功!

請導師、師兄們教教啊!!!

感激啊~~~~ ! ! !

※===========================================================================※


/*********************************包含頭文件********************************/
#define uchar unsigned char
#include <reg51.h>
                                        //PT2262發出訊號,PT2274L4接收D0-D3
                                        //D0-D3連接8051 P2.0-P2.3
                                        //收到P2.0 -P2.3的4位組合 P2.4或P2.5輸出=0 / 1       
                                        //P0 控制7劃管出字,P1控制位選,出0亮

sbit P24=P2^4;                //8051 輸出
sbit P25=P2^5;                //8051 輸出
sbit PUL=P2^6;                //頻率
sbit DIR=P2^7;                //方向

/*******************************共陽LED段碼表*******************************/
unsigned char code tab[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};

/*********************************端口定義**********************************/
char dat;                        //接收到的數據
                       
/*********************************時間控制**********************************/

/*********************************延時控制**********************************/
void delay(unsigned int count)      /*定義延遲函數*/
{
        unsigned int m,n;
            for(m=0;m<count;m++)
                for(n=0;n<9;n++);
}
/*********************************步數控制**********************************/                           
void Move(void)
{       
        DIR=0;
        PUL=1;
        delay(3);
        PUL=0;
        delay(3);
}       

void main(void)
{
        P1=0x00;                                                //端口初始化
        P0=0x00;                                                //端口初始化
while(1)
{
        P2=0xff;                                                        //置輸入狀態
        dat=(P2&0x0f);                                        //00001111       
        if(dat==0x08)                                        //先按A 顯示1 燈亮 通道 開        0000 1000
                {
                int i;
                P0=tab;                                        //數碼顯示
                P1=0xfe;                                                //1111 1110
                P24=0;                                                 //燈亮
                        for(i=0;i<200;i++)                        //-----------------------------------------------------!!!! 想行200次就停止,但不成功 !!!!                               
                        Move();                       
                   }

           if(dat==0x04)                                        //再按B建 顯示2 燈滅通道 關       0000 0100
                {
                P0=tab;                                        //數碼顯示
                P1=0xfd;                                         //1111 1101
                P24=1;                                                //關燈
                }               
        if(dat==0x02)                                        //按C鍵 顯示3 燈亮 通道 開       0000 0010
                {
                P0=tab;                                        //數碼顯示
                P1=0xfb;                                                //1111 1011
                P25=0;                                                //燈亮
                }
        if(dat==0x01)                                        //再按D鍵 顯示4 通道 關             0000 0001               
                {       
                P0=tab;
                P1=0xf7;                                        //1111 0111
                P25=1;                                                //關燈
                }
}
}


謝謝

中秋節快樂!!!{:soso_e149:}

VR2XPO 發表於 27-9-2015 22:13:56

Hi, how to connect the 51 chip to stepper motor? detailly. The part of the move instruction has a problem(I think ).

VR2XPO 發表於 27-9-2015 22:15:41

本帖最後由 VR2XPO 於 27-9-2015 22:24 編輯

Is the stepper motor 4 phase?

If it is 4 phase stepper motor,
turn ON phase 1 , delay and other 3 phase is OFF.
second turn ON phase 2 and delay, Other phase is OFF.
.....
last turn ON phase 4 and delay , other phase is OFF.
And then the rotate cycle is complete.

VR2YIN 發表於 28-9-2015 14:34:51

用步進電機驅動器,只要比密衝,方向就行,我用pt2274L4接收,希望做4健按下有唔同動作,試緊第一個鍵,只想做200步停止,但用while(1)迴圈,就不斷重覆!!!請教應怎樣改寫?感謝幫忙及教導!!!

VR2XPO 發表於 28-9-2015 18:51:34

本帖最後由 VR2XPO 於 28-9-2015 18:57 編輯

VR2YIN 發表於 28-9-2015 14:34
用步進電機驅動器,只要比密衝,方向就行,我用pt2274L4接收,希望做4健按下有唔同動作,試緊第一個鍵,只 ...

while(1)
{
      P2=0xff;                                                      //置輸入狀態
      dat=(P2&0x0f);                                        //00001111      
      if(dat==0x08)   


//p2=0xff;                           set p2=0x00;(I think !)
//dat =(p2 & 0x0f);      the dat value is always 0x0f , and can not match you if instruction condition.   



And a other topic, Could you tell me what C compiler using?

VR2YIN 發表於 28-9-2015 19:41:13

是4相步進電機,用TB6560驅動板,給一個頻率脈衝,就可以行一步,由sbit PUL=P2^6; 輸出脈衝。P20-P23為接收PT2274L4 的D0-D3信號。
if 按A鍵 if(dat==0x08)就出7劃管出數字P0=tab;P1=0xfe;負責   

VR2YIN 發表於 28-9-2015 19:50:23


P24及P25負責出繼電器,P26及P27就做脈衝輸出及方向1或0輸出。
想控制P26輸出脈衝200次,但不停迴圈!
因While(1)
而PT2274L4 的D0-D3信號接P20-P23的訊號是鎖存的!
如不做迴圈,按其他鍵就響應不到!!!

再一次感謝XPO的指點及幫助!!!

VR2YIN 發表於 28-9-2015 20:02:21

步進電機測試

VR2YIN 發表於 28-9-2015 20:02:50

https://www.youtube.com/watch?v=-X2Nl_mPkc4

VR2YIN 發表於 28-9-2015 20:04:24

只想做到按不同鍵,步進電機做不同動作後停下。
頁: [1] 2
查看完整版本: 求教程序代碼