K1~K16,按下Ki ,和二进制i对应的小灯亮起。
矩阵按键
P0.7 | P0.6 | P0.5 | P0.4 | P0.3 | P0.2 | P0.1 | P0.0 |
暗 | 暗 | 暗 | 暗 | 暗 | 暗 | 暗(高电平 1) | 亮(低电平 0) |
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 |
1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 |
1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 |
1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 |
key.h
#ifndef _KEY_H_
#define _KEY_H_
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef char int8;
typedef int int16;
sbit KeyIn4 = P2^7;
sbit keyIn3 = P2^6;
sbit KeyIn2 = P2^5;
sbit keyIn1 = P2^4;
sbit KeyOut1 = P2^3;
sbit keyOut2 = P2^2;
sbit KeyOut3 = P2^1;
sbit keyOut4 = P2^0;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
#endif
key.c
#include<reg51.h>
#include "key.h"
void delay()
{
uint16 i = 1000;
while(i--);//roughly delay
}
main()
{
P0 = 0xff;
ENLED = 0;ADDR3=1;
ADDR0 = 0; ADDR1 = 0; ADDR2 = 0;
while(1)
{
KeyOut1 = 0;KeyOut2 = 1;KeyOut3 = 1;KeyOut4 = 1;
if(!KeyIn1){
delay();
P0 = ~1;
}
if(!KeyIn2){
delay();
P0 = ~2;
}
if(!KeyIn3){
delay();
P0 = ~3;
}
if(!KeyIn4){
delay();
P0 = ~4;
}
while(!KeyIn1 || !KeyIn2 || !KeyIn3 || !KeyIn4);
KeyOut1 = 1;KeyOut2 = 0;KeyOut3 = 1;KeyOut4 = 1;
if(!KeyIn1){
delay();
P0 = ~5;
}
if(!KeyIn2){
delay();
P0 = ~6;
}
if(!KeyIn3){
delay();
P0 = ~7;
}
if(!KeyIn4){
delay();
P0 = ~8;
}
while(!KeyIn1 || !KeyIn2 || !KeyIn3 || !KeyIn4);
KeyOut1 = 1;KeyOut2 = 1;KeyOut3 = 0;KeyOut4 = 1;
if(!KeyIn1){
delay();
P0 = ~9;
}
if(!KeyIn2){
delay();
P0 = ~10;
}
if(!KeyIn3){
delay();
P0 = ~11;
}
if(!KeyIn4){
delay();
P0 = ~12;
}
while(!KeyIn1 || !KeyIn2 || !KeyIn3 || !KeyIn4);
KeyOut1 = 1;KeyOut2 = 1;KeyOut3 = 1;KeyOut4 = 0;
if(!KeyIn1){
delay();
P0 = ~13;
}
if(!KeyIn2){
delay();
P0 = ~14;
}
if(!KeyIn3){
delay();
P0 = ~15;
}
if(!KeyIn4){
delay();
P0 = ~16;
}
while(!KeyIn1 || !KeyIn2 || !KeyIn3 || !KeyIn4);
}
}