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

📄 scankeybord.c

📁 属于键盘扫描
💻 C
字号:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void scankey();
void display(uchar key);
void delay();
void delay1();
void keyvl_deal();
sbit FENG=P3^4;
uchar keyold=0,keyp,VKEY=0xff;
uchar key_table[]={0xed,0x7e,0x7d,0x7b,
				   0xbe,0xbd,0xbb,0xde,
				   0xdd,0xdb,0x77,0xb7,
				   0xee,0xd7,0xeb,0xe7};
uchar value_table[]={0x3f,0x06,0x5b,0x4f,
                     0x66,0x6d,0x7d,0x07,
					 0x7f,0x6f,0x77,0x7c,
					 0x39,0x5e,0x79,0x71};
void main()
   {
	  while(1)			
	  { 
		     scankey();
		 if(VKEY!=0xff)
		 {
			 keyold=VKEY;
			 keyvl_deal();
			 display(keyp);
		 }
	  }

   }
void scankey()
   {
	  P0=0xfe;								   //扫描第一列							   
	  VKEY=P0;								   //P0口的值赋给键值寄存器
	  if(VKEY!=0xfe)						   //如果第一列有键按下
	    return;								   //返回键值寄存器的值
	  P0=0xfd;								   //扫描第二列
	  VKEY=P0;
	  if(VKEY!=0xfd)
	    return;
	  P0=0xfb;								  	//扫描第三列
	  VKEY=P0;
	  if(VKEY!=0xfb)
	    return;
	  P0=0xf7;									//扫描第四列
	  VKEY=P0;
	  if(VKEY!=0xf7)
	    return;
	  VKEY=0xff;
   }
void keyvl_deal()
   {
	  if(keyold!=VKEY)
	    {FENG=1;
	     return;}
	  else
	    {
	  	  FENG=0;
		  for(keyp=0;keyp<16;keyp++)
		    {
			    if(VKEY==key_table[keyp])
				break;
			}
	    } 
	   
   }
void display(uchar key)
{
   int wei=0;
   while(wei<1)
   {
	   P1=wei;							//位数字送P1口
	   P2=value_table[key];				//字码送P2口
	   delay();							//延时
	   P2=0x00;
	   wei++;							//对P2口清零,防止影响下一位
   } 
}
void delay()
{
   uint i=100;
   while(i--);
}
/*void delay1()
{ 
  int i=10;
  while(i--);
}  */

⌨️ 快捷键说明

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