原理图:
原理:
和独立键盘相似
/*******************************************************************************
* 实 验 名 : 矩阵键盘实验
* 使用的IO : 数码管使用P0 矩阵键盘使用P3
* 实验效果 : 显示独立键盘的按键值
* 注 意 :
*******************************************************************************/
#include <reg52.h>
#include <intrins.h>
#define GPIO_LED P2
#define GPIO_DIG P0
#define GPIO_KEY P1
#define uint unsigned int
#define uchar unsigned char
sbit K1=P3^1;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar KEY_VALUE;
unsigned char code DIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void Delay10ms();
void KeyDown();
void main()
{
LSA=0;LSB=0;LSC=0;
while(1)
{
KeyDown();
GPIO_DIG=DIG_CODE[KEY_VALUE];
}
}
void Delay10ms()
{
uchar i=38,j=130;
while(i--)
while(j--);
}
void KeyDown()
{
char n=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)
{
Delay10ms();
if(GPIO_KEY!=0x0f)
{
GPIO_KEY=0x0f;
switch(GPIO_KEY)
{
case(0x07):KEY_VALUE=0;break;
case(0x0b):KEY_VALUE=1;break;
case(0x0d):KEY_VALUE=2;break;
case(0x0e):KEY_VALUE=3;break;
}
GPIO_KEY=0xf0;
switch(GPIO_KEY)
{
case(0x70):KEY_VALUE+=0;break;
case(0xb0):KEY_VALUE+=4;break;
case(0xd0):KEY_VALUE+=8;break;
case(0xe0):KEY_VALUE+=12;break;
}
while((n<50)&&(GPIO_KEY!=0xf0))
{
Delay10ms();
++n;
}
}
}
}
原文:http://blog.csdn.net/qq_16255321/article/details/42749327