楼主这个电路没有多少实际意义。矩阵键盘通过MCU直接控制16个端口驱动LED更合理。不过用这个方式练练手也未尝不可。给你一个示例参考。
![]()
|
![]() ![]() |
你的程序是否需要识别多按键同时按下? 加了4067就不行了。 |
,真是太简单。。。给你一个例子自己看看吧 ************************************************************************************** */ #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; #define GPIO_DIG P0 #define GPIO_KEY P1 u8 KeyValue; //用来存放读取到的键值 u8 code smgduan[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//显示0~F的值 /******************************************************************************* * 函 数 名 : delay * 函数功能 : 延时函数,i=1时,大约延时10us *******************************************************************************/ void delay(u16 i) { while(i--); } /******************************************************************************* * 函 数 名 : KeyDown * 函数功能 : 检测有按键按下并读取键值 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void KeyDown(void) { char a=0; GPIO_KEY=0x0f; if(GPIO_KEY!=0x0f)//读取按键是否按下 { delay(1000);//延时10ms进行消抖 if(GPIO_KEY!=0x0f)//再次检测键盘是否按下 { //测试列 GPIO_KEY=0X0F; switch(GPIO_KEY) { case(0X07): KeyValue=0;break; case(0X0b): KeyValue=1;break; case(0X0d): KeyValue=2;break; case(0X0e): KeyValue=3;break; } //测试行 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)) //检测按键松手检测 { delay(100); a++; } } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { while(1) { KeyDown(); //按键判断函数 GPIO_DIG=~smgduan[KeyValue]; // } } |
两条一个数组 |
一个按键对应一个LED,这是最简单的程序。 |
太简单了以致于都不想回复,16个按键值对应16个LED亮,看我博客矩阵键盘定义的值为0-15,把0-15+1送给P2的端口,不过电路图引脚接法要改一下,X0-3要对应P20-3,电路图只接2个引脚是不够的。如果亮相反的话,可以把值取反送P2。 |
太简单了以致于都不想回复,16个按键值对应16个LED亮,看我博客矩阵键盘定义的值为0-15,把0-15+1送给P2的端口,不过电路图引脚接法要改一下,X0-3要对应P20-3,电路图只接2个引脚是不够的。 |
顶一下 |
单刀16掷开关4067,矩阵键盘1-16按键,按下对应的键位通对应的通路 |
看我帖子里面 |