51单片机实现简易计算器

2 篇文章 0 订阅
1 篇文章 0 订阅

本来做出来之后时间也是比较久了,具体代码的意义我暂时没有再回看,给标注出来,相信读者也是看了就明白,主要是当初在调试折腾的过程需要下一些功夫,因为当时是初学者,完成慢,成品也不好,还请多多包涵。

功能概述

这里使用的是普中的HC6800-ES V2.0开发板(根据B站up主江科大自化协的教程学习,讲得很好,他用的是这块板子),count1跟count2用的都是unsigned char的类型,结果也需要是unsigned char(太大了就溢出了所以这里都限制着,只能计算比较小的数),功能有加、减、乘、除、退格、清零(其实就是复位)。
 

代码实现

主要代码块如下所示,LCD屏的驱动用的是开发板资料带的,特别说明这里“10”对应的是数字0,“11”对应退格功能。

void main()
{
	unsigned char num;
	unsigned char count1=0,count2=0,flag=0,flag2=0;
	unsigned int sum1=0,sum2=0,sum=0;
	LCD_Init();
	while(1)
	{
		num = MatrixKey();
		if(num)
		{
			if(num>=1&&num<=11&&count1<5&&flag==0)
			{
				if(num==11){sum1=sum1/10;count1--;if(count1<0){count1=0;}}
				else if(num==10){sum1=sum1*10;count1++;}
				else {sum1=sum1*10+num;count1++;}
				LCD_ShowNum(1,1,sum1,5);
			}
			
			if(num>=1&&num<=11&&count2<5&&flag==1)
			{
				if(num==11){sum2=sum2/10;count2--;if(count2<0){count2=0;}}
				else if(num==10){sum2=sum2*10;count2++;}
				else {sum2=sum2*10+num;count2++;}
				LCD_ShowNum(1,7,sum2,5);
			}
			if('+'==num)
			{
				LCD_ShowChar(1,6,'+');
				flag=1;
				flag2='+';
			}
			if('-'==num)
			{
				LCD_ShowChar(1,6,'-');
				flag=1;
				flag2='-';
			}
			if('x'==num)
			{
				LCD_ShowChar(1,6,'x');
				flag=1;
				flag2='x';
			}
			if('/'==num)
			{
				LCD_ShowChar(1,6,'/');
				flag=1;
				flag2='/';
			}
			if('='==num)
			{
				count2=5;
				if(flag2=='+'&&sum2!=0){sum=sum1+sum2;LCD_ShowChar(2,1,'=');LCD_ShowNum(2,2,sum,5);}
				if(flag2=='-'&&sum2!=0){sum=sum1-sum2;LCD_ShowChar(2,1,'=');LCD_ShowNum(2,2,sum,5);}
				if(flag2=='x'&&sum2!=0){sum=sum1*sum2;LCD_ShowChar(2,1,'=');LCD_ShowNum(2,2,sum,5);}
				if(flag2=='/'&&sum2!=0){sum=sum1/sum2;LCD_ShowChar(2,1,'=');LCD_ShowNum(2,2,sum,5);}
				if(flag2=='+'&&sum2==0){sum=sum1;LCD_ShowChar(2,1,'=');LCD_ShowNum(2,2,sum,5);}
				if(flag2=='-'&&sum2==0){sum=sum1;LCD_ShowChar(2,1,'=');LCD_ShowNum(2,2,sum,5);}
				if(flag2=='x'&&sum2==0){sum=0;LCD_ShowChar(2,1,'=');LCD_ShowNum(2,2,sum,5);}
				if(flag2=='/'&&sum2==0){LCD_ShowString(2,1,"ERROR");}
			}
		}
	}
}

 

相关链接

b站视频,功能实现之效果:
51单片机实现简单计算器----bilibili弹幕网

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
51单片机计算器程序主要由三部分组成:主程序、按键扫描程序和LCD1602显示程序。其中,主程序是整个计算器程序的核心,负责接收按键输入并进行相应的运算操作。按键扫描程序用于检测键盘输入,判断某一列或行是否有按键按下,并确定是哪一个键按下。LCD1602显示程序则用于将计算结果或其他相关信息显示在液晶屏上。 在51单片机计算器程序中,采用了非编码键盘作为输入设备。这种键盘扫描程序的优点是节省IO口,通过判断某一列或行是否有按键按下,确定按下的键的位置。程序效率高,每次扫描占用CPU时间最短,无论有键按下还是无键按下,都能在很短的时间内完成一次扫描。 在计算器程序中,可以进行简单的加减乘除运算,最大可以计算9999乘以9999的结果。通过使用proteus仿真软件,可以对计算器进行仿真测试。 在设计硬件电路方面,简易计算器采用了三部分电路模块构成:键盘模块电路、LCD1602液晶显示模块和以51单片机作为控制核心。同时,设计中还需要使用一系列元件,如1602液晶、STC89C51单片机、排针、电阻、电容等等。 综上所述,51单片机计算器程序包括主程序、按键扫描程序和LCD1602显示程序,采用非编码键盘作为输入设备,可以进行简单的加减乘除运算,最大可以计算9999乘以9999的结果,并使用proteus仿真软件进行测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Oriental Son

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值