关于CT107D开发板矩阵按键前两列不工作问题的研究
2018-02-26 19:10
691 查看
CT107D开发板矩阵按键原理图如下所示:
其中CON3的1引脚和2引脚相连构成矩阵键盘。
由上述经典矩阵键盘扫描函数编写按键驱动时发现由P3^6和P3^7两个引脚控制的两列键盘无论如何按,都不产生任何效果,也许有人会认为这是开发板坏掉了,其实不然,开发板没有坏掉,只是这里的P3^6和P3^7实际上不控制该两列按键。
若使用如下代码进行矩阵键盘驱动代码的编写,则完全可以实现功能,代码如下:
让人惊讶的是,矩阵键盘的第1列和第2列竟然是有P4^4引脚和P4^2引脚控制的,这又是为何呢?
蓝桥杯开发板的矩阵键盘电路连接和普通的开发板一样,它使用的是P3口,但蓝桥杯比赛要求使用IAP转接板转接的IAP15F2k61s2芯片,这个单片机内置晶振,运行速度快,由于其没有P36,P37口,在转接板上用芯片的P42,P44口代替。因此在开发时需要改变一下控制引脚的地址。
最终测试程序参考代码下载地址:
http://download.csdn.net/download/qq_34706280/10260248
其中CON3的1引脚和2引脚相连构成矩阵键盘。
//经典矩阵按键处理函数 unsigned char keyProcess(void) { unsigned char keyTemp = 0; unsigned char keyValue = 0; unsigned char P3_Value = 0; P3 = 0xf0; if(P3 != 0xf0) { Delay15ms(); if(P3 != 0xf0) { P3_Value = P3; switch(P3_Value) { case 0xe0: { keyTemp = 1; }break; case 0xb0: { keyTemp = 2; }break; case 0xd0: { keyTemp = 3; }break; case 0x70: { keyTemp = 4; }break; } } } P3 = 0x0f; if(P3 != 0x0f) { Delay15ms(); if(P3 != 0x0f) { P3_Value = P3; switch(P3_Value) { case 0x0e: { keyValue = keyTemp; }break; case 0x0b: { keyValue = 4 + keyTemp; }break; case 0x0d: { keyValue = 8 + keyTemp; }break; case 0x07: { keyValue = 12 + keyTemp; }break; } } } return keyValue; }
由上述经典矩阵键盘扫描函数编写按键驱动时发现由P3^6和P3^7两个引脚控制的两列键盘无论如何按,都不产生任何效果,也许有人会认为这是开发板坏掉了,其实不然,开发板没有坏掉,只是这里的P3^6和P3^7实际上不控制该两列按键。
若使用如下代码进行矩阵键盘驱动代码的编写,则完全可以实现功能,代码如下:
sfr P4 = 0xC0; sbit r1=P3^0; sbit r2=P3^1; sbit r3=P3^2; sbit r4=P3^3; sbit c1=P4^4; sbit c2=P4^2; sbit c3=P3^5; sbit c4=P3^4; unsigned char keyProcess(void) { unsigned char key_value; r1=0; r2=r3=r4=1; c1=c2=c3=c4=1; if(!c1) { key_value=0; } else if(!c2) { key_value=1; } else if(!c3) { key_value=2; } else if(!c4) { key_value=3; } r2=0; r1=r3=r4=1; c1=c2=c3=c4=1; if(!c1) { key_value=4; } else if(!c2) { key_value=5; } else if(!c3) { key_value=6; } else if(!c4) { key_value=7; } r3=0; r2=r1=r4=1; c1=c2=c3=c4=1; if(!c1) { key_value=8; } else if(!c2) { key_value=9; } else if(!c3) { key_value=10; } else if(!c4) { key_value=11; } r4=0; r2=r3=r1=1; c1=c2=c3=c4=1; if(!c1) { key_value=12; } else if(!c2) { key_value=13; } else if(!c3) { key_value=14; } else if(!c4) { key_value=15; } return key_value; }
让人惊讶的是,矩阵键盘的第1列和第2列竟然是有P4^4引脚和P4^2引脚控制的,这又是为何呢?
蓝桥杯开发板的矩阵键盘电路连接和普通的开发板一样,它使用的是P3口,但蓝桥杯比赛要求使用IAP转接板转接的IAP15F2k61s2芯片,这个单片机内置晶振,运行速度快,由于其没有P36,P37口,在转接板上用芯片的P42,P44口代替。因此在开发时需要改变一下控制引脚的地址。
最终测试程序参考代码下载地址:
http://download.csdn.net/download/qq_34706280/10260248
相关文章推荐
- 关于matlab提示“警告: 矩阵为奇异工作精度” 的问题
- 关于STM32开发板Nucleo-L053板子不上电运行问题研究
- 工作中遇到的关于编程的问题
- Count(*) 为0的问题研究 --- 后来发现问题终于可以重现了,参考我后面的关于merge的文章
- 关于工作中声控功能开发(基于windows 7)的问题和总结
- 关于WORD提示“Word无法创建工作文件,请检查临时环境变量”问题的解决办法
- 关于工作问题,想听听各位建议[借光暂放一晚]
- 关于ORACLE 在windos 环境下出现ORA-12546的问题研究
- 工作中遇到的问题——mysql关于年龄,性别的统计
- 关于使用Spring声明式事务时,在类的内部方法互相调用时,Spring无法拦截内部方法调用,导致事务不起作用的问题研究
- 关于天嵌2440提供的jflash工程不能连接开发板的问题
- 关于Struts2.1.6的tiles的无法工作的问题
- 关于Delphi实现按键“按住”的问题
- 关于ADO内存泄露的今天的研究工作小结
- 关于ShareSdk分享新浪微博停止工作问题
- 关于Cookie跨域的问题研究
- 关于opengl透视矩阵问题
- 关于继承时子类重写父类方法和覆盖父类变量的若干问题 (待进一步研究)
- 关于在开发板中实现NFS自动挂载的问题
- 关于单片机按键问题总结