反转矩阵键盘.c

来自「经典的矩阵键盘程序」· C语言 代码 · 共 86 行

C
86
字号
#include<reg51.h>

#define Key P1
#define Display P2

unsigned char key;

unsigned char code LEDCODE[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};     //共阳


void delay(void);
unsigned char  keyscan();
unsigned char disp(unsigned char key);


void main(void)
{
 unsigned char keycode,num;
 while(1)
 {
 	num=keyscan();
	delay();
	keycode=disp(num);
	Display=LEDCODE[keycode];
 }
}

void delay(void)
{
 unsigned char i;
 for(i=0;i<200;i++){}
}


unsigned char  keyscan(void)
{
 unsigned char code_h;		//行扫描值
 unsigned char code_l;		//列扫描值
 Key=0xf0;
 if((Key&0xf0)!=0xf0)
 {
 	delay();
	if((Key&0xf0)!=0xf0)
	{
		code_h=0xFE;		 		//扫描第一列
		while((code_h&0x10)!=0xf0)
		{
			Key=code_h;
			if((Key&0xf0)!=0xf0)
			{
				code_l=(Key&0xf0|0x0f);
				return((~code_h)+(~code_l));	
			}
		else
			code_h=(code_h<<1)|0x01;
		}
	}
 }
}


unsigned char disp(unsigned char temp)
{
 switch(temp)   							 							
    {
	  case 0x11: temp=0;break;
	  case 0x12: temp=1;break;
	  case 0x14: temp=2;break;
	  case 0x18: temp=3;break;
	  case 0x21: temp=4;break;
	  case 0x22: temp=5;break;
	  case 0x24: temp=6;break;
	  case 0x28: temp=7;break;
  	  case 0x41: temp=8;break;
  	  case 0x42: temp=9;break;
	  case 0x44: temp=10;break;
	  case 0x48: temp=11;break;
	  case 0x81: temp=12;break;
	  case 0x82: temp=13;break;
	  case 0x84: temp=14;break;
	  case 0x88: temp=15;break;
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?