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

当前位置:首页 > 单片机源码 > 详细内容
C51矩阵键盘
作者:佚名  发布时间:2009/10/16  阅读次数:936  字体大小: 【】 【】【
C51矩阵键盘
在一个4乘4的矩阵键盘中,本人的基本识别程序。。。(P1口低四位对应键盘行线,高四位对应键盘列线,P2口为6个动态LED数码管)

#i nclude<AT89X51.h>
#i nclude<intrins.h>
void delay(unsigned int i);
const unsigned char leddigit[12]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,
                                               0x20,0x60,0xff,0xdf};   /* 字符 0-9 编码,0xff为关显示,0xdf为小数点 */
#define disp(a,b) P2=~(1<<(a));P0=leddigit[b]
#define uchar unsigned char
#define uint unsigned int
void key()
{
uchar k;
P1 = 0xf0;//低位置○,准备查询按键
k = P1;//取得当前P1口的状态
if(k != 0xf0)
{//如果有变化则表示有键按下
   k = 0xfe;
   do{//循环扫描每一行
   P1 = k;
   if(k != P1)
   {
     switch(P1)
     {
     //第一行
     case 0x77:{disp(1,1);break;}
     case 0xb7:{disp(1,2);break;}
     case 0xd7:{disp(1,3);break;}
     case 0xe7:{disp(1,4);break;}
     //第二行
     case 0x7b:{disp(1,5);break;}
     case 0xbb:{disp(1,6);break;}
     case 0xdb:{disp(1,7);break;}
     case 0xeb:{disp(1,8);break;}
     //第三行
     case 0x7d:{disp(1,9);break;}
     case 0xbd:{disp(1,10);break;}
     case 0xdd:{disp(1,11);break;}
     case 0xed:{disp(4,11);break;}
     //第四行
     case 0x7e:{disp(2,1);break;}
     case 0xbe:{disp(2,2);break;}
     case 0xde:{disp(3,3);break;}
     case 0xee:{disp(4,4);break;}

     }
   }
   k = _crol_(k,1);//移位,进入下一行扫描
   }while(k !=0xef);//超过范围退出
}

}    
main()
{
while(1)
{
key();
}
}  
  

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

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

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