网站导航: 首页 > 设计参考 > 正文 文章搜索
节约单片机端口资源的键盘电路[图]
 
文章编号:
081207180016
文章分类: 单片机 51系列
点 击:
...
关 键 词: 键盘
文章来源:
网络
摘 要:
键盘电路是单片机应用系统最常用的人机接口,往往要占用较多的I/O端口,利用本文介绍的电路,可以最大限度地减少键盘电路对I/O端口的点用。本电路特别适合一些引脚少、结构紧凑的单片机,可为其节省宝贵的I/O资源...

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语言编写的按键电路处理程序如下:

 
  1. #include<reg51.h>   
  2.   
  3. #define uchar unsigned char   
  4.   
  5. uchar getkey(void);   
  6.   
  7. uchar keyvol;   
  8.   
  9. void main(void)   
  10.   
  11. {   
  12.        
  13.     keyvol=getkey(); /*调用键处理函数,返回的数据等于16表示同有键按下,0至15对应k0至K15*/  
  14.        
  15. }   
  16.   
  17. 以下为键盘处理子程序:   
  18.   
  19. uchar getkey(void)   
  20.   
  21. {   
  22.        
  23.     uchar x;   
  24.        
  25.     P1=P1|0x07; /*I/O1至I/O3写“1”*/  
  26.        
  27.     xP1&0x07; /*读入I/O1至I/O3并屏蔽其它位*/  
  28.        
  29.     if(x= =10)   
  30.            
  31.     {   
  32.            
  33.         P1=P1|0x07;   
  34.            
  35.         P1=P1&0xfd; /*I/O2写“0”*/  
  36.            
  37.         x=P1&0x07;   
  38.            
  39.         x=(x+1)/2+10;/*屏蔽I/O2并转换K10至K12的键值*/  
  40.            
  41.         if(x = =13)   
  42.                
  43.         {   
  44.                
  45.             P1=P1|0x07;   
  46.                
  47.             P1=P1&0xfb;/*I/O3写“0”*/  
  48.                
  49.             x=P1&0x07;                 
  50.             x=x+13; /*屏蔽I/O3并转换K13至K15的键值*/  
  51.                
  52.         }   
  53.            
  54.     }   
  55.   
  56.     return x;   
  57. }   
  58.     
  59.   

利用该键盘电路并根据逻辑组合原理可推断开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等。

 
相关文章:

 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4