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

📄 key.h

📁 基于51单片机的1602显示的计算器
💻 H
字号:
/************************************************************************************/
/*     程序名:44键盘代码                                                           */
/*                                                                                  */
/*     晶振:12.0 M                                        CPU型号:AT89S52         */
/*                                                                                  */
/*                                                                                  */
/*     功能描述: 44键盘代码,需将J10,J20相应的键用杜邦线连接起来                   */
/*                    									  			                */
/*        			MENU_yes  	<-  		->   		NO_back 					*/
/*         			1			2			3			+                			*/		     
/*                  4           5           6           -                           */
/*                  7           8           9           0                           */
/*                                                                                  */
/*     QQ:276193028                            			                    		*/
/*     E-mail:shenchangwei945@163.com                                               */
/*   										    									*/
/*                                                                                  */
/*                                                现代虚拟仪器仪表研究所            */
/*                                                         2007-09-15               */
/************************************************************************************/ 

#include<reg51.h>
#define uchar unsigned char

#define countend	40
#define countsub	5
#define KeyData 	P3
#define yes1     	0x11 //1
#define add1     	0x12 //2
#define sub1     	0x21 //3
#define no1      	0x22 //4
#define mul     	0x41 //5
#define six     	0x42 //6
#define five    	0x81 //7
#define four    	0x82 //8
#define dot     	0x14 //9
#define three   	0x18 //10
#define two     	0x24 //11
#define one     	0x28 //12
#define no       	0x44 //13
#define add      	0x48 //14
#define sub      	0x84 //15
#define yes      	0x88 //16
#define L 10
bit keyflag = 0;

#ifndef _KEYSCAN_
void delay(unsigned char a)      
{
    unsigned char j;                                                                                             
	while(a-- != 0)                                              
	{
	     for (j = 0; j < 125; j++);                                                             
	}                         
}
#endif

unsigned char kbscan();
void delay10ms();

uchar keyscan(void);
//*********************************
void delay(void)
{
   uchar i;
   for(i = 200;i>0;i--){;}
}

/**********************************
unsigned char keyscan(void)
{
   unsigned char i,code_l,code_h[4] = {0xfe,0xfd,0xfb,0xf7};//发送的行扫描代码
   P3 = 0xF0;
   if((P3 & 0xF0)!= 0xF0)
   {
      delay();
	  if((P3 & 0xf0)!= 0xF0)
	  { 
		 for(i = 0; i<4; i++)
		 {
		    P3 = code_h[i];
		    if((P3 & 0xF0) != 0XF0)
		    {
		       code_l = (P3 & 0xF0) | 0x0F;
			   return ((~code_h[i])+(~code_l));
		    }	 
		 }
	  }
   }
   return (0);
} 

*********此函数具有长按加速功能******************/

unsigned char keyscan(void)
{
   	unsigned char i,code_l,code_h[4] = {0xfe,0xfd,0xfb,0xf7};
   	static unsigned char keycounter = 0;
   	KeyData = 0xF0;
   	if((KeyData & 0xF0)!= 0xF0)
   	{
      	_delay(20);
	 	if((KeyData & 0xf0)!= 0xF0)
	 	{ 
			for(i = 0; i<4; i++)
			{
			    KeyData = code_h[i];
		    	if((KeyData & 0xF0) != 0XF0)
		    	{
		       		code_l = (KeyData & 0xF0) | 0x0F;
			   		if(keyflag)//不是第一次按下则执行以下程序
			   		{
			   			keycounter++;//计数器加1
			   			if(keycounter == countend)
			   			{
			   				keycounter -= countsub;//到一百了再减去
							return ((~code_h[i])+(~code_l));
			   			}
						else    
						{return 0;}  //没有到100则返回0
					}
					else  //第一次按下则执行以下程序
		    		{
						keyflag = 1;  //置标志位
						return ((~code_h[i])+(~code_l));
					}
		    	}	 
		 	}
	  	}
   	}
   	else
	{
		keyflag = 0;keycounter = 0;return (0);
	}
}

	   
void main(void)
{
   while(1)
   {
      unsigned char key;
	  P3 = 0x0f;
      key = keyscan();
      delay();
      switch(key)
      {
         case 0x11: P1 = ~0x11; break; 
     	 case 0x21: P1 = ~0x21; break;
		 case 0x41: P1 = ~0x41; break; 
     	 case 0x81: P1 = ~0x81; break;
		 case 0x12: P1 = ~0x12; break; 
     	 case 0x22: P1 = ~0x22; break;
		 case 0x42: P1 = ~0x42; break; 
     	 case 0x82: P1 = ~0x82; break;
		 case 0x14: P1 = ~0x14; break; 
     	 case 0x24: P1 = ~0x24; break;
		 case 0x44: P1 = ~0x44; break; 
     	 case 0x84: P1 = ~0x84; break;
		 case 0x18: P1 = ~0x18; break; 
     	 case 0x28: P1 = ~0x28; break;
		 case 0x48: P1 = ~0x48; break; 
     	 case 0x88: P1 = ~0x88; break;
		 default: break;
      } 
   }  
} 

⌨️ 快捷键说明

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