程序思路与缺陷参考:51单片机(AT89C52)矩阵键盘检测程序
#include<iom16v.h>
typedef unsigned char uchar;
typedef unsigned int uint;
#define dula_h PORTD|=0x01
#define dula_l PORTD&=0xfe
#define wela_h PORTD|=0x02
#define wela_l PORTD&=0xfd
#define keyport PORTB
#define keypin (PINB)
#define keydre DDRB
#define keystate0 0 //按键确认状态
#define keystate1 1 //按键无动作状态
char keystate=1; //按键状态初始化为按键无动作状态
uchar keynum=0;
void delayms(uint z) //1ms
{
uint x,y;
for(x=z;x>0;x--)
for(y=157;y>0;y--);
}
uchar table[]={ //共阳数码管
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
void smg(void)
{
dula_l;
wela_l;
PORTC=0x01;
wela_h;
wela_l;
PORTC=table[keynum];
dula_h;
dula_l;
delayms(1);
PORTC=0x02;
wela_h;
wela_l;
PORTC=table[keynum];
dula_h;
dula_l;
delayms(1);
PORTC=0x04;
wela_h;
wela_l;
POR