找回密碼
 立即註冊
搜索
查看: 9855|回復: 18

求教程序代碼

[複製鏈接]
發表於 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[1];                                        //數碼顯示
                P1=0xfe;                                                //1111 1110
                P24=0;                                                 //燈亮
                        for(i=0;i<200;i++)                        //-----------------------------------------------------!!!! 想行200次就停止,但不成功 !!!!                               
                        Move();                       
                   }

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


謝謝

中秋節快樂!!!{:soso_e149:}
發表於 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 ).
發表於 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.
 樓主| 發表於 28-9-2015 14:34:51 來自手機 | 顯示全部樓層
用步進電機驅動器,只要比密衝,方向就行,我用pt2274L4接收,希望做4健按下有唔同動作,試緊第一個鍵,只想做200步停止,但用while(1)迴圈,就不斷重覆!!!請教應怎樣改寫?感謝幫忙及教導!!!
發表於 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?  
 樓主| 發表於 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[1];  P1=0xfe;負責   
 樓主| 發表於 28-9-2015 19:50:23 | 顯示全部樓層

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

再一次感謝XPO的指點及幫助!!!
 樓主| 發表於 28-9-2015 20:02:21 | 顯示全部樓層
步進電機測試
 樓主| 發表於 28-9-2015 20:02:50 | 顯示全部樓層
https://www.youtube.com/watch?v=-X2Nl_mPkc4
 樓主| 發表於 28-9-2015 20:04:24 | 顯示全部樓層
只想做到按不同鍵,步進電機做不同動作後停下。
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

手機版|小黑屋|存檔|中華業餘無線電研究會網站

GMT+8, 19-4-2024 17:09 , Processed in 0.043333 second(s), 21 queries , Gzip On.

本討論區基於 Discuz! X3.5

版權所有 © 2001-2024 中華業餘無線電研究會有限公司,保留一切權利


重要聲明:本討論區是以即時上載留言的方式運作,中華業餘無線電研究會對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,讀者及用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,讀者及用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者及用戶發現有留言出現問題,請聯絡我們。中華業餘無線電研究會有權刪除任何留言及拒絕任何人士上載留言(刪除前或不會作事先警告及通知),同時亦有不刪除留言的權利,如有任何爭議,管理員擁有最終的詮釋權。用戶切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。

快速回復 返回頂部 返回列表