SOGO論壇
  登入   註冊   找回密碼
查看: 1153|回覆: 4
列印 上一主題 下一主題

[問題求助] 89C51 程式問題 [複製連結]

Rank: 3Rank: 3

狀態︰ 離線
跳轉到指定樓層
1
發表於 2013-5-30 17:50:56 |只看該作者 |倒序瀏覽
222.C(108):警告C206:'Clock_Delay':缺少函數原型

要怎麼改?
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

Rank: 4

數位軟體勳章

狀態︰ 離線
2
發表於 2013-5-30 20:13:50 |只看該作者
意思是 Clock_Delay( ) 沒有定義

就是您程式中有用到 Clock_Delay( ) ,但您尚未編寫 Clock_Delay( ) 的程式內容 。

教您一個 delay ( ) 的寫法

//  10uS  delay time ,石英振盪晶體 12MHz

void delay ( unsigned int value )
{
        while(value > 0)
                value --;
}

value 值: 0 ~ 65535

delay ( 50000 );      // 表示延時 50000 * 10 uS = 0.5 秒
已有 1 人評分威望 收起 理由
紅塵孤鳥 + 2 感謝您熱心幫助會員解決問題,論壇需要您的.

總評分: 威望 + 2   查看全部評分

Rank: 3Rank: 3

狀態︰ 離線
3
發表於 2013-5-30 22:43:12 |只看該作者
#include "reg51.h"       
#define COLS 16
#define ROWS 2
char ScanLine=0;
char i=0;
char j;
char ucDelay = 0x00;
sbit P1_4=0x94;
sbit P1_5=0x95;

const unsigned char pattern[COLS][ROWS]=
      {{0xdf,0xff},{0xdf,0xdf},       
                         {0xdf,0xef},{0xdd,0xf7},       
                         {0xd3,0xf9},{0x1f,0xfe},       
                         {0xdf,0xff},{0xc0,0xff},
                         {0xdf,0xff},{0x1f,0xe0},
                         {0xd7,0xdf},{0xdb,0xdf},
                         {0xdd,0xdf},{0xcd,0xdf},
                        {0xdf,0xc3},{0xff,0xff}};
                                               
                       
main()
{        
  IE=0x82;
  TMOD=0x01;
  TH0=(65536-100)/256;
  TL0=(65536-100)%256;
  TR0=1;  
  P1_4=0;
  P1_5=0;
  while(1)
        {
                Clock_Delay();   /////此有問題 要怎追加功能?       
                P1=ScanLine;
       
                P2=pattern[j++];
                P1_4=1;                        /* latch pulse */
                P1_4=0;
                P2 = 0xff;
                //
                P2=pattern[i++][j];
                P1_5=1;                        /* latch pulse */
                P1_5=0;
                P2 = 0xff;
                //
                ucDelay = 1;
                while(ucDelay!=0x00);
                //
                P1=0xff;
                //
                j = 0;
                ScanLine++;
               
                if(ScanLine==COLS)
                {
                                ScanLine=0;
                                i=0;
                }
               
        }
}               
/* main */

void T0_int(void) interrupt 1        /* matrix led scan : T0=2ms */
{
          TH0=(65536-1000)/256;
          TL0=(65536-1000)%256;               
                //
                if(ucDelay != 0x00)
                {
                        ucDelay --;
                }
}        

Rank: 2

狀態︰ 離線
4
發表於 2013-5-30 23:10:22 |只看該作者
本帖最後由 qlfabm2001 於 2013-5-30 23:15 編輯

//宣告到main上面
void Clock_Delay(unsigned int value); // Clock_Delay函數原型

//請參考if8051大大
void Clock_Delay(unsigned int value)
{
       while(value > 0)
                value --;
}

//call function 方法
main()
{
....
    Clock_Delay(0~65535);
.....
}

在不會去翻C語言  函數的章節
已有 1 人評分威望 收起 理由
紅塵孤鳥 + 2 感謝您熱心幫助會員解決問題,論壇需要您的.

總評分: 威望 + 2   查看全部評分

Rank: 4

數位軟體勳章

狀態︰ 離線
5
發表於 2013-5-31 06:46:10 |只看該作者
#include "reg51.h"        

將 header file   "reg51.h"   改成   <at89x52.h>   就不需要再寫

sbit P1_4=0x94;
sbit P1_5=0x95;

在程式中就可以直接引用   P1_4   和   P1_5   了


=========================================


void main ( void )                     // 主程式進入點
{
        IE=0x82;                             // 致能 T0 中斷
        TMOD=0x01;                     // 設定 T0 為  Mode 1    16 bit
        TH0=(65536-2000)/256;    // 2000uS   2mS  中斷一次
        TL0=(65536-2000)%256;   // 設定 T0 初始值為 2000uS
        TR0=1;                             // 啟動 T0 開始計時
        while(1)                             // 無窮迴圈,等待 T0 中斷
        {
                 Clock_Delay();        // 此行拿掉不用


==========================================


void T0_int(void) interrupt 1        /* matrix led scan : T0=2ms */
{
         TH0=(65536-1000)/256;
         TL0=(65536-1000)%256;               
               
         if(ucDelay != 0x00)
         {
                 ucDelay --;
         }
}  

上式改成下式      

void T0_int(void) interrupt 1               // T0 中斷服務程式 ISR
{
        TR0=0;                               // 關閉 T0 計時
        TH0=(65536-2000)/256;      // 2000uS   2mS  中斷一次
        TL0=(65536-2000)%256;     // 重新給初始值

        while ( ucDelay != 0x00 )
                ucDelay --;

        TR0=1;                                // 啟動 T0 開始計時
}
已有 1 人評分威望 收起 理由
紅塵孤鳥 + 2 感謝您熱心幫助會員解決問題,論壇需要您的.

總評分: 威望 + 2   查看全部評分

請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-5-5 08:39

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部