基于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