SOGO論壇
標題:
89C51 程式問題
[列印本頁]
作者:
zaq1234
時間:
2013-5-30 17:50:56
標題:
89C51 程式問題
222.C(108):警告C206:'Clock_Delay':缺少函數原型
要怎麼改?
作者:
if8051
時間:
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 秒
作者:
zaq1234
時間:
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 --;
}
}
作者:
qlfabm2001
時間:
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語言 函數的章節
作者:
if8051
時間:
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 開始計時
}
歡迎光臨 SOGO論壇 (https://oursogo.com/)
Powered by OURSOGO.COM