一、单片机最小系统
单片机最小系统由电源、晶振、复位电路组成。
(1)常见的电源电压值是5v,工作电压典型值是3.3v。
(2)晶振通常为无源晶振和有源晶振两种。
有源晶振是一个谐振振荡器利用石英晶体的压电效应来起振,所以有源晶振需要供电,当有源晶振电路做好后,不需要外接其他器件,只需要给它供电,就可以主动的产生振荡频率,并且可以提供高精度的频率基准,信号质量也比无源信号稳定。
无源晶振自身无法振荡起来,它需要芯片内部的振荡电路一起工作才能震荡,它允许不同的电压,但是信号质量和精度较有源晶振差一些。无缘晶振两侧通常会有两个电容,一般容值都在10~40pf,常用20pf。
(3)复位电路
KST-51电路板中,电路稳定时,电容起隔离直流作用,且是高电平复位,低电平正常工作。
二、函数的调用
函数调用的一般形式是:
函数名(实参列表)
(1)函数调用时不需要加函数类型。
(2)函数被调用之前必须先被定义或声明。编程规范:一般推荐main函数写在最前面,然后定义各个功能函数,而中断函数一般写在最后。在文件开头所有函数之前,开辟一块区域叫做函数声明区,用来把被调用的函数声明一下。
(3)函数声明时必须加函数类型,函数的形式参数,最后加上一个分号表示结束。
三、函数的形式参数和实际参数
在调用一个有参数的函数时,函数名后边括号中的参数叫做实际参数,简称实参。
被调用的函数在进行定义时,括号里的参数叫做形式参数,简称形参。
1、函数定义中指定的形参,在未发生函数调用时不占内存,只有函数调用时,函数中的形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放,形参是局部变量。
2、实参可以是常量,也可以是简单或者复杂的表达式,但是要求他们必须有确定的值,在调用发生时将实参的值传递给形参。
3、形参必须要指定数据类型,和定义变量一样,因为它本来就是局部变量。
4、实参和形参的数据类型应该相同或者赋值兼容。和变量赋值一样,当形参和实参出现不同类型时,则按照不同类型数值的赋值规则进行转换。
5、主调函数在调用函数之前,应对被调函数做原型声明。
6、实参向形参的数据传递是单向传递,不能由形参再回传给实参。也就是说,实参值传递给形参后,调用结束,形参单元被释放,而实参单元仍保留并且维持原值。
四、按键
4.1独立按键
独立按键原理图如上,通过检测 KeyIn管教的电平从而判断按键是否按下。
大部分单片机的IO口均是使用MOS管而非三极管,但两者原理类似。图中方框内指单片机电路部分,方框外的就是上拉电阻和按键。需要读取外部数据是需要先给该引脚写“1”,这样才能读取到外部按键信号。
当内部输出是个低电平,经过一个反相器变成高电平,NPN 三极管导通,那么单片机的内部 IO 口就是个低电平,这个时候,外部虽然也有上拉电阻的存在,但是两个电阻是并联关系,不管按键是否按下,单片机的 IO 口上输入到单片机内部的状态都是低电平,我们就无法正常读取到按键的状态了。
从上面的分析就可以得出一个结论,这种具有上拉的准双向 IO 口,如果要正常读取外部信号的状态,必须首先得保证自己内部输出的是 1,如果内部输出 0,则无论外部信号是 1还是 0,这个引脚读进来的都是 0。
4.2 矩阵按键
把矩阵按键当作独立按键进行检测。比如令Keyout1为低电平, Keyout2、Keyout3、Keyout4均为高电平,就相当于把矩阵按键的第一行当作独立按键来检测。
4.3 按键消抖
(1)延时:检测到按键状态变化后,先等待一个10ms 的延时,抖动消失后再进行一次按键状态监测,如果与之前检测状态相同,就可以确认按键已经稳定动作了。
程序中间加了这种 delay 延时操作后,很可能某一事件发生了,但是我们程序还在进行 delay 延时操作中,当这个事件发生完了,程序还在 delay 操作中,当我们 delay 完事再去检查的时候,已经晚了,已经检测不到那个事件了。为了避免这种情况的发生,我们要尽量缩短 while(1)循环一次所用的时间,而需要进行长时间延时的操作,必须想其它的办法来处理。
(2)用定时中断检测同一状态的次数
我们启用一个定时中断,每 2ms 进一次中断,扫描一次按键状态并且存储起来,连续扫描 8 次后,看看这连续 8 次的按键状态是否是一致的。8 次按键的时间大概是 16ms,这 16ms 内如果按键状态一直保持一致,那就可以确定现在按键处于稳定的阶段,而非处于抖动的阶段
上一篇:KST-51单片机:c语言编程实现数码管动态显示秒表的倒计时
下一篇:KST51单片机:通过中断实现矩阵按键的次数检测与消抖
推荐阅读最新更新时间:2024-11-10 10:25
设计资源 培训 开发板 精华推荐
- DC1281A-G,LTC2209 演示板,高中频,LVDS 输出,185 Msps,16 位 ADC,1MHz < Ain <80MHz
- OM13098: LPCXpresso54628开发板
- 使用 MaxLinear, Inc 的 SP829EK 的参考设计
- LTC2938HDE 电源和温度监视器的典型应用电路
- 使用 ON Semiconductor 的 MC33501 的参考设计
- DN05113/D,采用 NCP786A 超高压线性稳压器的电源参考设计
- 【航顺训练营】基于航顺HK32F103的超级电容点焊机
- 2019电赛C题-电路负载及故障检测装置-设计报告(国一,东南大学)
- GDEH042Z96-墨水屏
- LTC3119IFE 可选 12V 或 3.3V 输出、1MHz 稳压器的典型应用电路