加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSSRSS-巴斯仪表网
您当前的位置:首页 > 电子发烧 > 单片机学习

节约单片机端口资源的键盘电路

时间:2013-11-23  来源:123485.com  作者:9stone

1 新型键盘电路

        键盘电路是单片机应用系统最常用的人机接口,往往要占用较多的I/O端口,利用本文介绍的电路,可以最大限度地减少键盘电路对I/O端口的点用。本电路特别适合一些引脚少、结构紧凑的单片机,可为其节省宝贵的I/O资源。

       这里以3根I/O线为例,普通接法只能接3个键,即使是采用改进后的组合接法[1],最多也只能接7个链,本文介绍的电路是在组合接法的基础上增加了3个二极管,并采用了新的接法。其软件处理使用了端口访问和扫描检测两种方法,从而使按键数可达到16个,同时由于采用了组合逻辑来直接对端口进行读取,因此极大地简经了程序的处理过程,同时也节省了宝贵的存储器和CPU运算资源。图1是该电路的电路原理图。

 

2 软件过程和程序

该电路在程序处理时,由处理器首先向I/O1~I/O3写高电平,然后读入。如果非全“1”,说明,K0~K6中有键按下,此时可根据读入的端口状态判断键的状态,如果读入的结果为全“1”,则I/O1~I/O3轮流输出低电平,再读入,这样就可根据另外两根I/O线的状态来判别是K7~K15中的哪一个键被按下。重复调用键盘处理子程序可将读取的键值与上次的值进行比较,甚至两次读数相同为止,这样即可消除按键抖动所造成的误读。该电路选用的单片机为 AT89C2051,用C51语言编写的按键电路处理程序如下:

#include<c:eg51.h>

#define uchar unsigned char

uchar getkey(void);

uchar keyvol;

void main(void)

{

keyvol=getkey(); /*调用键处理函数,返回的数据等于16表示同有键按下,0至15对应k0至K15*/

}

以下为键盘处理子程序:

uchar getkey(void)

{

uchar x

P1=P1|0x07; /*I/O1至I/O3写“1”*/

xP1&0x07; /*读入I/O1至I/O3并屏蔽其它位*/

if(x= =10)

{

P1=P1|0x07;

P1=P1&0xfd; /*I/O2写“0”*/

x=P1&0x07;

x=(x+1)/2+10; /*屏蔽I/O2并转换K10至K12的键值*/

if(x = =13)

{

P1=P1|0x07;

P1=P1&0xfb; /*I/O3写“0”*/

x=P1&0x07;

x=x+13; /*屏蔽I/O3并转换K13至K15的键值*/

}

}

}

return x;

}

利用该键盘电路并根据逻辑组合原理可推断开n条I/O线可组合的按键数N为:

N=(2n-1)+(2 n-1 -1)n

表1给出了2至4条I/O线可组合的按键数。

表1 2~4条I/O线可组合的按键数

I/O线 可组合按键
2            5
3           16
4           43

3 结束语

这种新型键盘电路在使用时非常稳定可靠,节省大量的I/O端口,而且程序处理也很简洁,速率比4×4的扫描式电路还要快,因此,该电路特别适合一些引脚较少的单片机,如PIC12C508、Z86E03以及AT89C2051等。


分享到:
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
栏目导航->单片机学习
  • 电子应用基础
  • 电源技术
  • 无线传输技术
  • 信号处理
  • PCB设计
  • EDA技术
  • 单片机学习
  • 电子工具设备
  • 技术文章
  • 精彩拆解欣赏
  • 推荐资讯
    使用普通运放的仪表放大器
    使用普通运放的仪表放
    3V与5V混合系统中逻辑器接口问题
    3V与5V混合系统中逻辑
    数字PID控制及其改进算法的应用
    数字PID控制及其改进
    恶劣环境下的高性价比AD信号处理数据采集系统
    恶劣环境下的高性价比
    栏目更新
    栏目热门