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

📄 keypross.c

📁 键盘处理程序,针对51系列4*4键盘扫描程序
💻 C
字号:
//按键处理程序
/*变量说明
*frist 为1代表第一位未输入
*second 为1代表第二位未输入
*adflag	为一代表按下确定键,可以启动A/D转换,输出电压
*disisten	为一表示输入为最大值10
*point		为1代表有小数点
*
*/
//#include<include.h>


void keypross(unsigned  char key)
{
	switch(key)
	{	
		case ZERO :					//按键为0
			if(first==1)
			{
				disbuff[0]=0;
				first=0;
				
			}
			else if(second==1&&first==0&&point==1)
			{
				disbuff[1]=disbuff[0];
				disbuff[0]=0;
				second=0;
			}
			else if(second==1&&first==0&&point==0&&disbuff[0]==1)  //若第一个按键为1,且无小数点则显示10
				{
					disbuff[1]=disbuff[0];
					disbuff[0]=0;
					second=0;
					disisten=1;
				}
		
		break;						//按键为1						
		case ONE :
			if(first==1)
			{
				disbuff[0]=1;
				first=0;
				firstisone=1;
			}
			else if(second==1&&first==0&&point==1)
			{
				disbuff[1]=disbuff[0];
				disbuff[0]=1;
				second=0;
			}
		
		break;


		case TWO :					//按键为2
			if(first==1)
			{
				disbuff[0]=2;
				first=0;
			}
		
		
		break;


		case THREE :				//按键为3
			if(first==1)
			{
				disbuff[0]=3;
				first=0;
			}
		
		
		break;


		case FOUR :					//按键为4
			if(first==1)
			{
				disbuff[0]=4;
				first=0;
			}
		
		break;

				
		case FIVE :							//按键为5
			if(first==1)
			{
				disbuff[0]=5;
				first=0;
			}
		
		
		break;

						
		case SIX :						//按键为6
			if(first==1)
			{
				disbuff[0]=6;
				first=0;
			}

			
		
		break;

						
		case SEVEN :				//按键为7
			if(first==1)
			{
				disbuff[0]=7;
				first=0;
			}
		
		
		break;				
		case EIGHT :			//按键为8
			if(first==1)
			{
				disbuff[0]=8;
				first=0;
			}
		
		
		break;


		case NINE :			//按键为8
			if(first==1)
			{
				disbuff[0]=9;
				first=0;
			}
	
		break;
		case POINT:				//按键为小数点
			if(first==1&&second==1)		//未按下任何键,则为0.?的模式
			{
				disbuff[1]=0;
				disbuff[0]=BLACK;
				point=1;
				second=0;
			}
			else if(first==0&&second==1)//按下一数字键,则为?.?的模式
				{
					point=1;
					disbuff[1]=disbuff[0]; 
					disbuff[0]=BLACK;
                    
					first=1;
					second=0;
				}
		
		break;
		

		case  ENTER:			//按下确定键,
				{
					adflag=1;	//置电压改变标志位
					if(first==1&&second==1)
                    {
                        disbuff[0]=0;
                        disbuff[1]=BLACK;
                    }
					if(first==0&&second==1) //第2位未输入的模式
					{   if(disbuff[0]!=0)  
					    disbuff[1]=disbuff[0];
						disbuff[0]=0;
						point=1;
						
						
					
						
					}
 					if(second==0&&first==1)	//第二位无输入的模式
					{
						
						disbuff[0]=0;
						point=1;
						first=0;
					}
					
				}
		break;

		case  CLEAR:		//按下清除健
				{
					first=1;	//清除标志位
					second=1;
					point=0;
					disisten=0;
					adflag=0;
					disbuff[0]=0;	//第一位显示为0,第二位不显示
					disbuff[1]=BLACK;
				
				}
		break;
	

		case 	STEPUP:			//按下步进,步进0.1V
		      if(count==0)
              
              

				{	
				    countflag=1;
				    if(first==1&&second==1)
                    {
                        disbuff[0]=-1;
                        disbuff[1]=0;
                        point=1;
                        second=0;
                        first=0;
                    }
					if(first==1&&second==0)    //第一位未输入的模式
					{
						disbuff[0]=0;
						point=1;
						first=0;
					
						
					}
					if(second==1&&first==0)	//第二位无输入的模式
					{  if(disbuff[0]!=0)
						disbuff[1]=disbuff[0];
						disbuff[0]=0;
						point=1;
						first=0;
						second=0;
					}
					if(disisten==1)	//在为最大值10V的模式下
						{
							disbuff[0]=-1;
							disbuff[1]=0;
							point=1;
							disisten=0;
						}
					disbuff[0]=disbuff[0]+1;   //步进处理
					   if(disbuff[0]==10)
						  {	
							disbuff[1]=disbuff[1]+1;
							disbuff[0]=0;
							if(disbuff[1]==10)
								{
									disbuff[1]=1;
									point=0;
									disbuff[0]=0;
									disisten=1;
								}
						  }
				}
						
		break;


		case 	STEPDOWN:			//步退键,步退0.1V
                if(count==0)
				{	
				    countflag=1;
					if(first==1&&second==1)	//2位都没未输入的模式
					{
						disbuff[0]=1;
						disbuff[1]=0;
						point=1;
						first=0;
						second=0;
						
						
						
						
					}
					if(second==1&&first==0)	//第二位无输入的模式
					{  if(disbuff[0]!=0)
						disbuff[1]=disbuff[0];
						disbuff[0]=0;
						point=1;
						second=0;
						first=0;
					}
             		if(disisten==1)  //在为最大值10V的模式下
						{
							disbuff[0]=10;
							disbuff[1]=9;
							disisten=0;
							point=1;
						}
					disbuff[0]=disbuff[0]-1;	//步退处理
                    
                    
					   if(disbuff[0]==0)
                       {
                       
						  disbuff[1]=disbuff[1]-1;
						  disbuff[0]=9;
						  if(disbuff[1]==-1)
                          {
                          
							 disbuff[1]=1;
							 disbuff[0]=0;
							 point=0;
							 disisten=1;
                          }
                       }
                    		 
				}
		break;
		      
	
			
				

							
	}

}

⌨️ 快捷键说明

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