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

📄 main.c

📁 基于单片机的电子计算器的硬件原理图和程序
💻 C
字号:

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

		

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


#include <reg52.H>
#include "Typedef.H"
#include "UserDef.H"
#include "Keypad.H"
#include "Disp.H"


/*  全局变量 */
bit bDispRef = FALSE;		//信号灯:显示更新时间到
bit bKeyScan = FALSE;		//信号灯:键盘扫描时间到

/*  函数 */
void KeyboardDeal(void);


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

	

****************************************/
void main(void)
	{

	TMOD = 0x11;
	TH0 = (unsigned char)(KTDLY>>8);
	TL0 = (unsigned char)(KTDLY);
	TR0 = 1;
	
	ET0 = 1;

	EA = 1;

	DispCls();
	DispIntRight(0);	//显示效果示范

	while(TRUE)
		{
		/* 键盘 */
		if (bKeyScan == TRUE)
			{
			bKeyScan = FALSE;
			KeyboardDeal();
			}
		
		/* 显示扫描刷新 */
		if (bDispRef == TRUE)
			{
			bDispRef = FALSE;
			DispRef();
			}
		}
	}




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

	定时器中断程序 

**************************************/
void int_t0(void) interrupt 1 using 1
	{
	static int cnt = 0;

	TH0 = (unsigned char)(KTDLY>>8);
	TL0 = (unsigned char)(KTDLY);

	cnt ++;

	/* 键盘扫描信号灯  */
	if ((cnt % T_KEYSCAN) == 0)
		{
		bKeyScan = TRUE;
		}

	/* 显示扫描信号灯  */
	if ((cnt % T_DISPREF) == 0)
		{
		bDispRef = TRUE;
		}
	}


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

	键盘处理 

**************************************/
void KeyboardDeal(void)
	{
	static INT8U KeyVal = VK_NULL;	//按键值
//数据类型改为浮点数
//	static INT32U dispval = 0;
	static float dispval = 0;
	INT8U n;

	n = Keypad_GetKey();

	if (n != KeyVal)
		{
		KeyVal = n;
		if (n != VK_NULL)
			{
			if ((KeyVal>=VK_0)&&(KeyVal<=VK_9))
				{
				dispval *= 10;
				dispval += KeyVal - VK_0;
				}
			else if (KeyVal == VK_CLR)
				{
				DispCls();
				dispval = 0;
				}
//==============================<< 修改2 >>=====================================================================
//		补充对加、减、乘、除按键的处理,分别对现有值加2,减2,乘2、除2			
//==============================================================================================================
			else if (KeyVal == VK_ADD)
				{
				dispval += 2;
				}
			else if (KeyVal == VK_SUB)
				{
				dispval -= 2;
				}
			else if (KeyVal == VK_MUL)
				{
				dispval *= 2;
				}
			else if (KeyVal == VK_DIV)
				{
				dispval /= 2;
				}
						

//==============================<< 修改3 >>=====================================================================
//		改用DispFloat函数进行显示,并同时修改程序中其他相关部分,使其能够支持浮点数显示
//		(共2处修改,1.下面一行,2.本函数开头处dispval的数据类型定义)
//==============================================================================================================
			//DispIntRight(dispval);
			DispFloat(dispval);
			}
		}
	}

⌨️ 快捷键说明

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