main.c

来自「基于单片机的电子计算器的硬件原理图和程序」· C语言 代码 · 共 154 行

C
154
字号

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

		

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


#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 + =
减小字号Ctrl + -
显示快捷键?