首页 > 代码库 > 单片机第8课:矩阵键盘扫描

单片机第8课:矩阵键盘扫描

JP3接P0,VCC接+5V,矩阵键盘的左边八个引脚接在P1上面。想要的结果是按第0个按键,数码管显示0,以此类推。注意,这里的数码管是共阳极的。

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[] = {0xc0, 0xf9, 0xa4, 0xb0, 
					  0x99, 0x92, 0x82, 0xf8, 
					  0x80, 0x90, 0x88, 0x83, 
					  0xc6, 0xa1, 0x86, 0x8e};
uchar code table_scan[] = {0xfe, 0xfd, 0xfb, 0xf7};
void init();
uchar temp;
void main()
{
	uint i_row;
	init();
	while(1)
	{
		for(i_row=0; i_row<4; i_row++)
		{
			P1 = table_scan[i_row];
			temp = P1;
			temp = P1 & 0xf0;
			switch(temp)
			{
				case 0xe0:
				if(i_row==0) P0 = table[0];				
				else if(i_row==1) P0 = table[4];				
				else if(i_row==2) P0 = table[8];				 
				else P0 = table[12];
					break;
				case 0xd0: 
					if(i_row==0) P0 = table[1];				
					else if(i_row==1) P0 = table[5];				
					else if(i_row==2) P0 = table[9];				 
					else P0 = table[13];
					break;
				case 0xb0: 
					if(i_row==0) P0 = table[2];				
					else if(i_row==1) P0 = table[6];				
					else if(i_row==2) P0 = table[10];				 
					else P0 = table[14];
					break;
				case 0x70: 
					if(i_row==0) P0 = table[3];				
					else if(i_row==1) P0 = table[7];				
					else if(i_row==2) P0 = table[11];				 
					else P0 = table[15];
					break;
			}
		}
		
		
	}
}

void init()
{

	P0 = 0xff;
	
}

注意,代码中没有进行消抖操作,是因为这个不消抖不会影响实验结果。


单片机第8课:矩阵键盘扫描