手把手教你学51单片机——函数进阶与按键

目录

写在前面

一、单片机最小系统解析

1.1电源

1.2晶振

1.3复位电路

二、C语言——函数

2.1函数的调用

2.2函数的形参和实参

三、按键

3.1独立按键

3.2独立按键控制led数码管显示0~F

3.3按键消抖

3.4矩阵按键

3.5矩阵按键控制led显示不同数值

3.6简易加法计算器


写在前面

    本博客基于宋雪松老师的《手把手教你学51单片机》教学视频及教程,使用的也是视频配套的KST-51开发板。但是本博客所包含的大部分代码均为博主自己学习思考之后,独立写出。可能会与教程例程所给代码有所出入。同样的该博客可以看作本人在学习51单片机的学习笔记。

        同时,欢迎大家指正、并在讨论群留言。

一、单片机最小系统解析

    单片机的最小系统由电源、晶振和复位电路组成。

1.1电源

    可以查找我们使用单片机的数据手册获得,我所使用的STC89C52单片机工作电压为5.5~3.4V,为5V单片机。同时还有一种常用的工作电压范围为2.7~3.6V、典型值是3.3V的单片机,我们称之为3.3V单片机。

1.2晶振

    晶振通常分为有源晶振和无源晶振两种。其中有源晶振我们需要给它供电才可以产生震荡频率,并且可以提供高精度的频率基准,信号质量也比无源信号要好。而无源晶振自身无法振荡起来,它需要芯片内部的振荡电路一起工作才能振荡,它允许不同的电压,但是信号质量和精度较有源晶振差一些。

1.3复位电路

    如图所示为KST-51单片机上的复位电路,该单片机RST引脚高电位复位,低电位正常,我们来简单的分析一下其工作原理。

    电路稳态时:电容隔绝电流,RST接地,此时为低电平正常工作。

    上电复位:电容充电,此时可以把电容看作一根导线,RST高电平。在电容充电过程中,电流减小,RST电压逐渐减小至0。

    按键复位:按下RESET按键,电路导通,电容放电,RST高电平。松开RESET按键,该过程类似于上电复位过程,RST电压逐渐减小至0。

二、C语言——函数

    函数的使用可以使我们的程序条理清晰,避免大块的代码重复。

2.1函数的调用

    函数的调用一般形式为:函数名(实参列表)。

    这里我们需要注意几点:

    1.函数在调用时,不需要加函数类型。

    2.函数在调用之前,必须先定义或声明。也就是说要么被调用函数应写在调用函数之前,要么我们在调用函数之前在文件开头进行声明。在这里宋老师推荐以“函数声明——main函数——功能函数——中断函数”的顺序编写程序。

    3.函数声明时必须加函数类型。

2.2函数的形参和实参

    在定义函数时,括号中的参数为形式参数。在调用函数时,括号里的参数为实际参数

    在这里我们也需要注意几点,可能刚开始不了解,不必过分纠结,先学会使用再对其进行深入理解。

    1.函数定义中指定的形参,在未发生函数调用时不占内存,只有函数调用时,函数中的形参才被分配内存单元。

    2.实参必须有确定的值。

    3.形参必须指定数据类型。

    4.实参向形参的数据传递是单向传递,不能由形参再回传给实参。

    在这里,书中给了一个小例子,大家可以好好体会一下函数的使用、定义和注意事项。

unsigned char add(unsigned char x, unsigned char y); //函数声明
void main()
 {
     unsigned char a = 1;
     unsigned char b = 2;
     unsigned char c = 0;
     c = add(a, b); //调用时,a 和 b 就是实参,把函数的返回值赋给 c
     //执行完后,c 的值就是 3
     while(1);
 }
 unsigned char add(unsigned char x, unsigned char y) //函数定义,括号中的 x 和 y 就是形参
 {
     unsigned char z = 0;
     z = x + y;
     return z; //返回值 z 的类型就是函数 add 的类型
 }

三、按键

3.1独立按键

    如图所示为独立按键的原理图,当按键松开时,KeyIn与+5V电位相同,二者同为高电平。而按键按下时,电流如图中红色线所示流向GND,此时KeyIn的GND电位相同,为低电平。
    所以当按键发生改变时,KeyIn会发生高低电平的

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值