#include //51单片机标准寄存器声明头文件
#include "bsp_GOG1.h" //这个头文件用于映射GOG1学习板载硬件接口
/*计算器的运算状态定义:*/
#define NoKey 0xaa //没有按键按下的状态
#define ErrKey 0xff //错误的按键状态/干扰
#define DpyErr 0x0e //错误显示状态(码表数组第14个元素:'E')
#define DpyCle 0x10 //清屏(码表数组第16个元素:0xff 关闭数码管)
#define InCount 0xf0 //有运算符输入状态
#define InErrEqu 0x0f //有等号输入状态
#define NoCountFlag 0xa5 //没有运算符的状态
/*矩阵按键 功能定义: */
#define ADD 15 //'#':加法 S15
#define SUB 12 //'C':减法 S12
#define MUL 14 //'*':乘法 S13
#define DIV 11 //'B':除法 S8
#define EQU 13 //'D':等于 S16
#define CLE 10 //'A':清除 S4
/*相关子函数的声明:*/
void delayms(unsigned int ms); //延时函数
void SegDisplay(unsigned char casebit); //数码管显示函数
unsigned char ReadKeyPad(void); //读取矩阵键盘函数
void Timer0Init(void); //定时器0初始化函数
unsigned char CheckInput(void); //计算器检查输入状态函数
void DatUnpack(unsigned int dat); //计算器数据拆分函数
bit CheckNum(unsigned int dat); //计算器数据有效性检查函数
void WarmDpy(unsigned char err); //计算器错误显示函数
void ComputeState(unsigned char dat); //计算器计算过程函数
//数码管段码表 共阳 17个元素: 0~F & 0xff
unsigned char code SegCode[17]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
unsigned int Ans; //运算结果
bit AnsFlag=0; //运算结果存在标志
bit InFlag1=0; //输入有效数字1标志
bit InFlag2=0; //输入有效数字2标志
unsigned char CountFlag; //运算符
unsigned int temp1=0,temp2=0;//输入的2个运算的数字
unsigned char DisBuff[4]={DpyCle,DpyCle,DpyCle,DpyCle};//数码管显示缓存
/*******************************************************************************
* @brief mian (简介)
* @param 无 (参数)
* @retval 无 (返回值)
******************************************************************************/
void main(void) //程序从这里开始
{
unsigned char in; //保存单个按键值的变量
CountFlag=NoCountFlag; //运算符初始状态
Timer0Init(); //定时器0初始化
while(1)
{
in=CheckInput();
while(in == NoKey) in=CheckInput(); //没有按键按下,在此等待
if(in !=ErrKey) //按键有效
{
ComputeState(in);
}
else WarmDpy(DpyErr); //按键无效,报错 'E'
}
}
/**********************************************************************