再請教!!!
#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; //方向
sbit EN=P3^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=1;
for(i=0;i<100;i++) //
Move();
}
void Backward (void)
{
int i;
DIR=0;
for(i=0;i<98;i++) //
Move();
}
/******************************主程序**************************************/
void main(void)
{
P1=0x00; //端口初始化
P0=0x00; //端口初始化
P2=0xff; //置輸入狀態
while(1)
{
dat=(P2&0x0f); //00001111
if(dat==0x08) //先按A 顯示1 燈亮 通道 開 0000 1000
{
P0=tab; //數碼顯示
P1=0xfe; //1111 1110
P24=0; //燈亮
Forward();
while (P2&0x08)
{
}
}
if(dat==0x04) //再按B建 顯示2 燈滅通道 關 0000 0100
{
P0=tab; //數碼顯示
P1=0xfd; //1111 1101
P24=1; //關燈
Backward();
while (P2&0x04)
{
}
}
if(dat==0x02) //按C鍵 顯示3 燈亮 通道 開 0000 0010
{
P0=tab; //數碼顯示
P1=0xfb; //1111 1011
P25=0; //燈亮
Forward();
delay(1000);
Backward();
while(P2&0x02);
{
}
}
if(dat==0x01) //再按D鍵 顯示4 通道 關 0000 0001
{
P0=tab;
P1=0xf7; //1111 0111
P25=1; //關燈
Forward();
delay(5000);
delay(5000);
delay(5000);
delay(5000);
Backward();
while(P2&0x01);
{
}
}
}
} 在上述程序中,如按3或4鍵,做完往返動作後,想再按鍵再做動作,應該如何改寫呢???
因PT2272 L4是鎖存訊號,試過改用PT2272 M4非鎖存,一,二鍵又再按就做動作,這樣角度又錯了!!!
求教啊!!! 你好, 謝謝你的難題.
你用 PT2272 L4(鎖存訊號), 如按下3鍵時,摩打動作做完時,程式是停在 while(P2&0x02); { } ,一定要按其他的鍵 才跳得走, 否則再按下3鍵, 摩打是無動作的.
改用PT2272 M4非鎖存, 按鍵後, 摩打動作, 而程式最終是在 while (1)不斷polling . 正想辦法解決中!!!^.^” 有難題也登上,讓大家想辦法 ^_^ 朋友,你之前相關的帖子有粗略看過因太忙所以沒進一步研究,覺得這類控制目標,可能採用switch case方式去編寫會更簡單及效率高, 本帖最後由 philip 於 25-2-2016 13:50 編輯
一、你程序中先define後include,這就像佳餚未上檯先起筷,夾空氣呀?這叫本末倒置。應include行頭define跟後。
二、程序中如太多判斷小段子,建議用switch比較有效。當然不一定要用switch,也可以用else if,條條大路通羅馬,
三、主程序中應盡量避免多於2個while()。
廢話完
你問按c鍵後做完正向轉動然後想再按c鍵沒反應,按c鍵做正向轉動是一直在轉動嗎?
建議在完成動作後跳回stand-by,至於2272鎖存與不鎖存沒所謂,在stand-by中做手腳就可以。
你可以嘗試邀請左先生協助你。 本帖最後由 philip 於 26-2-2016 13:16 編輯
朋友,多些使用debug功能,你會發覺如圖片中用switch的優點,壓縮檔rar是gif檔,因論壇不能上傳gif file,請自行解壓。
philip 發表於 26-2-2016 12:19
朋友,多些使用debug功能,你會發覺如圖片中用switch的優點,壓縮檔rar是gif檔,因論壇不能上傳gif file, ...
http://ww2.sinaimg.cn/mw1024/8071761cgw1f1d10mkr72g20ci08qzlv.gif
補充gif動畫。
中無論壇真是好失敗,連上傳gif動畫都不可以,這個問題大概1年多前已反映過時至今天還是沒解決。要放到別的地方再貼連接過來,真是費時失事多此一舉。
本帖最後由 VR2ZOC 於 27-2-2016 07:58 編輯
philip 發表於 26-2-2016 20:57
補充gif動畫。
中無論壇真是好失敗,連上傳gif動畫都不可以,這個問題大概1年多前已反映過時至今天還 ...
完全同意"philip"兄意見,而且仲連表情圖案都無法放上超過好耐一段時間了。
頁:
[1]
2