矩阵键盘控制秒表
代码
#include<reg51.h>
#define uchar unsigned char
//声明七节显示器驱动信号阵列(共阳)
uchar code tab[10]={
0xc0, 0xf9, 0xa4, 0xb0, 0x99, // 数字0-4
0x92, 0x83, 0xf8, 0x80, 0x98 }; // 数字5-9
uchar key1,key3,temp;
//延时子程序
void delay(int x){
int i,j;
for (i=0;i<x;i++)
for (j=0;j<120;j++);
}
void MatrixKey()
{
P1=0xff;
P1=0xfe; //开始扫描第1行
temp=P1; //读P1口按键
temp=temp & 0xf0; //判断高4位是否有0,
if (temp!=0xf0) //若temp不等于0x0f,说明确实有键按下
{
temp=P1; //读取P1口按键,开始判断键值
switch(temp)
{
case 0xde:key1=0;break;
case 0x7e:key3=0;break;
}
}
}
void main(){
P0=0xff;
P1=0xff;
P2=0xff;
key1=1;
key3=1;
while(1)
{
uchar i;
key1=1;
key3=1;
MatrixKey(); //调矩阵按键扫描函数
if(key1==0){
for(i = 0; i < 100; i++){
P0 = tab[i/10];
P2 = tab[i%10];
delay(100);
if(P1==0xbe)break;
}
}
if(key3 == 0){
P0 = tab[0];
P2 = tab[0];
}
}
}