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

📄 51lcd1602+=

📁 51简易计算器_lcd1602
💻
字号:
/**********************************************************
按键相关处理程序
**********************************************************/
#include <reg52.h>
#include "work.h"

//=========================================================
void jiahander(void);
void jianhander(void);
void chenghander(void);
void chuhander(void);
//==========================================================
//键盘扫描函数  返回键值 1-16
//==========================================================
uchar keys(void)
{
	unsigned char recode,i,j;
	for(i=0;i<4;i++)
		{
			KEY=~(0x01<<i);
			recode=KEY>>4;
			if(recode<0x0f)
			{ 
			for(j=0;j<4;j++)
			{if(!(recode&0x01<<j))break;} 
			return (i<<2)+(j+1); //返回键值 1-16
			} 
			delayms(5); //延时5ms
		}
   return 0; //无按键返回
}
//=======================================================
//给键值定义值
//=======================================================
uchar scanzhi(void)
{
	uchar zhi,k;
	k=keys();
	switch(k)
	{
		case 0: zhi=27;break;
		case 1: zhi=7;break;
		case 2: zhi=8;break;
		case 3: zhi=9;break;
		case 4: zhi=24;break;   // /

		case 5: zhi=4;break;
		case 6: zhi=5;break;
		case 7: zhi=6;break;
		case 8: zhi=23;break;   //*

		case 9: zhi=1;break;
		case 10: zhi=2;break;
		case 11: zhi=3;break;
		case 12: zhi=22;break;   //-

		case 13: zhi=26;break;	//nc
		case 14: zhi=0;break;
		case 15: zhi=25;break;  //=
		case 16: zhi=21;break;  //+
	}
	return(zhi);
}
//============================================================
void keyscan(void)
{
	uchar key;
	key=scanzhi();
	if(key!=27)  //------有无按键
	{
		if(key<=9) //-----------------------数字输入------------------
		{
			pflag=1;
			sfflag|=0x01;
			if(qflag==1)
			{
				k=0;
				clearplay(3);
				bczs=0;
				qflag=0;
			}
			pbuffer1[k++]=0x30+key;
			bczs=bczs*10+key;
							
		} //-----------------------------------------------------------
		else if(key>20)//------符号输入	
		{
			pflag=1;
		 	switch(key)
			{
				case 21: 	jiahander();break;		//+	

				case 22:	jianhander();break;		//-

				case 23:	chenghander(); break;	//*

				case 24:	chuhander(); break;		// /

				case 25:    if(sfflag==0x01) break;
							if(qflag==1) {sfflag=0; break;  }
							czshu=bczs;jishuan();sfflag=0x01;pbuffer1[k++]='=';break; //=

				case 26:    bczs=0;jguo=0;bczshu=0;czshu=0;sfflag=0;
							clearplay(3);k=0;qflag=0;jsfuhao=0; break;		      //nc
			}			
		}
	
		while(scanzhi()!=27);	
	}
}
//=======================================================
//等号处理函数
//=======================================================
void jishuan(void)
{
    
	switch(jsfuhao)
	{
		case 1: jguo=bczshu+czshu;jchangep();break;
		case 2: jguo=bczshu-czshu;jchangep();break;
		case 3: jguo=bczshu*czshu;jchangep();break;
		case 4: jguo=bczshu/czshu;jchangep();break;
	}
	jsfuhao=0;
	qflag=1;	
}
//=======================================================
//加号处理函数
//=======================================================
void jiahander(void)
{
    if(sfflag>=0x82) return;
    if((sfflag&0x80)!=0)
		{
			k--;
			pbuffer1[k++]='+';
			jsfuhao=1;
			return;
		}
	if(qflag==1)
	{
		qflag=0;exchangexx();
		bczshu=jguo; bczs=0;pbuffer1[k++]='+';
	}
	else
	{
		bczshu=bczs;bczs=0;pbuffer1[k++]='+';
	}
	sfflag|=0x80;
	sfflag+=0x01;
	jsfuhao=1;
}
//=======================================================
//减号处理函数
//=======================================================
void jianhander(void)
{
    if(sfflag>=0x82) return;
	if((sfflag&0x80)!=0)
		{
			k--;
			pbuffer1[k++]='-';
			jsfuhao=2;
			return;
		}
	if(qflag==1)
	{
		qflag=0;exchangexx();
		bczshu=jguo; bczs=0;pbuffer1[k++]='-';
	}
	else 
	{
		bczshu=bczs;bczs=0;pbuffer1[k++]='-';	
	}
	sfflag|=0x80;
	sfflag+=0x01;
	jsfuhao=2;
}

 //=======================================================
 //乘号处理函数
 //=======================================================
void chenghander(void)
{
	if(sfflag>=0x82) return;
	if((sfflag&0x80)==0x80)
		{
			k--;
			pbuffer1[k++]='*';
			jsfuhao=3;
			return;
		}
	if(qflag==1)
	{
		qflag=0;exchangexx();
		bczshu=jguo; bczs=0;pbuffer1[k++]='*';
	}
	else
	{
		bczshu=bczs;bczs=0;pbuffer1[k++]='*';	
	}
	sfflag|=0x80;
	sfflag+=0x01;
	jsfuhao=3;
}
//=========================================================
//除号处理函数
//=========================================================
void chuhander(void)
{
	if(sfflag>=0x82) return;
    if((sfflag&0x80)!=0)
		{
			k--;
			pbuffer1[k++]='/';
			jsfuhao=4;
			return;
		}
	if(qflag==1)
	{
		qflag=0;exchangexx();
		bczshu=jguo; bczs=0;pbuffer1[k++]='/';
	}
	else
	{
    	bczshu=bczs;bczs=0;pbuffer1[k++]='/';	
	}
	sfflag|=0x80;
	sfflag+=0x01;
	jsfuhao=4;
}

⌨️ 快捷键说明

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