5.带返回值的函数

发布日期:2020-12-26 09:10:14 来源:网络转载

1.返回值

之前我们封装的函数都是void类型无返回值的函数。随着学习的深入,我们需要把C语言的精髓学到家。

前面几讲在“function.c”中没有提及过按键的函数封装,大家也知道我们在第五章用到的按键功能函数都需要定义全局变量,这种过多的使用全局变量是编程的大忌。随着我们使用按键越来越灵活,就不是简单的让一两个变量加加减减而已了,所以现在我们要更加的去贴合嵌入式编程的方式,那么按键的使用如果用函数封装的话,需要用到函数返回值的相关知识。

 

2.举例

首先我们定义一个不带参数且返回值为unsigned char型的函数,函数名为“KEY4_Scan()”,里面的内容跟以前的不支持连按函数都差不多,只是我们把执行功能代码部分改为“return  1”。

当按键按下抬起时我们函数的返回值为1,其他情况返回值为0,这样死循环里不断更新key的值,而大多数时候没有按键动作,所以死循环里的key的值都是0,有按键动作了,key等于1就执行功能代码,下一个循环没有按键动作了key又等于0就不执行功能代码了。

#include <reg52.h> 
#include <function.h>
#define TIMES 1000 //死循环里的代码量少,所以把阈值调大点
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)循环里首先看到的是“key=KEY4_Scan();”,也就是说这条语句是要执行“KEY4_Scan()”的内容的,然后我们转往“KEY4_Scan()”查看函数的内容是什么,分析得出

没有按键按下时,函数的内容相当于只执行下面的代码

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

所以回到主函数的循环中就是“key=0;”,LED2的程序就没有去执行。

有按键按下并且抬起时,返回值为1,即主函数里“key=1;”,那就可以执行LED2的程序了。又因为每次执行死循环都会把key的值更新一遍,所以“key=1;”的情况只有按键动作时才会出现。

大家分析带返回值的函数时,记住一旦程序随着外部硬件的影响而执行到“return”时,后面的程序就不会去执行了,所以我们一般在这些函数的分析过程里遇到“return”,在这个函数里我们直接就不再往下分析程序了,带着这个返回值回到调用这个函数的地方接着往下分析。

关键词 :
网站违法和不良信息举报邮箱:23139485@qq.com
CopyRight@2020-2030 www.haoapp8.cn All Rights Reserved.C语言学习网版权所有 粤ICP备15061369号
免责声明:本站内容来源于用户自行提供或网络收集,其真实性、准确性和合法性,www.haoapp8.cn不提供任何保证,亦不承担任何法律责任.而产生的法律关系及法律纠纷,由您自行协商解决。