浅谈单片机系统中的按键编程
本帖被 一线工人 设置为精华(2009-05-09)
对于一个由单片机为核心构成的系统而言。输入通道是相当重要的。可以看到几乎每一样基
于单片机的产品都有人机交互的部分。如各种仪器设备上的各种按钮和开关,以及我们手机
上的键盘,MP3 上的按键等等。最常见的输入部分,莫非就是按键了。对于大多数初学者
而言,编写一个好的按键程序是一件颇为头疼的事情。于是乎在网上乱搜一气,程序倒是找
到了不少,但是看了半天依然是不明白。或者在某某论坛上面发帖“跪求 XX 按键程序,大
虾帮忙……”如果你偶然间进了这个论坛,又偶然看到了这个帖子,而且恰好你对按键程序
的写法也不是很清楚,那么我希望你能够静静的看完这个帖子。如果你觉得对你很有帮助,
那么我希望你能够在以后的日子中能够坚持到这个论坛来,一起交流学习,分享自己学习过
程中的喜悦或者一起探讨棘手的问题,这是我写这个帖子的最大的初衷了。OK,不能再说
了,再说就变成水帖了。那么我们开始吧。
按键的种类很多。不过原理基本相似。下面我们以一种轻触开关为例讲解按键程序的写法。
这种轻触开关大家不陌生吧^_^
一般情况下,按键与单片机的连接如下面这幅图所示。
(图中电阻值一般去 4.7k~10k 之间,对于内部端口有上拉电阻的单片机则可省略此电阻)
单片机对于按键的按下与否则是通过检测相应引脚上的电平来实现的。对于上图而言,当
P17 引脚上面的电平为低时,则表示按键已经按下。反之,则表明按键没有按下。我们在程
序中只要检测到了 P17 引脚上面的电平为低了,就可以判断按键按下。呵呵,简单吧。等
会,您先别乐呵,话还没说完呢。下面我们来看看,当按键按下时,P17 引脚上面的波形是
怎么变化的。
上图是一个理想波形图,当按键按下时,P17 口的电平马上被拉低到 0V 了。当然理想的东
西都是不现实的。所以我们还是看看现实的波形图吧。
看出什么区别来了没。呵呵,只要你不是傻子我相信都能看出其中的区别。由于按键的机械
特性。当按键闭合时,并不能马上保存良好的接触,而是来回弹跳。这个时间很短,我们的
手根本感觉不出来。但是对于一秒钟执行百万条指令的单片机而言,这个时间是相当的长了。