找回密碼
 立即註冊
搜索
樓主: VR2YIN

再請教!!!

[複製鏈接]
發表於 3-3-2016 01:41:22 | 顯示全部樓層
philip 發表於 26-2-2016 20:57
補充gif動畫。

中無論壇真是好失敗,連上傳gif動畫都不可以,這個問題大概1年多前已反映過時至今天還 ...


Philip 你好,

多謝閣下對本討論區的支持,及對閣下在使用上感覺不便,深感抱歉!

由於本討論區所使用的軟件 Discuz! 為第三方開發,部分功能亦涉及第三方的雲端服務,這方面實在是超出我方網站的可控制範圍。

閣下提出本網站不能上載 GIF 格式圖片,是因為 Discuz! 使用 PHP 中的 GD 程式庫,在圖片右下方自動加上本會水印,但在 Discuz! 使用 GD 甚至 ImageMarick,會令動態 GIF 失去動態﹝GD﹞ 或整張圖變成黑色﹝ImageMarick﹞ ,因此 GIF 已被管理員禁用。

目前的可行方式是以外部連接方式展示 GIF 圖片。

本會網站,乃由個別人員抽出寶貴私人時間去進行維護,是無償為本會工作,就以上問題,相信仍有改善空間,如有寶貴意見或疑難,歡迎在 「疑難排解」 版中留言,以便相關人員在可行的情況下盡快跟進。

透過溝通,大家可多些了解,在背後默默耕耘的人員的工作,我們會盡力去服務大家,請包容我們不足之處!






 樓主| 發表於 19-6-2016 15:22:33 | 顯示全部樓層

RE: 再請教!!!

謝謝!各位幫忙!
 樓主| 發表於 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度,錯誤了。
程序代碼應該如何修改來避免呢?
請教啊!!!
 樓主| 發表於 4-9-2016 15:50:02 | 顯示全部樓層

RE: 再請教!!!

請救幫忙啊!!!
發表於 5-9-2016 09:29:24 | 顯示全部樓層

RE: 再請教!!!

VR2YIN 發表於 2-9-2016 23:05
#include
#define uchar unsigned char


你問題是甲單片機接受 A 和 B,乙單片機接受 C 和 D 是這樣嗎?是的話可以加 1 個判斷條件,判斷是否它的菜,是就繼續完成動作,不是就跳走。
 樓主| 發表於 6-9-2016 21:07:00 | 顯示全部樓層

RE: 再請教!!!

多謝指導啊!!!!!
發表於 12-9-2016 13:40:13 | 顯示全部樓層

RE: 再請教!!!

VR2YIN 發表於 6-9-2016 21:07
多謝指導啊!!!!!

後來再看你的問題,建議你再看看程序和檢查是否有干擾,switch case本身已有篩選功能,前面給你的方法屬於補鑊方法。寫程序要盡量做到優化節省資源,如有問題可以壓縮程序放上來讓其他高手幫忙。
 樓主| 發表於 14-9-2016 23:10:11 | 顯示全部樓層

RE: 再請教!!!

/*********************************包含頭文件********************************/
#include <reg51.h>
#define uchar unsigned char

                                        //PT2262發出訊號,PT2274M4接收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;                        //接收到的數據
char up;                        //起動
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(6);
        PUL=0;
        delay(6);
}       
void Forward (void)                        //正轉
{
        int i;
        DIR=0;
        for(i=0;i<820;i++)        //
        Move();
        Num=1;                       
}
void Backward (void)                //倒轉
{
        int i;
        DIR=1;
        for(i=0;i<816;i++)        //
        Move();
        Num=0;
}
/******************************主程序**************************************/
void main(void)
{
        P1=0x00;                //端口初始化
          P0=0x00;                //端口初始化
        P2=0xff;                //置輸入狀態
        Num=0;
while(1)
        {       
        dat=(P2&0x0f);  // 0000 1111 = 0000 0100
        if (dat==0x04)
                if (Num==0)
                {
                        Forward();
                        while(P2&0x04)
                        {
                          }
                }
        if (dat==0x08)       
                if (Num==1)
                {       
                        Backward();
                        while(P2&0x08)
                        {
                        }
                }
        }
}
 樓主| 發表於 14-9-2016 23:13:36 | 顯示全部樓層

RE: 再請教!!!

用了這辦法!!!

另外想再請教利用 TIP122 增加 8051 輸出驅動電流至步進馬達驅動器上,應如何接法較好呢?

感謝指導啊!!!

 樓主| 發表於 30-9-2016 18:35:40 來自手機 | 顯示全部樓層


您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

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

GMT+8, 24-4-2024 05:41 , Processed in 0.033337 second(s), 15 queries , Gzip On.

本討論區基於 Discuz! X3.5

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


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

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