求教程序代碼
中秋節快樂!!!以下程序代碼,想按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:} 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: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.
用步進電機驅動器,只要比密衝,方向就行,我用pt2274L4接收,希望做4健按下有唔同動作,試緊第一個鍵,只想做200步停止,但用while(1)迴圈,就不斷重覆!!!請教應怎樣改寫?感謝幫忙及教導!!! 本帖最後由 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? 是4相步進電機,用TB6560驅動板,給一個頻率脈衝,就可以行一步,由sbit PUL=P2^6; 輸出脈衝。P20-P23為接收PT2274L4 的D0-D3信號。
if 按A鍵 if(dat==0x08)就出7劃管出數字P0=tab;P1=0xfe;負責
P24及P25負責出繼電器,P26及P27就做脈衝輸出及方向1或0輸出。
想控制P26輸出脈衝200次,但不停迴圈!
因While(1)
而PT2274L4 的D0-D3信號接P20-P23的訊號是鎖存的!
如不做迴圈,按其他鍵就響應不到!!!
再一次感謝XPO的指點及幫助!!! 步進電機測試 https://www.youtube.com/watch?v=-X2Nl_mPkc4 只想做到按不同鍵,步進電機做不同動作後停下。
頁:
[1]
2