51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机源码 > 详细内容
各种各样的矩阵键盘扫描程序集
发布时间:2009/7/7  阅读次数:4586  字体大小: 【】 【】【

  /************主   程序*************/
void main(void)
{
   void tkey(void);
   void led(void);
   void delay(int);


  
   SCON=0x00;
   TI=0;
   while(TURE)
   {
     Tkey();
     led();
     delay(2000);
   }

}


/********矩键查寻键值4*4程序******/按键为P1.0---P1.7
void Tkey(void)
{
   uchar readkey;//rereadkey;
   uchar x_temp,y_temp;
  

   P1=0x0f;
   x_temp=P1&0x0f;
   if(x_temp==0x0f) goto keyout;
   P1=0xf0;
   y_temp=P1&0xf0;
   readkey=x_temp|y_temp;
   readkey=~readkey;


switch(readkey)
       {
        case 0x11:key=0; break;
      case 0x21:key=1; break;
   case 0x41:key=2; break;
   case 0x81:key=3; break;
   case 0x12:key=4; break;
   case 0x22:key=5; break;
   case 0x42:key=6; break;
   case 0x82:key=7; break;
   case 0x14:key=8; break;
   case 0x24:key=9; break;
   case 0x44:key=10;break;
   case 0x84:key=11;break;
   case 0x18:key=12;break;
   case 0x28:key=13;break;
   case 0x48:key=14;break;
   case 0x88:key=15;break;
   default:   key=16;break;
       }

keyout:_nop_();
}


/************显示程序*************/
void led(void)
{uchar code LEDValue[]=

{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};   //0-9
  uchar data num[6];
  uchar k;
num[0]=0;
num[1]=0;
num[2]=0;
num[3]=0;
num[4]=key/10;
num[5]=key-(key/10)*10;

  for(k=0;k<=5;k++)
  {
     SBUF=LEDValue[num[5-k]];
     while(TI==0);
     TI=0;
  }
}


  
/************延时程序*************/
void delay(del)
{
  for(del;del>0;del--);
}

;伪定义              
  KEYBUF  EQU  30H       ;键值暂存单元,查表时用
;*************************************
;*                                                                     *
;*           主程序和中断程序入口                 *
;*                                                                     *
;*************************************
  ORG         0000H                     ;程序执行开始地址
  AJMP       MAIN                       ;跳至MAIN执行
;*************************************
;*                                                                     *
;*               主   程   序                                 *
;*                                                                     *
;*************************************
  ORG         0040H
MAIN:     MOV         P1,#0FFH
  MOV         P3,#0FFH
  LCALL     KEYSCAN                 ;主体程序。调用查键子程序
     LJMP   MAIN         ;转MAIN循环
     NOP             ;软件陷阱
     NOP
     NOP
     LJMP   MAIN      
;*************************************
;*                                                                     *
;* 键盘工作子程序(4 * 5 阵列)               *
;* 接口为2051的P3和P1口                           *
;*************************************
KEYSCAN:MOV   P3,#0FFH  ;清P3口,初始化键低电平有效
           CLR   P3.2    ;清P3.2口
           MOV   A,P1    ;读P1口状态
           ANL   A,#0FH    ;清高4位,保留低四位低电平有效
           XRL   A,#0FH    ;异或相同则为0不同结果为1,为0则表;示无键被按下(这一行)
           JZ   NOKEY1    ;为0则转下一行键值处理
           LCALL   DL10MS    ;有键按下则延时10ms再测一次抗干扰
           MOV   A,P1
           ANL   A,#0FH
           XRL   A,#0FH
           JZ   NOKEY1    ;是干扰则转下一行键值处理程序
           MOV   A,P1
           ANL   A,#0FH    ;保留低四?
KB1:  CJNE   A,#0EH,KB2  ;如果值为#0E则为P1.4与P1.0组合的键
           MOV   KEYBUF,#0  ;赋键值
           LJMP   KEYWORK    ;转键处理
KB2:   CJNE   A,#0DH,KB3  ;如果值为#0D则为P1.4与P1.1组合的键
           MOV   KEYBUF,#1
           LJMP   KEYWORK
KB3:   CJNE   A,#0BH,KB4  ;如果值为#0B则为P1.4与P1.2组合的
           MOV   KEYBUF,#2
           LJMP   KEYWORK
KB4:   CJNE   A,#07H,KB5  ;如果值为#07则为P1.4与P1.3组合的
           MOV   KEYBUF,#3
           LJMP   KEYWORK
KB5:   NOP
  ;
NOKEY1:  MOV   P3,#0FFH
           CLR   P3.3
           MOV   A,P1
           ANL   A,#0FH
           XRL   A,#0FH
           JZ   NOKEY2
           LCALL   DL10MS
           MOV   A,P1
           ANL   A,#0FH
           XRL   A,#0FH
           JZ   NOKEY2
           MOV   A,P1
           ANL   A,#0FH
           CJNE   A,#0EH,KB6
           MOV   KEYBUF,#4
           LJMP   KEYWORK
KB6:   CJNE   A,#0DH,KB7
           MOV   KEYBUF,#5
           LJMP   KEYWORK
KB7:   CJNE   A,#0BH,KB8
           MOV   KEYBUF,#6
           LJMP   KEYWORK
KB8:   CJNE   A,#07H,KB9
           MOV   KEYBUF,#7
           LJMP   KEYWORK
KB9:   NOP
  ;

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号