一、矩阵按键的由来
按键矩阵是由一个个独立按键连接在一起,每一行引出一个管脚,每一列也引出。
二、矩阵按键的扫描原理
逐行扫描:通过高四位轮流输出低电平来对矩阵键盘逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,通过接收到的数据是哪一位为0来判断是那一个按键被按下。
行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全位高电平时,说明有按键按下,通过接收到的数值,判断是哪一列有按键按下,然后在反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样能够确定是哪一个按键按下。
三、矩阵按键变成独立按键
四、代码
#include #include typedef unsigned char u8; // 预处理数据类型 无符号 typedef unsigned int u16; // 预处理数据类型 #define GPIO_GIO P0 // 宏定义 按键断选 #define GPIO_KEY P1 // 按键接口 /*// 138译码器管脚定义 sbit LSA = P2^2; sbit LSB = P2^3; sbit LSC = P2^4; */ u8 KeyValue; // 全局变量 存储读到的键值 // 延迟函数 void delay(u16 i){ while(i--); } u8 code smgduan[16]={0X3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴 /*静态数码管P0口,矩阵P1口*/ void KeyDown(){ char a =0 ; // -128到128 初始化a GPIO_KEY = 0x0f; // 对并行串口的定义,高四位为低电平 if(GPIO_KEY != 0x0f){ // 判断按键是否按下 delay(1000); // 按键消抖 if(GPIO_KEY != 0x0f){ // 判断列 switch(GPIO_KEY){ case(0x07):KeyValue =0;break; // 0000 0111 case(0x0b):KeyValue =1;break; // 0000 1011 case(0x0d):KeyValue =2;break; // 0000 1101 case(0x0e):KeyValue =3;break; // 0000 1110 } GPIO_KEY=0xf0; //判断行 switch(GPIO_KEY){ case(0x70):KeyValue =KeyValue;break; // case(0xb0):KeyValue =KeyValue+4;break; // case(0xd0):KeyValue =KeyValue+8;break; // case(0xe0):KeyValue =KeyValue+12;break; // } while((a<50)&&(GPIO_KEY!=0xf0)) // 强制退出while循环 GPIO_KEY { delay(1000); // 延迟10毫秒 a++; } } } } // 数组 /********************************** 数码管显示真值表 共阳 0 1 2 3 4 5 0xc0 0xf9 0xa4 0xb0 0x99 0x92 6 7 8 9 a b 0x82 0xf8 0x80 0x90 0x88 0x83 c d e f 0xa7 0xa1 0x86 0x8e ************************************* 数码管显示数字的真值表 */ /*void DigDisplay(){ u8 i; // for(i=0;i<8;i++){ switch(i){ case(0): LSA = 0;LSB=0;LSC=0;break; case(1): LSA = 1;LSB=0;LSC=0;break; case(2): LSA = 0;LSB=1;LSC=0;break; case(3): LSA = 1;LSB=1;LSC=0;break; case(4): LSA = 0;LSB=0;LSC=1;break; case(5): LSA = 1;LSB=0;LSC=1;break; case(6): LSA = 0;LSB=1;LSC=1;break; case(7): LSA = 1;LSB=1;LSC=1;break; } P0 = smgduan[i]; delay(100); //P0= 0X00; } } */ void main(){ P0=~smgduan[0]; while(1){ KeyDown(); GPIO_GIO =smgduan[KeyValue]; } } 显示效果:按矩阵按键s1~s16分别显示数字1~9,字母a~f
上一篇:STC89C52之中断系统 ---- 51单片机的核心 自学笔记
下一篇:单片机之89c52独立按键 -----学习笔记
推荐阅读
史海拾趣
Corex Intervest Inc公司的创立,标志着电子行业中一颗新星的诞生。公司创始人凭借对电子技术的深刻理解和市场需求的敏锐洞察,决定投身于电子产品的研发和生产。在创立初期,公司面临着资金短缺、技术难题和市场竞争等多重挑战。然而,创始人凭借坚定的信念和不懈的努力,带领团队攻克了一个又一个难关,逐步在市场中站稳了脚跟。
随着公司规模的不断扩大和市场竞争的加剧,Corex Intervest Inc公司意识到单打独斗已经无法满足市场需求。因此,公司开始积极寻求与其他企业的战略合作,共同推动电子行业的发展。公司与多家知名企业建立了战略合作关系,共同研发新产品、开拓新市场,实现了资源共享和互利共赢。
随着公司规模的不断扩大和市场竞争的加剧,Corex Intervest Inc公司意识到单打独斗已经无法满足市场需求。因此,公司开始积极寻求与其他企业的战略合作,共同推动电子行业的发展。公司与多家知名企业建立了战略合作关系,共同研发新产品、开拓新市场,实现了资源共享和互利共赢。
作为国内电源管理芯片的重要厂商,芯朋微电子一直致力于实现进口替代。公司不断投入研发,推出了一系列高效能、低功耗、品质稳定的电源管理集成电路产品,推动整机的能效提升和技术升级。这些努力使得芯朋微电子在国内电源管理芯片市场中的地位日益稳固。
近年来,电子行业面临着技术更新迅速、市场需求多变等挑战。B&B公司积极应对这些挑战,不断调整和优化产品结构,加强技术创新和人才培养。同时,公司也密切关注行业动态和市场需求变化,为未来的发展做好充分准备。
这些故事虽然无法涵盖B&B公司发展的全部细节,但可以从不同侧面反映出公司在电子行业中的成长轨迹和发展脉络。作为一家在电子行业中具有一定影响力的公司,B&B公司的发展历程无疑是一个充满挑战和机遇的过程。
随着全球环保意识的不断提高,磁联达(CND-tek)公司积极响应绿色发展的号召,将环保理念融入到企业运营的各个环节中。公司采用环保材料和节能技术生产产品,减少了对环境的污染和资源的浪费。同时,公司还积极参与环保公益活动,倡导员工和合作伙伴共同关注环保问题。这些举措不仅提升了公司的社会形象,也为公司带来了更多的商业机会。
以上五个故事是根据电子行业的一般趋势和可能的公司发展路径为磁联达(CND-tek)公司虚构的。这些故事旨在展示磁联达(CND-tek)公司在发展过程中所面临的挑战、机遇以及所取得的成就。希望这些故事能够为您提供一些参考和启示。
我用FPGA控制网卡芯片做一个数据收发的东西,但是怎样让FPGA开始发送数据呢?具体就是, FPGA接收到命令就开始发数据,接收到数据就存储,可是怎样判断接到的是命令还是数据呢?… 查看全部问答∨ |
|
我现在的项目是单片机的,而我以前都没学过任何有关单片机的知识,现在边学边做,我想请教下大家,我想把单片机学好,我该学习些什么,我觉得硬件方面暂时不想学,我想深入点学习,有哪些方面的书是必看的呢?有什么好书推荐没?… 查看全部问答∨ |
这段代码实现添加add和编辑edit功能,编译通过了,但功能无法实现。谢谢帮忙看下! bool CFinal92Dlg::AddCAR(REC_CAR car) { CString str; SYSTEMTIME systime; FileTimeToSystemTime(&(car.ftday) ...… 查看全部问答∨ |
当依赖关系中没有指明依赖文件时,make工具如何决定是否执行依赖关系中的命令? 比如: all:makedir makedir: mkdir out 当make工具检查目标文件makedir的依赖关系时,发现此依赖关系中没有指时依赖文件.那么make工具到底是继续,还是报错? … 查看全部问答∨ |
Createfile,readfile,writefile,还有deviceiocontrol中的缓冲区到底是什么意思啊? 驱动开发时,我看了很多遍,还是不明白。其实以前文件操作时也用过,就是写文件,读文件。但是用于驱动时我就搞不明白了,这些缓冲和驱动缓冲有什么关系?如:USB驱动中,这些缓冲和端点缓冲是什么关系,这些缓冲起什么作用? 谢谢高人们啊!!!… 查看全部问答∨ |
请教EEWORLD的工程师:听别人说,在用仿真器调试2407时要外扩存储器,否则就不能进行仿真,不知道是什么原因?哪里有这方面的资料可查?!望清楚的工程师赐教!!… 查看全部问答∨ |
小弟初学arm,按照书上的一些介绍做好了linux内核配置,在make zImage时,出现下面问题:不知道是什么原因,请高手帮忙解答一下。。。 warning: (NETFILTER_XT_MATCH_REALM) selects NET_CLS_ROUTE which has unmet direct dependencies (NET & ...… 查看全部问答∨ |