📄 keyporcess.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 + -