【STM32单片机】简易计算器设计


一、功能简介

本项目使用STM32F103C8T6单片机控制器,使用动态数码管模块、矩阵按键、蜂鸣器模块等。

主要功能:
系统运行后,数码管默认显示0,输入对应的操作数进行四则运算,支持最大8位显示,支持显示小数点后2位数。


二、软件设计

/*
作者:嗨小易(QQ:3443792007)

*/


//将整数各位取出存放数组
//num:转换的整数
//buf:转换后存储到数组内
//返回值:整数的长度
u8 int_to_array(u32 num,u8 buf[])
{
	u8 i=0;
	u8 tempbuf[SMG_SHOW_BITNUM];
	int j=0;
	u8 cnt=0;

	if(num!=0)//传入的数据不为0
	{
		while(num!=0)
		{
			tempbuf[i]=num%10;//将各个位的数赋值于数组tempbuf[i]
			num/=10;//现在数组tempbuf[i]记录的是各个位上的数的反序
			i++;//i记录这个数是几位数		
		}
		for(j=i-1;j>=0;j--)
		{
			buf[cnt++]=gsmg_code[tempbuf[j]];	
		}	
	}
	else//传入的数据为0
		buf[cnt++]=gsmg_code[0];	
	
	return cnt;
}

//计算结果并显示
void get_result_show(void)
{
	u8 smgbuf[SMG_SHOW_BITNUM];
	u8 bitnum=0;
	u8 key=0;
	u8 buf[3];//缓存显示小数的数据

	while(1)
	{
		key=KEY_Matrix_Scan();
		if(key==14)	//清除操作
		{
			sys_ctrl.equal=0;
			sys_ctrl.sign=0;
			sys_ctrl.curNum=0;
			sys_ctrl.preNum=0;
			sys_ctrl.dot=0;
			break;
		}
		
		//等号键、计算结果
		if(sys_ctrl.equal==SIGN_EQUAL)
		{
			
			switch(sys_ctrl.sign)
			{
				case SIGN_ADD: sys_ctrl.result=sys_ctrl.preNum+sys_ctrl.curNum;break;
				case SIGN_MIN: 
					if(sys_ctrl.preNum<sys_ctrl.curNum)
						sys_ctrl.result=sys_ctrl.curNum-sys_ctrl.preNum;
					else
						sys_ctrl.result=sys_ctrl.preNum-sys_ctrl.curNum;
					break;
				case SIGN_MUL: sys_ctrl.result=sys_ctrl.preNum*sys_ctrl.curNum;break;
				case SIGN_DIV: 
					if(sys_ctrl.curNum!=0)
						sys_ctrl.result=(float)sys_ctrl.preNum/sys_ctrl.curNum;
					if(sys_ctrl.result!=(int)sys_ctrl.result)//有小数,保留小数后2位
					{
						sys_ctrl.result=sys_ctrl.result*100;
						sys_ctrl.dot=2;
					}
					break;
			}
			bitnum=int_to_array(sys_ctrl.result,smgbuf);
			if(sys_ctrl.dot)//有小数显示
			{
				if(sys_ctrl.result<10)//放大100倍结果小于10,比如0.01
				{
					buf[0]=0x3f|0x80;
					buf[1]=0x3f;
					buf[2]=smgbuf[0];
					SMG_Display(buf,SMG_SHOW_BITNUM-1-bitnum);			
				}
				else if(sys_ctrl.result<100)//放大100倍结果小于100,比如0.12
				{
					buf[0]=0x3f|0x80;
					buf[1]=smgbuf[0];
					buf[2]=smgbuf[1];
					SMG_Display(buf,SMG_SHOW_BITNUM-bitnum);	
				}
				else
				{
					smgbuf[bitnum-1-sys_ctrl.dot]|=0x80;
					SMG_Display(smgbuf,SMG_SHOW_BITNUM+1-bitnum);	
				}						
			}
			else	//无小数显示	
				SMG_Display(smgbuf,SMG_SHOW_BITNUM+1-bitnum);
			sys_ctrl.sign=0;					
		}
		else
		{
			sys_ctrl.equal=0;
			break;
		}	
	}
}






三、实验现象

B站演示视频:https://space.bilibili.com/444388619
在这里插入图片描述
在这里插入图片描述


联系作者

专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于stm32的简易计算器课程设计可以让学生对stm32单片机硬件和软件的基本原理有更深的理解和应用。该课程设计的目标是让学生能够使用stm32单片机完成简单的计算器功能,包括加、减、乘、除以及开方等。 在课程设计中,学生可以通过学习stm32单片机的基本原理和编程语言,实现计算器的各项功能,并对计算器的界面和交互进行优化和美化。课程设计中也可以加入一定的算法和数据结构的知识,以提高计算器的功能和性能。 此外,课程设计还可以引导学生对于计算器的不同方面进行改进和升级,例如增加复杂的科学计算功能、加入图形化界面和触摸屏交互等等。这些拓展功能可以让学生在不断挑战自我的过程中,提高自己的编程能力同时也创造更为实用的计算器应用。 总而言之,基于stm32的简易计算器课程设计可以让学生在知识与技能上得到全面提升,并且学以致用,实现实际应用。同时,这也是一种非常有趣和充满挑战的计算机应用课程设计,可以激发学生的兴趣和创造力,开拓学生的思维。 ### 回答2: 基于STM32的简易计算器课程设计是一项很有意义的项目。这个项目可以让学生更好地理解计算器的原理和设计,同时也可以让学生深入理解STM32单片机的原理和应用。 在这个项目中,学生需要根据计算器的基本操作设计相应的功能模块,包括加、减、乘、除等基本计算操作。同时,学生需要学会如何使用STM32单片机进行编程,实现计算器的各个功能。 对于这个项目,学生需要具备一定的电子电路、计算机编程等方面的基础知识。同时,学生也需要具备较强的动手实践能力,在实践中积累经验,不断提高自己的技能水平。 总的来说,基于STM32的简易计算器课程设计具有很强的实践性和教育意义,可以帮助学生更好地掌握计算器STM32单片机的原理和应用,为他们的未来学习和工作打下坚实的基础。 ### 回答3: STM32是一种高性能的32位微控制器,由于其强大的功能和广泛的应用,成为了制作计算器的理想选择。本次课程设计采用STM32作为处理器,实现一个简易计算器。 首先,需要考虑到设计的目的和要求。本次设计的目的是为了教学和演示,因此,计算器需要具备基本的加减乘除运算和求幂运算功能。同时,计算器需要具备应用性,例如可以处理小数运算和负数运算。另外,界面设计也是一个需要重点考虑的问题。本次设计采用LCD显示屏作为计算器的界面,通过按键输入数字和符号实现相应的运算,并将结果显示在屏幕上。 接下来,需要对硬件设计进行规划。本次设计使用STM32F103C8T6作为主控芯片,具有丰富的外设资源,如多个通道的定时器、ADC采样模块、I2C总线接口、SPI接口等。同时,还需要使用4x4矩阵键盘来进行计算器的输入操作、一个1602A液晶屏来进行输出显示。基于这些硬件资源,可以实现一个完整的计算器功能。 最后,需要进行软件开发。本次设计采用KEIL C51作为开发工具,对按键事件进行扫描和解码,通过驱动LCD显示屏进行结果输出,同时,在主控芯片上进行计算操作。具体的软件设计还需考虑到算法的实现,以及是否需要进行优化等影响计算器运行效率的因素。 综上所述,基于STM32的计算器设计可以实现基本的数学计算,具有应用性和教学意义。此外,该设计还可以通过添加新的功能或优化算法等手段进行扩展,提高计算器性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值