分享

【新提醒】基于proteus的51单片机仿真实例八十二、4X4矩阵键盘应用实例

 抱团的小喵咪 2014-05-20
1、矩阵键盘的工作原理:
1)接口电路:在单片机系统中,当按键数量较多时,为了减少IO口的使用,通常将按键排列成矩阵型式,例如本例中的16个按键,被排列成了如下图所示的4X4矩阵方式。即由4根行线和4根列线组成,每个行线和列线的交叉点既是一个按键。这样共需8个IO口。
2)工作原理
使用矩阵键盘的关键是如何判断那个按键被按下。根据下面的电路图,如果已知P1.0端口被置为低电平“0”,那么当按键K0被按下时,可以肯定P1.4端口的电平也变为了低电平“0”。基于这个原理,总结矩阵键盘识别按键的步骤如下:
a)首先判断是否有按键被按下。将全部行线置为低电平“0”,全部列线置为高电平“1”。然后检测列线的状态。只要有一根列线的电平为低,则表示有按键被按下。否则没有按键按下。
b)按键消抖。当判断到有按键被按下后,还要进行消抖处理,以确认真正有按键被按下。
c)按键识别:当确认有键被按下后,采用逐行扫描的方法来确定是哪一个按键被按下。先扫描第一行,即将第一行输出低电平“0”,然后读取列值,那一列出现低电平“0”,则说明该列与第一行交叉处的按键被按下。如果读入的列值全部为"1",说明与第一行连接的按键均没有被按下。那么接下来开始扫描第二行,以此类推。直到完成全部行线的扫描。
本例中矩阵键盘中P1端口低4位连接的是列线,高4位连接的是行线。
2、在keil c51中新建工程ex70,编写如下程序代码,编译并生成ex70.hex文件
//数码管显示4X4矩阵键盘键值
#include <reg51.h>
//数码管段码表,共阳极段码表,实际电路用的共阴极数码管
unsigned char code disp_buff[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
                                  0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};
//上次按键和当前按键序号,该矩阵中序号范围0-15,16表示无按键
unsigned char pre_keyno = 16,keyno = 16;
//延时函数
void delayms(unsigned int x)
{
  unsigned char i;
 while(x--)
 {
  for(i = 0;i < 120;i++);
 }
}
//按键扫描函数,首先判断按键发生在那一列,然后根据所发生的行附加不同的值,从而得到键盘按键序号
void key_scan(void)
{
  unsigned char i;
 //高4位置1,放入4行
 P1 = 0x0f;
 delayms(1);
 //有键按下后,其中一列将变为低电平
 i = P1^0x0f;
 //判断按键发生在哪一列
 switch(i)
 {
   case 1: keyno = 0;break;
  case 2: keyno = 1;break;
  case 4: keyno = 2;break;
  case 8: keyno = 3;break;
  default: keyno = 16;          //无键按下
 }
 //低四位置1,放入4列
 P1 = 0xf0;
 delayms(1);
 //
 i = P1 >> 4 ^ 0x0f;
 //对0-3行分别附件起始值
   switch(i)
 {
   case 1: keyno += 0;break;
  case 2: keyno += 4;break;
  case 4: keyno += 8;break;
  case 8: keyno += 12;break;
 }
}
// 主函数
void main(void)
{
 P0 = 0x00;
 while(1)
 {
   P1 = 0xf0;
  if(P1 != 0xf0)    //扫描键盘获得按键序号
  {
    key_scan();    
  }
  if(pre_keyno != keyno)
  {
    P0 = ~disp_buff[keyno];  //显示,共阳极段码取反作为共阴极段码
   pre_keyno = keyno;
  }
  delayms(100);
 }
}
3、在proteus中新建仿真文件ex70.dsn,电路原理图如下所示
4、将ex70.hex文件载入at89c51中,注意将晶振频率改为11.0592MHz,启动仿真,按动按键,观察运行结果。下图是某一时刻程序运行结果

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多