一. 系统概述

系统采用STM32单片机作为主控,并能够进行基本的四则运算和取余计算。通过矩阵键盘实现了一个简易的计算器功能。

在这里插入图片描述

二. 仿真概述

  1. 在进入仿真界面后,用户需要输入数字和运算方式。红框内的按键为数字按键,分别对应数字1-9,按键13对应数字0。

在这里插入图片描述

  1. 右侧按键对应加、减、乘、除和取余的功能。按键14对应取余,按键12对应除法。

在这里插入图片描述

  1. 下面以计算156乘以9为例进行演示,结果为1404。

在这里插入图片描述

三.程序设计

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "MatrixKey.h"
#include "Key.h"

uint8_t num[16]={1,2,3,10,
    4,5,6,11,
    7,8,9,12,
    13,0,15,16
};//用num数组对应矩阵上的1~16,表示计算器上的0~9
char lxc[]={"+-*/%="};//表示控制字符(10~13对应+-*/,15,16对应%=)

int main(void)
{
	OLED_Init();
	MatrixKey_Init();   
	uint8_t KeyNum,Tum;
    uint32_t sum1,sum2;
	unsigned char i,j,k;
    unsigned char mode=0;
    i=j=k=0;
    sum1=sum2=0;
    OLED_ShowString(1,1,"Please Input:");
	while (1)
	{
		KeyNum=MatrixKey_GetValue();
        if(KeyNum!=0)
        {
            Tum = num[KeyNum-1];
            if(Tum<10&&k==0&&i<3)
            { 
                i++;
                sum1*=10;
                sum1+=Tum;
                OLED_ShowNum(2,1,sum1,i);
               
            }
            if(Tum>9&&Tum<17)
            {
                k=1;
                switch(Tum)
                {
                    case 10 : OLED_ShowChar(2,4,lxc[0]);mode=1;break;
                    case 11 : OLED_ShowChar(2,4,lxc[1]);mode=2;break;
                    case 12 : OLED_ShowChar(2,4,lxc[2]);mode=3;break;
                    case 13 : OLED_ShowChar(2,4,lxc[3]);mode=4;break;
                    case 15 : OLED_ShowChar(2,4,lxc[4]);mode=5;break;
                    
                }
            }
            if(Tum<10&&k==1&&j<3)
            {
                j++;
                sum2*=10;
                sum2+=Tum;
                OLED_ShowNum(2,5,sum2,j);              
            }
            if(Tum==16)
            {
                OLED_ShowChar(2,8,lxc[5]);
                switch(mode)
                {
                    case 1 : OLED_ShowNum(2,9,sum1+sum2,4);break;
                    case 2 : OLED_ShowSignedNum(2,9,(int32_t)(sum1-sum2),4);break;
                    case 3 : OLED_ShowNum(2,9,sum1*sum2,4);break;
                    case 4 : OLED_Showfloat(2,9,(float)sum1/(float)sum2,3,2);break;
                    case 5 : OLED_ShowNum(2,9,sum1%sum2,4);break;
                }
            }                
          } 
        
	}
}

24-32f-63

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐