两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

1.返回值

之前我們封裝的函數(shù)都是void類型無返回值的函數(shù)。隨著學習的深入,我們需要把C語言的精髓學到家。

前面幾講在“function.c”中沒有提及過按鍵的函數(shù)封裝,大家也知道我們在第五章用到的按鍵功能函數(shù)都需要定義全局變量,這種過多的使用全局變量是編程的大忌。隨著我們使用按鍵越來越靈活,就不是簡單的讓一兩個變量加加減減而已了,所以現(xiàn)在我們要更加的去貼合嵌入式編程的方式,那么按鍵的使用如果用函數(shù)封裝的話,需要用到函數(shù)返回值的相關(guān)知識。

 

2.舉例

首先我們定義一個不帶參數(shù)且返回值為unsigned char型的函數(shù),函數(shù)名為“KEY4_Scan()”,里面的內(nèi)容跟以前的不支持連按函數(shù)都差不多,只是我們把執(zhí)行功能代碼部分改為“return  1”。

當按鍵按下抬起時我們函數(shù)的返回值為1,其他情況返回值為0,這樣死循環(huán)里不斷更新key的值,而大多數(shù)時候沒有按鍵動作,所以死循環(huán)里的key的值都是0,有按鍵動作了,key等于1就執(zhí)行功能代碼,下一個循環(huán)沒有按鍵動作了key又等于0就不執(zhí)行功能代碼了。

#include <reg52.h> 
#include <function.h>
#define TIMES 1000 //死循環(huán)里的代碼量少,所以把閾值調(diào)大點
sbit KEY4 = P2^7;

u8 KEY4_Scan()
{
    static u8 key_up=1;
    static u16 times;
    if(key_up==0)
    {      
        times++;   
        if(times>=TIMES&&KEY4==1)
        {
            times=0;
            return 1;
        } 
    }
    key_up=KEY4;
    return 0;
}

void main()
{  
    u8 key;     //用來讀取按鍵動作的返回值
    LED_Init(); //初始化LED硬件模塊
    P2=0xF7;    //讓K4能具備有被拉低的條件先
    while(1)
    {      
        key=KEY4_Scan();
        if(key==1)LED2=!LED2;   
    }
}

 

3.分析

如果大家沒有接觸過這些知識,我們簡單講解原理:在while(1)循環(huán)里首先看到的是“key=KEY4_Scan();”,也就是說這條語句是要執(zhí)行“KEY4_Scan()”的內(nèi)容的,然后我們轉(zhuǎn)往“KEY4_Scan()”查看函數(shù)的內(nèi)容是什么,分析得出

沒有按鍵按下時,函數(shù)的內(nèi)容相當于只執(zhí)行下面的代碼

u8 KEY4_Scan()
{
    key_up=KEY4;
    return 0;
}

所以回到主函數(shù)的循環(huán)中就是“key=0;”,LED2的程序就沒有去執(zhí)行。

有按鍵按下并且抬起時,返回值為1,即主函數(shù)里“key=1;”,那就可以執(zhí)行LED2的程序了。又因為每次執(zhí)行死循環(huán)都會把key的值更新一遍,所以“key=1;”的情況只有按鍵動作時才會出現(xiàn)。

大家分析帶返回值的函數(shù)時,記住一旦程序隨著外部硬件的影響而執(zhí)行到“return”時,后面的程序就不會去執(zhí)行了,所以我們一般在這些函數(shù)的分析過程里遇到“return”,在這個函數(shù)里我們直接就不再往下分析程序了,帶著這個返回值回到調(diào)用這個函數(shù)的地方接著往下分析。

點贊(0)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:

一點編程也不會寫的:零基礎(chǔ)C語言學練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進階課程

從零到寫出一個爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程

信息學奧賽或C++選手的 必學C++課程

藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程

手把手講解近五年真題的藍橋杯輔導課程

Dotcpp在線編譯      (登錄可減少運行等待時間)