⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text1.c

📁 基于80c51的16*16矩阵键盘
💻 C
字号:
#include "reg51.h"
#define KEY P1 
unsigned char key_code,count=0,key_value=0,i=0;
unsigned char LED_discode[]={ 0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned char disbuf[]={0,0};
unsigned char LED_bitcode[]={0x01,0x02};

//*****************************************************************************************************************
void manage_key1(void)
{   key_value=1;  }
void manage_key2(void)
{   key_value=2;  }
void manage_key3(void)
{   key_value=3;  }
void manage_key4(void)
{   key_value=4;  }
void manage_key5(void)
{   key_value=5;  }
void manage_key6(void)
{   key_value=6;  }
void manage_key7(void)
{   key_value=7;  }
void manage_key8(void)
{   key_value=8;  }
void manage_key9(void)
{   key_value=9;  }
void manage_key10(void)
{   key_value=10;  }
void manage_key11(void)
{   key_value=11;  }
void manage_key12(void)
{   key_value=12;  }
void manage_key13(void)
{   key_value=13;  }
void manage_key14(void)
{   key_value=14;  }
void manage_key15(void)
{   key_value=15;  }
void manage_key16(void)
{   key_value=16;  }
//**********************************************************************************************
bit judge_hitkey()
{   unsigned char scancode;
    scancode=0x0f;
    KEY=scancode;
	if(KEY==0x0f) return 0;
	else return 1;
}
//******************************************
unsigned char key_scan()
{   unsigned char keycode,scancode;
    scancode=0xfe;
    while(scancode!=0xef)
	{    KEY=scancode;
	     keycode=KEY;
	     if((KEY&0xf0)!=0xf0) break;
		 scancode=~((~scancode)<<1);
	}
	keycode=~keycode;
	return(keycode);
}
//******************************************
void key_manage(unsigned char keycode_1)
{   switch(keycode_1)
    {    case 0x11:manage_key1();break;
	     case 0x12:manage_key2();break;
         case 0x14:manage_key3();break;
	     case 0x18:manage_key4();break;
	     case 0x21:manage_key5();break;
	     case 0x22:manage_key6();break;
	     case 0x24:manage_key7();break;
         case 0x28:manage_key8();break;
	     case 0x41:manage_key9();break;
	     case 0x42:manage_key10();break;
	     case 0x44:manage_key11();break;
	     case 0x48:manage_key12();break;
	     case 0x81:manage_key13();break;
	     case 0x82:manage_key14();break;
	     case 0x84:manage_key15();break;
	     case 0x88:manage_key16();break;
		 default:break;
	 }
}
//******************************************
void display(void)
{    
     if(i==0)
     {  P3=0x00;
	    P2=LED_discode[disbuf[0]];
	    P3=0x01;
		i=1;
	 }
	 else  {   P3=0x00;
	           P2=LED_discode[disbuf[1]];
	           P3=0x02;
			   i=0;
			}
}
//*******************************************
void timer1_ger()
{    TMOD=0x20;
     TR1=1;
	 TH1=0x06;
	 TL1=0x06;
     ET1=1;
	 EA=1;
}
//*********************************************
void main(void)
{ timer1_ger();
  while(1);
}
//****************************************************
void timer1_scankey(void) interrupt 3
{    ++count;
     disbuf[0]=key_value%10;
	 disbuf[1]=key_value/10;
	 display();	 
     if(count%10==0)
	 {    switch(count/10)
	      {    case 1:if(judge_hitkey()==0)
		              {   count=0;
					      break;
					  }
			   case 2:break;
			   case 3:if(judge_hitkey()==0) count=0;
					  else  key_code= key_scan();
					  break;
			   default:if(judge_hitkey()==0)
			           {   key_manage(key_code);
					       count=0;
					   }
		   }
           
	  }
}

⌨️ 快捷键说明

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