基于51单片机的简易计算器proteus仿真 数码管显示

硬件设计

链接:https://pan.baidu.com/s/1ZAxAbTe_oD_cuTvvKWxU5A
提取码:x102

仿真图: 数码管显示,支持整数加减乘除,不支持小数和负数及连续运算;
(20x3 和20÷3的结果 )
在这里插入图片描述
在这里插入图片描述

程序设计

//*************************************************************************************************
//*************************************************************************************************
//**<程序名>:计算器处理主程序,根据计算器的输入状态分派不同的函数对按键进行处理。			 	 **
//**<功能>:当b_WorkMode=0是,若有键按下则调用此函数对键码进行处理。   							 **
//*************************************************************************************************
//*************************************************************************************************


//*************************************************************************************************
//*																								  *
//*			 ******************************头文件及宏定义**************************				  *
//*																								  *
//*************************************************************************************************
#include "CalReady.h"


//*************************************************************************************************
//*																								  *
//*			  ********************************全局变量******************************			  *
//*																								  *
//*************************************************************************************************
extern unsigned long ul_Number;			 //LCE显示数据,LCD实时显示该数字。

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<工作模式(默认为计算器模式)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
extern bit b_WorkMode;					 //0--计算器模式;
										 //1--计时模式。
										 //定义在KeyProcess.c中。
unsigned char uc_ModeChange=0;

extern bit b_LCDClean;

extern unsigned char uc_ReportSymbol;


unsigned long ul_NumberOne=0;			 //第一个数
unsigned long ul_NumberTwo=0;			 //第二个数
unsigned char uc_Operator=0;			 //运算符
unsigned long ul_Result=0;				 //运算结果
unsigned char uc_NumPointer=1;			 //计算状态

//*************************************************************************************************
//*																								  *
//*		  *******************************计算器处理主函数******************************			  *
//*																								  *
//*************************************************************************************************




void vCalculator(unsigned char ucKeyCode)
{
	if(ucKeyCode==41)			 					//判断按键是不是'NO/C'。
		{
			if(uc_NumPointer==1)					//如果是‘NO/C’键则判断手机否是状态一。
				{
					if(uc_ModeChange==2)			//如果是状态一则看uc_ModeChange是不是2。
						{
							uc_ModeChange=0;		//如果是2则计时器模式。
							b_WorkMode=1;

							uc_ReportSymbol=3;		//闪烁显示:-CHAG-1。表明正在切换状态。
							b_LCDClean=1;
						}
					else
						{
							uc_ModeChange++;		//如果uc_ModeChange不是2则加一。
							ul_NumberOne=0;			//清除所有数据,将所有数据恢复到状态一。
							ul_NumberTwo=0;
							ul_Number=0;			
							uc_NumPointer=1;
						}
				}
			else
				{
				ul_NumberOne=0;						//清除所有数据,将所有数据恢复到状态一。
				ul_NumberTwo=0;
				ul_Number=0;			
				uc_NumPointer=1;
			}
		}
	else
		{							   				//如果不是“NO/C”键,首先将uc_ModeChange清零。
		uc_ModeChange=0;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<根据不同状态分派不同的键处理函数>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		switch(uc_NumPointer)
			{
			case 1:	
					vCalReadyOne(ucKeyCode);			   //进入状态一。
					break;
			case 2:
					vCalReadyTwo(ucKeyCode);			   //进入状态二。
					break;
			case 3:
					vCalReadyThree(ucKeyCode);			   //进入状态三。
					break;

			default:break;
			}
		}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值