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

📄 keyporcess.c

📁 51的计算器很好的啊
💻 C
字号:
//*************************************************************************************************
//*************************************************************************************************
//**<程序名>:按键处理子函数																 	 **
//**<功能>:当有外部中断0时调用此函数,获得键码,进行相应处理。								     **
//*************************************************************************************************
//*************************************************************************************************


//*************************************************************************************************
//*																								  *
//*			 ******************************头文件及宏定义**************************				  *
//*																								  *
//*************************************************************************************************
#include <at89x51.h>
#include "Calculator.h"


//*************************************************************************************************
//*																								  *
//*			  ********************************全局变量******************************			  *
//*																								  *
//*************************************************************************************************
extern bit b_ClockStart;			//定时器0显示标志。

extern unsigned long ul_Number;		//LCE显示数据,LCD实时显示该数字。

extern bit b_KeyShock;	  			//键盘防抖动标志位。

unsigned long ul_TimeTemp;			//暂停状态技计数存。


//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<工作模式(默认为计算器模式)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
bit b_WorkMode=0;					 //0--计算器模式;
									 //1--计时模式。
					  			 

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<计时工作状态标志位>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>									//b_CountStart	|	b_CountPause
									//		0		|		0			停止状态
bit b_CountStart=0;					//		1		|		0			计时状态
bit b_CountPause=0;					//		1`		|		1			暂停状态
								    //		0		|		1			未定义

//****************************************************************************************************
//****************************************************************************************************


void vTimer(unsigned char ucKeyCode);			//计时器处理函数。


//*************************************************************************************************
//*																								  *
//*		 ********************************按键处理函数主函数******************************		  *
//*																								  *
//************************************************************************************************* 
void vKeyProcess(unsigned char ucKeyCodeTemp)
{
	if(b_WorkMode==1)
		vTimer(ucKeyCodeTemp);			//当工作模式为计时模式时调用计时器处理函数。
	else 
		{	
		vCalculator(ucKeyCodeTemp);	    //当工作模式为计算器模式时调用计算器处理函数。
		b_KeyShock=1;
		}

}


//*************************************************************************************************
//*																								  *
//*		 ********************************计时状态处理函数******************************			  *
//*																								  *
//************************************************************************************************* 
void vTimer(unsigned char ucKeyCode)
{
	switch(ucKeyCode)
		{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<当按下“NO/C”时执行>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		case 41: 
				if((b_CountStart|b_CountPause)==0)				//00:如果是停止状态则开始。
					{
					ul_Number=0;								//初始化记时值为0.
					b_CountStart=1;								//重设标志位,改为开始状态;
					b_ClockStart=1;								//开始计时;
					}
				else if((b_CountStart&b_CountPause)==1) 		//11:如果是暂停状态则恢复为开始状态。
						{
						ul_Number=ul_TimeTemp;					//初始化初值为暂存的值。
						b_CountPause=0;							//重设标志位,改为开始状态。
						b_ClockStart=1;							//开始计时。
						}
					 else if((b_CountStart=1&(!b_CountPause))==1)	//10 :如果是开始状态则暂停止。
					 		{
							b_CountStart=0;							//重设标志位,改为停止状态。
							b_ClockStart=0;							//停止计时。
							ul_Number=0;							//恢复计时前状态。
							}
				break;						  
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<当按下“=”时执行>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		case 43: 
				if(b_CountStart==1)								//如果是开始或暂停状态则进行处理,
					{											//否则不处理。
					if(b_CountPause==0)							
						{										//保存计时数值。
						b_CountPause=1;							//如果是开始状态则改为暂停状态。
						ul_TimeTemp=ul_Number;					
						b_ClockStart=0;							//停止计时。
						}
					else
						{												    
						 b_CountPause=0;						//如果是暂停状态则改变为进行状态。
						 ul_Number=ul_TimeTemp;					//给计时器赋初值为暂停前的值。
						 b_ClockStart=1;						//继续暂停前的计时。
						}
					}
				else 
					{
					b_WorkMode=0;		//如果在停止计时状态按下“=”键便会切换到计算器模式。
					b_KeyShock=1;
					}
				break;						 

		default:break;
		}	
}

⌨️ 快捷键说明

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