|
樓主 |
發表於 2-9-2016 23:05:27
|
顯示全部樓層
RE: 再請教!!!
#include <reg51.h>
#define uchar unsigned char
//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; //接收到的數據
//int Num; //步進數
/*********************************時間控制**********************************/
/*********************************延時控制**********************************/
void delay(unsigned int count) /*定義延遲函數*/
{
unsigned int m,n;
for(m=0;m<count;m++)
for(n=0;n<9;n++);
}
/*********************************步數控制**********************************/
void Move(void)
{
PUL=1;
delay(5);
PUL=0;
delay(5);
}
void Forward (void) //正轉
{
int i;
DIR=0;
for(i=0;i<102;i++) //
Move();
}
void Backward (void) //倒轉
{
int i;
DIR=1;
for(i=0;i<100;i++) //
Move();
}
/******************************主程序**************************************/
void main(void)
{
P1=0x00; //端口初始化
P0=0x00; //端口初始化
P2=0xff; //置輸入狀態
while(1)
{
dat=(P2&0x0f); //P2轉為0000 1111
switch(dat) //先按A 顯示1 燈亮 通道 開 0000 1000
{
case 0x01: //接收 0000 0001
P0=tab[1]; //數碼顯示
P1=0xfe; //1111 1110 (7劃亮)
P24=0; //燈亮
Forward(); //向前
while (P2&0x01) //維持
{
}
break;
case 0x02: //接收 0000 0010
P0=tab[2]; //數碼顯示
P1=0xfe; //1111 1110 (7劃亮)
P24=0; //燈亮
Backward(); //回後
while (P2&0x02)
{
}
break;
default:
}
}
}
********************************************************************************************************
再請教!!!
如上述兩片2274 L4各自在一8051上,其中8051 P2收到0001(A鍵)或0010(B鍵)後,其負責電機動作。
另一8051 P2 收到0100(C鍵)或1000(D鍵)後,其負責電機動作。
但由於各自電機只想90度來回動作,但按完(C或D鍵)時,如錯按(A鍵)便會再向前90度,錯誤了。
程序代碼應該如何修改來避免呢?
請教啊!!!
|
|