main.c
#include<reg52.h>
#include<matrix_key.h>
u8 cc_smg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void main()
{
u8 key=0;
smg_a_dp_port=0x40;
while(1)
{
key=key_matrix_flip_scan();
if(key!=0)
smg_a_dp_port=cc_smg_code[key-1];
}
}
delay.c
#include<matrix_key.h>
void delay_10us(u16 ten_us)
{
while(ten_us--);
}
flip.c
#include<reg52.h>
#include<matrix_key.h>
u8 key_matrix_flip_scan(void)
{
u8 key_value=0;
KEY_MATRIX_PORT=0x0f;//test column
if(KEY_MATRIX_PORT!=0x0f)
{
delay_10us(1000);//Ïû¶¶
if(KEY_MATRIX_PORT!=0x0f)
{
//²âÊÔÁÐ
KEY_MATRIX_PORT=0x0f;
switch(KEY_MATRIX_PORT)
{
case 0x07: key_value=1;break; //first column
case 0x0b: key_value=2;break; //second column
case 0x0d: key_value=3;break;
case 0x0e: key_value=4;break;
}
//²âÊÔÐÐ
KEY_MATRIX_PORT=0xf0;
switch(KEY_MATRIX_PORT)//test row
{
case 0x70: key_value=key_value;break; // first column 1234
case 0xb0: key_value=key_value+4;break;//second column 5678
case 0xd0: key_value=key_value+8;break;
case 0xe0: key_value=key_value+12;break;
}
while(KEY_MATRIX_PORT!=0xf0);
}
}
else
key_value=0;
return key_value;
}
matrix.h
#ifndef __matrix_key_h__
#define __matrix_key_h__
#define u8 unsigned char
#define u16 unsigned int
#define KEY_MATRIX_PORT P1
#define smg_a_dp_port P0
void delay_10us(u16 ten_us);
u8 key_matrix_flip_scan(void);
#endif