(学习笔记)手把手教你学51单片机:函数进阶与按键

一、单片机最小系统

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

(1)常见的电源电压值是5v,工作电压典型值是3.3v。

(2)晶振通常为无源晶振和有源晶振两种。

有源晶振是一个谐振振荡器利用石英晶体的压电效应来起振,所以有源晶振需要供电,当有源晶振电路做好后,不需要外接其他器件,只需要给它供电,就可以主动的产生振荡频率,并且可以提供高精度的频率基准,信号质量也比无源信号稳定。

无源晶振自身无法振荡起来,它需要芯片内部的振荡电路一起工作才能震荡,它允许不同的电压,但是信号质量和精度较有源晶振差一些。无缘晶振两侧通常会有两个电容,一般容值都在10~40pf,常用20pf。

(3)复位电路

KST-51电路板中,电路稳定时,电容起隔离直流作用,且是高电平复位,低电平正常工作。

(学习笔记)手把手教你学51单片机:函数进阶与按键_第1张图片

二、函数的调用

函数调用的一般形式是:

函数名(实参列表)

(1)函数调用时不需要加函数类型。

(2)函数被调用之前必须先被定义或声明。编程规范:一般推荐main函数写在最前面,然后定义各个功能函数,而中断函数一般写在最后。在文件开头所有函数之前,开辟一块区域叫做函数声明区,用来把被调用的函数声明一下。

(3)函数声明时必须加函数类型,函数的形式参数,最后加上一个分号表示结束。

三、函数的形式参数和实际参数

在调用一个有参数的函数时,函数名后边括号中的参数叫做实际参数,简称实参

被调用的函数在进行定义时,括号里的参数叫做形式参数,简称形参

1、函数定义中指定的形参,在未发生函数调用时不占内存,只有函数调用时,函数中的形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放,形参是局部变量。
           2、实参可以是常量,也可以是简单或者复杂的表达式,但是要求他们必须有确定的值,在调用发生时将实参的值传递给形参。
           3、形参必须要指定数据类型,和定义变量一样,因为它本来就是局部变量。
           4、实参和形参的数据类型应该相同或者赋值兼容。和变量赋值一样,当形参和实参出现不同类型时,则按照不同类型数值的赋值规则进行转换。
           5、主调函数在调用函数之前,应对被调函数做原型声明。
           6、实参向形参的数据传递是单向传递,不能由形参再回传给实参。也就是说,实参值传递给形参后,调用结束,形参单元被释放,而实参单元仍保留并且维持原值

四、按键

4.1独立按键

(学习笔记)手把手教你学51单片机:函数进阶与按键_第2张图片

 独立按键原理图如上,通过检测 KeyIn管教的电平从而判断按键是否按下。

(学习笔记)手把手教你学51单片机:函数进阶与按键_第3张图片

 大部分单片机的IO口均是使用MOS管而非三极管,但两者原理类似。图中方框内指单片机电路部分,方框外的就是上拉电阻和按键。需要读取外部数据是需要先给该引脚写“1”,这样才能读取到外部按键信号。

当内部输出是个低电平,经过一个反相器变成高电平,NPN 三极管导通,那么单片机的内部 IO 口就是个低电平,这个时候,外部虽然也有上拉电阻的存在,但是两个电阻是并联关系,不管按键是否按下,单片机的 IO 口上输入到单片机内部的状态都是低电平,我们就无法正常读取到按键的状态了。
          从上面的分析就可以得出一个结论,这种具有上拉的准双向 IO 口,如果要正常读取外部信号的状态,必须首先得保证自己内部输出的是 1,如果内部输出 0,则无论外部信号是 1还是 0,这个引脚读进来的都是 0。

4.2 矩阵按键

(学习笔记)手把手教你学51单片机:函数进阶与按键_第4张图片

把矩阵按键当作独立按键进行检测。比如令Keyout1为低电平, Keyout2、Keyout3、Keyout4均为高电平,就相当于把矩阵按键的第一行当作独立按键来检测。

4.3 按键消抖

(学习笔记)手把手教你学51单片机:函数进阶与按键_第5张图片

(1)延时:检测到按键状态变化后,先等待一个10ms 的延时,抖动消失后再进行一次按键状态监测,如果与之前检测状态相同,就可以确认按键已经稳定动作了。

程序中间加了这种 delay 延时操作后,很可能某一事件发生了,但是我们程序还在进行 delay 延时操作中,当这个事件发生完了,程序还在 delay 操作中,当我们 delay 完事再去检查的时候,已经晚了,已经检测不到那个事件了。为了避免这种情况的发生,我们要尽量缩短 while(1)循环一次所用的时间,而需要进行长时间延时的操作,必须想其它的办法来处理。

(2)用定时中断检测同一状态的次数

我们启用一个定时中断,每 2ms 进一次中断,扫描一次按键状态并且存储起来,连续扫描 8 次后,看看这连续 8 次的按键状态是否是一致的。8 次按键的时间大概是 16ms,这 16ms 内如果按键状态一直保持一致,那就可以确定现在按键处于稳定的阶段,而非处于抖动的阶段。

 

 

你可能感兴趣的:(单片机)