找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2114|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

請(qǐng)教各位大俠一個(gè)C語(yǔ)言函數(shù)調(diào)用問(wèn)題

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:370407 發(fā)表于 2020-3-4 20:31 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
函數(shù)太多了  如果想根據(jù)情況調(diào)用不同的函數(shù)太麻煩了   
如果把函數(shù)排上序號(hào)用變量的方式調(diào)用不知道可不可以
請(qǐng)問(wèn)下各位大俠還有沒(méi)有什么方法可以方便調(diào)用的謝謝

void delay1()
     {delayus2x(218 );}
void delay2()
     {delayus2x(223 );}
void delay3()
     {delayus2x(229 );}
void delay4()
     {delayus2x(234 );}
void delay5()
     {delayus2x(240 );



//---------------------------------

void main()     
{unsigned char a,b,c,d,e;
while(1)
{        
a=1;

delay a ();        //   a是個(gè)變量     函數(shù)太多了   這個(gè)調(diào)用方法可不可以    或者還有沒(méi)有其他的辦法







}                                   
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:452950 發(fā)表于 2020-3-4 22:31 | 只看該作者
不可以,每一個(gè)函數(shù)名需要單獨(dú)聲明。delay a()就是一個(gè)單獨(dú)的函數(shù),(delay a)是一個(gè)整體的函數(shù)名,編譯時(shí)不可能把變量a的值賦給delay a()里面的a。
回復(fù)

使用道具 舉報(bào)

板凳
ID:452950 發(fā)表于 2020-3-4 23:10 | 只看該作者
//你可以把所有的功能函數(shù)放到一個(gè)函數(shù)exp()里面,比如說(shuō):
uchar a;
void exp()
{
if (a==1)exp1();
if(a==2)exp2();
if(a==3)exp3();
}
void main()     
{
while(1)
{
if(Key==1){a=1;exp();}
if(Key==2){a=2;exp();}
if(Key==3)(a=3;exp();}
}
}
//先定義變量a,然后在主函數(shù)里面把變量a放到exp()函數(shù)里面去選擇,應(yīng)該能達(dá)到你要的效果,Key可以定義為對(duì)應(yīng)按鍵的鍵值。switch語(yǔ)句也可以做到。但是這樣你也得記得每一個(gè)編號(hào)對(duì)應(yīng)函數(shù)的功能,不如直接調(diào)用不同的函數(shù)。
回復(fù)

使用道具 舉報(bào)

地板
ID:213173 發(fā)表于 2020-3-5 08:05 | 只看該作者
寫(xiě)一個(gè)基本的延時(shí)函數(shù) delay() ,用宏定義的方式預(yù)處理后即可正常調(diào)用。
#define delay1()  delay()
#define delay2()  delay1(),delay1()
#define delay3()  delay2(),delay1()
#define delay4()  delay3(),delay1()
#define delay5()  delay4(),delay1()
#define .....................
回復(fù)

使用道具 舉報(bào)

5#
ID:462827 發(fā)表于 2020-3-5 09:45 | 只看該作者
帶參數(shù)以便確定延時(shí)多長(zhǎng)不就行了
回復(fù)

使用道具 舉報(bào)

6#
ID:282850 發(fā)表于 2020-3-5 10:08 | 只看該作者
本帖最后由 f556 于 2020-3-5 10:44 編輯

用數(shù)組的方式吧:
tm[]={218,223,229,234,240};

當(dāng)a=1時(shí)
delay(tm[a-1]);  //delay(218)了
修改參數(shù)值直接在數(shù)組中調(diào)就行了,我想應(yīng)該沒(méi)有比這個(gè)更直觀的了。
回復(fù)

使用道具 舉報(bào)

7#
ID:342451 發(fā)表于 2020-3-5 10:09 | 只看該作者
void delay1(u16 i)
     {delayus2x(u16 i );}
這樣就可以了,統(tǒng)一調(diào)用一個(gè)函數(shù),往函數(shù)里填進(jìn)去參數(shù)不就好了。
回復(fù)

使用道具 舉報(bào)

8#
ID:687694 發(fā)表于 2020-3-5 13:17 | 只看該作者
#define a 218
#define b 223
#define c 229
#define d 234
#define e 240
....
void main()
{
delay(a);
delay(b);
....
}
回復(fù)

使用道具 舉報(bào)

9#
ID:695512 發(fā)表于 2020-3-5 14:01 | 只看該作者
void Delay(uint z)                //@11.0592MHz
{
        int i, j;
        for(z;z>0;z--)
        {
                i = 180;
                j = 73;
                do
                {
                while (--j);
                } while (--i);
        }
}
延時(shí)函數(shù)這樣寫(xiě)就可以了
回復(fù)

使用道具 舉報(bào)

10#
ID:560467 發(fā)表于 2020-3-6 16:15 | 只看該作者
不行,你可以利用選擇語(yǔ)句來(lái)實(shí)現(xiàn)這個(gè)功能
回復(fù)

使用道具 舉報(bào)

11#
ID:703395 發(fā)表于 2020-3-6 17:07 | 只看該作者
可以的利用函數(shù)指針
C語(yǔ)言抽象靠的就是
結(jié)構(gòu)體 + 函數(shù)指針
不知道下面這個(gè)簡(jiǎn)單的小例子是不是你要的

typedef void(*pfnFunctionName)(void);
void delay1()
     {delayus2x(218 );}
void delay2()
     {delayus2x(223 );}
void delay3()
     {delayus2x(229 );}
void delay4()
     {delayus2x(234 );}
void delay5()
     {delayus2x(240 );

const int number = 5;
pfnFunctionName array[number] = {delay1, delay2, delay3, delay4, delay5};
for(int i = 0; i < number; i++)
{
    array[i]();
}
回復(fù)

使用道具 舉報(bào)

12#
ID:370407 發(fā)表于 2020-3-7 10:36 | 只看該作者
我用了  switch語(yǔ)句
回復(fù)

使用道具 舉報(bào)

13#
ID:703167 發(fā)表于 2020-3-7 20:36 | 只看該作者
你這樣寫(xiě)當(dāng)然是不可以的,可以用switch語(yǔ)句
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表