标题:
计算器GUI_Calculate_v1.0 STM32源程序 基于UCGUI 带触摸板
[打印本页]
作者:
王维鋆
时间:
2017-5-9 20:50
标题:
计算器GUI_Calculate_v1.0 STM32源程序 基于UCGUI 带触摸板
通过UCGUI的学习,在stm32上面设计的一款触摸板计算器
GUI_Calculate_v1.0
0.png
(404.75 KB, 下载次数: 65)
下载附件
2017-5-9 21:57 上传
0.png
(61.54 KB, 下载次数: 62)
下载附件
2017-5-9 21:57 上传
程序初始化时,必须初始化串口1,否则程序会卡死在那里,具体原因尚未找到...
1.GUI_Calculate_v1.0版本根号键、百分号、反比例函数键尚未编写相应的程序。
stm32单片机源程序:
#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;
Variable+=2*Inverse_Flag;
EDIT_AddKey(hEdit,'2');
}
}
if(Operator!=0)
{
AC_Flag=1;
}
break;
case 3: Operator_Last=Operator;
if(Update_Var==1)
{
Update_Var=0;
Variable=0;
}
if(Point_Flag!=0) // 出现小数点,开始输入小数
{
if(Deci_Digits<7)
{
Deci_Digits++;
Variable+=3/pow(10,Deci_Digits)*Inverse_Flag;
EDIT_AddKey(hEdit,'3');
}
}
else
{
if(Inte_Digits<8)
{
if(Inte_Digits==0)
{
EDIT_SetText(hEdit,NULL);
}
Inte_Digits++;
Variable*=10;
Variable+=3*Inverse_Flag;
EDIT_AddKey(hEdit,'3');
}
}
break;
case 4: Operator_Last=Operator;
if(Update_Var==1)
{
Update_Var=0;
Variable=0;
}
if(Point_Flag!=0) // 出现小数点,开始输入小数
{
if(Deci_Digits<7)
{
Deci_Digits++;
Variable+=4/pow(10,Deci_Digits)*Inverse_Flag;
EDIT_AddKey(hEdit,'4');
}
}
else
{
if(Inte_Digits<8)
{
if(Inte_Digits==0)
{
EDIT_SetText(hEdit,NULL);
}
Inte_Digits++;
Variable*=10;
Variable+=4*Inverse_Flag;
EDIT_AddKey(hEdit,'4');
}
}
break;
case 5: Operator_Last=Operator;
if(Update_Var==1)
{
Update_Var=0;
Variable=0;
}
if(Point_Flag!=0) // 出现小数点,开始输入小数
{
if(Deci_Digits<7)
{
Deci_Digits++;
Variable+=5/pow(10,Deci_Digits)*Inverse_Flag;
EDIT_AddKey(hEdit,'5');
}
}
else
{
if(Inte_Digits<8)
{
if(Inte_Digits==0)
{
EDIT_SetText(hEdit,NULL);
}
Inte_Digits++;
Variable*=10;
Variable+=5*Inverse_Flag;
EDIT_AddKey(hEdit,'5');
}
}
break;
case 6: Operator_Last=Operator;
if(Update_Var==1)
{
Update_Var=0;
Variable=0;
}
if(Point_Flag!=0) // 出现小数点,开始输入小数
{
if(Deci_Digits<7)
{
Deci_Digits++;
Variable+=6/pow(10,Deci_Digits)*Inverse_Flag;
EDIT_AddKey(hEdit,'6');
}
}
else
{
if(Inte_Digits<8)
{
if(Inte_Digits==0)
{
EDIT_SetText(hEdit,NULL);
}
Inte_Digits++;
Variable*=10;
Variable+=6*Inverse_Flag;
EDIT_AddKey(hEdit,'6');
}
}
break;
case 7: Operator_Last=Operator;
if(Update_Var==1)
{
Update_Var=0;
Variable=0;
}
if(Point_Flag!=0) // 出现小数点,开始输入小数
{
if(Deci_Digits<7)
{
Deci_Digits++;
Variable+=7/pow(10,Deci_Digits)*Inverse_Flag;
EDIT_AddKey(hEdit,'7');
}
}
else
{
if(Inte_Digits<8)
{
if(Inte_Digits==0)
{
EDIT_SetText(hEdit,NULL);
}
Inte_Digits++;
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
完整代码下载:
计算器GUI_Calculate_v1.0.rar
(2.62 MB, 下载次数: 58)
2017-5-9 20:49 上传
点击文件名下载附件
基于ucgui的stm32简易计算器
下载积分: 黑币 -5
作者:
jbk83
时间:
2018-3-16 16:58
感谢楼主!
作者:
银色黎明
时间:
2020-1-14 12:42
在战舰板上能实现吗?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1