ARM开发(9)基于STM32的简单四则运算计算器

本文介绍了基于STM32 F103VB芯片实现简单四则运算计算器的步骤,包括计算器的工作原理,详细讲述了key.h和key.c中按键扫描函数的编写,calcalator.h和calcalator.c中计算器运算的实现,以及在main.c中如何整合完成四则运算功能。
摘要由CSDN通过智能技术生成
           基于STM32的简单四则运算计算器

一 计算器原理:

1.1 本实验实现基于STM32的简单四则运算计算器
1.2 实验思路:理解计算器原理(按键扫描,字符实时显示,运算表达式计算,浮点数转字符串,字符串结果显示)
1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真  STM32F103VBT6芯片

二 实验步骤:
2.1 key.h代码:

#ifndef __KEY_H
#define __KEY_H  
#include"sys.h"
#define      KEY_NULL            0       //  no key
#define      KEY_0               40     // value 0 
#define      KEY_1               41
#define      KEY_2               42
#define      KEY_3               43
#define      KEY_4               44
#define      KEY_5               45
#define      KEY_6               46
#define      KEY_7               47
#define      KEY_8               48
#define      KEY_9               49     // 
#define      KEY_POINT           50     // decimal point
#define      KEY_OP_ADD          64     //  '+'   addition
#define      KEY_OP_SUB          65     //  '-'   substract
#define      KEY_OP_MUL          66     //  '*'   multiplication
#define      KEY_OP_DIV          67     //  '/'   divide
#define      KEY_EQU             81    //   '='
void KEY_Init(void);//IO³õʼ»¯
void    funcScanKey(void);
u8  Key_Read(void);
#endif

2.2 key.c代码(按键扫描函数):

#include "stm32f10x.h"
#include "key.h"
#include "delay.h"
typedef     struct  
{
    u8  flagKeyDown:1;
    u8  flagKeyRelease:1;
    u8  flagKeyLong:1;

} TEMP_FLAGS_Type;

TEMP_FLAGS_Type tempFlags;
u8 specialKey;

void KEY_Init(void)
{

 GPIO_InitTypeDef GPIO_InitStructure;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); 

 GPIO_InitStructure.GPIO_Pin  = KEY_OUT_PINS ;//0x7f ;//GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;//ROWPINS; ÐÐ  
 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;    
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; 
 GPIO_Init(GPIOE, &GPIO_InitStructure);

 GPIO_InitStructure.GPIO_Pin  = KEY_IN_PINS ;  //GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10| GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;//COLPINS; ÁÐ
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;   
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
 GPIO_Init(GPIOE, &GPIO_InitStructure);

 GPIO_SetBits(GPIOE,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
 GPIO_ResetBits(GPIOE, GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10| GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);

} 

static  u8  Timer2of16ms = 0;
static  u8  sourceKey = 0;
static  u8  keyCol, keyRow;
u8  const keyTableMax = 7;
u8  const keyTableMaxCol = 8;
u16 const  scanTable[ke
  • 20
    点赞
  • 184
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值