标题:
使用stm32mini板实现简易计算器功能 源程序
[打印本页]
作者:
sttttttttttty
时间:
2020-9-12 10:28
标题:
使用stm32mini板实现简易计算器功能 源程序
由于mini板和开发板之间有些串口不同的区别,一个用GPIO,一个用FSMC,可能会白屏。
程序初始化时,必须初始化串口1,否则程序会卡死在那里,具体原因尚未找到...
1.GUI_Calculate_v1.0版本根号键、百分号、反比例函数键尚未编写相应的程序。
单片机源程序如下:
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "math.h"
#include "stdio.h"
#include "led.h"
#include "timer.h"
#include "gui.h"
#include "touch.h"
#include "WM.h"
#include "button.h"
#include "progbar.h"
#include "CHECKBOX.h"
#include "listbox.h"
#include "framewin.h"
#include "SCROLLBAR.h"
#include "edit.h"
// -------------------- 结构变量 --------------------- //
GUI_PID_STATE STATE; //该变量为GUI触屏的x y位置存储坐标(内部已将其换算为屏幕坐标了)
FRAMEWIN_Handle hFrame;
BUTTON_Handle hButton_1;
BUTTON_Handle hButton_2;
BUTTON_Handle hButton_3;
BUTTON_Handle hButton_4;
BUTTON_Handle hButton_5;
BUTTON_Handle hButton_6;
BUTTON_Handle hButton_7;
BUTTON_Handle hButton_8;
BUTTON_Handle hButton_9;
BUTTON_Handle hButton_0; // 10
BUTTON_Handle hButton_Point; // 11
BUTTON_Handle hButton_Add; // 12
BUTTON_Handle hButton_Sub; // 13
BUTTON_Handle hButton_Mul; // 14
BUTTON_Handle hButton_Div; // 15
BUTTON_Handle hButton_Equ; // 16
BUTTON_Handle hButton_Inv; // 17
BUTTON_Handle hButton_Per; // 18
BUTTON_Handle hButton_Bac; // 19
BUTTON_Handle hButton_CE; // 20
BUTTON_Handle hButton_AC; // 21
BUTTON_Handle hButton_Neg; // 22
BUTTON_Handle hButton_Sqrt; // 23
EDIT_Handle hEdit;
// -------------------- 计算变量 ---------------------- //
double Result=0;
u8 AC_Flag=0; // 0:刚刚清零,重新开始计算 1:计算过程中
u8 Operator=0; // 0:运算符号清空 1:+ 2:- 3:* 4:/
u8 Operator_Last=0;
u8 Update_Var=0;
double Variable=0; // 加减乘除运算的变量
u8 Inte_Digits=0; // 整数位数
u8 Deci_Digits=0; // 小数位数
u8 Point_Flag=0; // 0:没有小数点 1:有小数点
unsigned char str[9];
unsigned char Inv_str[10];
u8 Deci_Len;
int Inverse_Flag=1;
// --------------------- 分界线 ----------------------- //
void Result_To_String(void);
void Inverse_Key(void);
// -----------------------------------------------------//
//
void Touch_Process(void)
{
GUI_TOUCH_GetState(&STATE);
// GUI_DispStringAt("x:", 0, 300);
// GUI_DispDec(STATE.x, 3);
// GUI_DispStringAt("y:", 50, 300);
// GUI_DispDec(STATE.y, 3);
if (STATE.Pressed == 1)
{
GUI_CURSOR_SetPosition(STATE.x,STATE.y);
// GUI_CURSOR_Show();
}
}
//
//
void Button_Process(void)
{
float temp1,temp2;
switch(GUI_GetKey())
{
case 10:// 0
Operator_Last=Operator;
if(Update_Var==1)
{
Update_Var=0;
Variable=0;
EDIT_SetText(hEdit,"0");
}
if(Point_Flag!=0) // 出现小数点,开始输入小数
{
if(Deci_Digits<7)
{
Deci_Digits++;
EDIT_AddKey(hEdit,'0');
}
}
else
{
if(Variable!=0)
{
if(Inte_Digits<8)
{
Inte_Digits++;
Variable*=10;
EDIT_AddKey(hEdit,'0');
}
}
}
break;
case 1: Operator_Last=Operator;
if(Update_Var==1)
{
Update_Var=0;
Variable=0;
}
if(Point_Flag!=0) // 出现小数点,开始输入小数
{
if(Deci_Digits<7)
{
Deci_Digits++;
Variable+=1/pow(10,Deci_Digits)*Inverse_Flag;
EDIT_AddKey(hEdit,'1');
}
}
else
{
if(Inte_Digits<8)
{
if(Inte_Digits==0)
{
EDIT_SetText(hEdit,NULL);
}
Inte_Digits++;
Variable*=10;
Variable+=1*Inverse_Flag;
EDIT_AddKey(hEdit,'1');
}
}
break;
case 2: Operator_Last=Operator;
if(Update_Var==1)
{
Update_Var=0;
Variable=0;
}
if(Point_Flag!=0) // 出现小数点,开始输入小数
{
if(Deci_Digits<7)
{
Deci_Digits++;
Variable+=2/pow(10,Deci_Digits)*Inverse_Flag;
EDIT_AddKey(hEdit,'2');
}
}
else
{
if(Inte_Digits<8)
{
if(Inte_Digits==0)
{
EDIT_SetText(hEdit,NULL);
}
Inte_Digits++;
Variable*=10;
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
GUI_Calculate_v1.0.7z
(434.67 KB, 下载次数: 50)
2020-9-12 14:30 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
lyshhh
时间:
2020-12-15 09:52
兄弟,这怎么解压,我打不开这文件
作者:
Nevergp
时间:
2020-12-16 17:52
可能你还没初始化串口就先使用串口发送数据,多半是printf函数
作者:
lyshhh
时间:
2020-12-17 09:10
lyshhh 发表于 2020-12-15 09:52
兄弟,这怎么解压,我打不开这文件
解决了,关于7z的压缩方式用得少,百度了一下,设置rar也能解压7z的压缩包
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1