利用中断实现的4*4矩阵键盘扫描

#include 
#include 
typedef unsigned char UINT8;
typedef unsigned int UINT16;

UINT8 num = 0, temp = 0, key = 16, t0 = 0, t1 = 0, shu = 0;

/* 数码管编码 */

UINT8 code table[]=
{
	0x3f,0x06,0x5b,0x4f,
	0x66,0x6d,0x7d,0x07,
	0x7f,0x6f,0x77,0x7c,
	0x39,0x5e,0x79,0x71,0x00
};

/* 初始化函数 */
void init()
{			
	P1 = 0xf0;
	/* 初始化定时器 */
	TMOD = 0x01;					/* 定时器0和定时器1同时设置为16位定时方式 */
	TH0 = (65536 - 50000) / 256; 	  // 放在高八位当中 
	TL0 = (65536 - 50000) % 256;
	EA = 1;						//开总中断
	ET0 = 1;					//开定时器0中断
	TR0 =1;						//启动定时器0
}

/* 显示函数 */
/* 按键扫描函数 */
UINT8 scan_key()
{
		P1 = 0xef;
		temp = P1;
		temp = temp&0xf0;
		if (temp != 0xf0)
		{
			temp = P1;
			switch(temp)
			{
				  case 0xee:
					   key=0;
					   break;
				  case 0xed:
					   key=1;
					   break;
				  case 0xeb:
					   key=2;
					   break;
				  case 0xe7:
					   key=3;
					   break;
				  default:					  
					  break;
			}
			P1=0xfe;
		}
		P1 = 0xdf;
		temp

你可能感兴趣的:(C语言,电子,嵌入式入门,51单片机,嵌入式,c语言,数码管,矩阵键盘,单片机)