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

📄 key.c

📁 基于51单片机的1602显示的计算器
💻 C
字号:
/************************************************************************************/
/*     程序名: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 Key_con 	P3
#define key_yes   	0x18 //MENU_yes
#define key_L     	0x14 //<-
#define key_R     	0x12 //->
#define key_no     	0x11 //NO_back

#define key_1     	0x28 //1
#define key_2     	0x24 //2
#define key_3      	0x22 //3
#define key_+     	0x21 //+

#define key_4      	0x48 //4
#define key_5       0x44 //5
#define key_6     	0x42 //6
#define key_-     	0x41 //-

#define key_7      	0x88 //7
#define key_8      	0x84 //8
#define key_9    	0x82 //9
#define key_0    	0x81 //0
*/
#define L 10
bit keyflag = 0;

extern void Delay_1ms(unsigned char t);
extern Key_con;
unsigned char kbscan();

uchar keyscan(void);

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

unsigned char keyscan(void)
{
   	unsigned char i,code_l,code_h[4] = {0xfe,0xfd,0xfb,0xf7};
   	static unsigned char keycounter = 0;
   	Key_con = 0xF0;
   	if((Key_con & 0xF0)!= 0xF0)
   	{
      	Delay_1ms(20);
	 	if((Key_con & 0xf0)!= 0xF0)
	 	{ 
			for(i = 0; i<4; i++)
			{
			    Key_con = code_h[i];
		    	if((Key_con & 0xF0) != 0XF0)
		    	{
		       		code_l = (Key_con & 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);
	}
}

⌨️ 快捷键说明

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