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

2009-8-13 08:57 2274 5 5 分类: MCU/ 嵌入式
摘要:I/O端口是单片机实现对目标控制的端口,一般小型单片机的I/O端口都十分宝贵。文中介绍了一种可节省单片机I/O端口的键盘电路,分析了新型键盘电路结构和工作原理。最后给出了基于该键盘电路C51语言程序和软件处理过程。 电子园51单片机学习网k3M*Y"L.A |G

    关键词:单片机 I/O端口 键盘 组合 扫描

/em5bQ*[bAc[)Q0 电子园51单片机学习网bVq:N;},]U4S&D

1 新型键盘电路

0z%KAQ%s%j` @0

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

!G YHc!Z&w v9j0 电子园51单片机学习网5HI X#e1_[*Y+W

这里以3根I/O线为例,普通接法只能接3个键,即使是采用改进后的组合接法[1],最多也只能接7个链,本文介绍的电路是在组合接法的基础上增加了3个二极管,并采用了新的接法。其软件处理使用了端口访问和扫描检测两种方法,从而使按键数可达到16个,同时由于采用了组合逻辑来直接对端口进行读取,因此极大地简经了程序的处理过程,同时也节省了宝贵的存储器和CPU运算资源。图1是该电路的电路原理图。
E,s7c@$p/p)nS0点击看大图电子园51单片机学习网7n"S?8n;i'k5X
2 软件过程和程序
电子园51单片机学习网 `mp&FL@


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


Bs1B [2V#?r0#include<c:eg51.h>

S8r.cFf;h0

3^hFF4}5GY0#define uchar unsigned char电子园51单片机学习网!v:iW^#a_-nDn

电子园51单片机学习网,wY$lE!BzV7{v

uchar getkey(void);

oB-e@r3Y \)C0 电子园51单片机学习网I@|4]8BpTdv

uchar keyvol;

et-n4f7hK0 电子园51单片机学习网 M;C.qW@eY1U

void main(void)电子园51单片机学习网1@ P(E:?f6m.mr


k,R6tU\zi0{电子园51单片机学习网L&_9voA T4{+`%hr


(Xk2L9ZY Q-U0keyvol=getkey(); /*调用键处理函数,返回的数据等于16表示同有键按下,0至15对应k0至K15*/电子园51单片机学习网Z`7T:n%]J3q'i.P


3T&v"q3\0S"B.N0}

~9T~R1Bo o7` a0

8}[W!RH:gG0以下为键盘处理子程序:

J8@YfCVWAvf0 电子园51单片机学习网m/Ee]Xs f9\,d2n

uchar getkey(void)

!x)E7f,W rI0

.X7I'E NA"] B(Z0{电子园51单片机学习网T[zz to*n3nk


[ c%ZV d0uchar x电子园51单片机学习网)lO9Y r8O


Qc6[s"nxs0P1=P1|0x07; /*I/O1至I/O3写“1”*/

~#y }#j3?l0 电子园51单片机学习网 u B'F E Oc!~

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

)x6y~2U#e0

.o5?-d:S$P0[([P O;o0if(x= =10)

A5X6t| Y%K;C4G0 电子园51单片机学习网-EA)en&b+zz;Fp

{电子园51单片机学习网+PC'N;L8yu

电子园51单片机学习网#J vf@8u e-o/{

P1=P1|0x07;

SW O$o-e0 电子园51单片机学习网b9Hp(z-{*|

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

9j^pPdN0

c&WG(D+F5n|5px0x=P1&0x07;电子园51单片机学习网Y2t QcMW(~sd

电子园51单片机学习网,z{8}.N!C)St U6R/Y-b/m7V

x=(x+1)/2+10; /*屏蔽I/O2并转换K10至K12的键值*/电子园51单片机学习网!l1r(N7rG|


*[:^Fg*Z\-AP0if(x = =13)

:d-t9c$b*pg0 电子园51单片机学习网!dic)ww'N-R\.]s

{

(Q)i5R$x{0 电子园51单片机学习网 P6Cq,Q]4M

P1=P1|0x07;

pg g+QG'|g#i0

X;R5u:] O!F T-`~0P1=P1&0xfb; /*I/O3写“0”*/电子园51单片机学习网(e0To} Wc-Q|"z D

电子园51单片机学习网+ZC/ec"[-?xwER&n

x=P1&0x07;电子园51单片机学习网 LML[t8A jP

电子园51单片机学习网{8b,@m#ho

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

/~eDl4H.g2t Vn0 电子园51单片机学习网^b PE0vA

}

W&^~G7t0

B!?+P&vp E3n0}

z [1h{~z{+W-V3P0

7tX4oJ?:yF!Z0}电子园51单片机学习网n}LF'P e%c'z


rp.f(K8mG ut0return x;

w,[w s3J$O0 电子园51单片机学习网+me*gO;Grefg-~q6`

}

4u6cBZ{;~Q0

3po)j } K q)g+p0利用该键盘电路并根据逻辑组合原理可推断开n条I/O线可组合的按键数N为:电子园51单片机学习网Xg*jD*ga


MGE x7C(Y0N=(2n-1)+(2 n-1 -1)n

U&QK E%up0 电子园51单片机学习网vpK3O~8S

表1给出了2至4条I/O线可组合的按键数。
g3Xh4c^"aN)h'K{0电子园51单片机学习网x's0g7E3Hk"x ?e
表1 2~4条I/O线可组合的按键数

cPz&v*w ^z0
I/O线可组合按键
25
316
443

H3K\C]EQ03 结束语电子园51单片机学习网F%@R#G,^t[ `


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

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条