|
最近在学习《例说51单片机》第三版,在第五章中学习4X4键盘的用法,程序就是按书上的程序来的,都没法显示。稍微调整了下,就只能显示0,4,8,C。本来是要显示0-E的,可其余的都显示不出来。代码和电路图如下,麻烦各位帮我看看程序哪里有问题,非常感谢。
#include <reg51.h>
#define SEG7P P0
#define KEYP P2
#define u8 unsigned char
u8 code TAB[] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99,
0x92, 0x82, 0xf8, 0x80, 0x98,
0xa0, 0x83, 0xa7, 0xa1, 0x84,
0x8e, 0xbf, 0x7f
};
u8 disp = 0x7f;
u8 scan[] = { 0xef, 0xdf, 0xbf, 0x7f};
void debouncer( void )
{
u8 i;
for( i = 2000; i > 0; i -- );
}
void delay1ms( u8 x )
{
u8 i, k;
for( i = x; i > 0; i -- )
for( k = 128; k > 0; k -- );
}
void scanner( void )
{
u8 col, row;
u8 rowkey, kcode;
for( col = 0; col < 4 ; col ++ )
{
KEYP = scan[col];
SEG7P = disp;
if( KEYP != scan[ col ] )
{
debouncer( );
if( KEYP != scan[ col ] )
{
//debouncer( );
rowkey = ((~KEYP) & 0x0f);
if( 0x01 == rowkey )
row = 0;
else if( 0x02 == rowkey )
row = 1;
else if( 0x04 == rowkey )
row = 2;
else if( 0x08 == rowkey )
row = 3;
kcode = (4* col + row);
disp = TAB[ kcode ];
SEG7P = disp;
}
}
}
delay1ms(4);
}
void main( void )
{
while( 1 )
{
scanner( );
}
}
|
|