基於51微控制器的矩陣按鍵

ssd風格發表於2020-10-06

矩陣按鍵數碼管

選用晶片AT89S52
功能:16個矩陣按鍵分別對應0~F,在數碼管顯示。

#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;

u16 i,j;
u16 k=0;
#define jk P1
#define smg P0
u8 code smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};	 //數碼管顯示0-F

void delayms(u16 ms)			  //毫秒延時
{
	for(i=0;i<ms;i++)
	{
		for(j=115;j>0;j--);
	}
}

void key_scan()										//按鍵掃描
{
	jk=0xf0;									   //先給行和列分別賦值高低電平,這樣按下後才能檢測到
	if(jk!=0xf0)
	{
		delayms(20);
		if(jk!=0xf0)
		{
			jk=0xf0;
			switch(jk)							   //先掃描確定是哪一列
			{
				case(0xe0):k=0;break;
				case(0xd0):k=1;break;
				case(0xb0):k=2;break;
				case(0x70):k=3;break;
			}
			jk=0x0f;
			switch(jk)							   //再確定是哪一行,由此確定具體按鍵
			{
				case(0x0e):k=k;break;
				case(0x0d):k=k+4;break;
				case(0x0b):k=k+8;break;
				case(0x07):k=k+12;break;
			}	
		}
	}	
}

void main()
{
	P2=0xfe;
	while(1)
	{
		key_scan();
		smg=smgduan[k];	
	}
}

相關文章