找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3367|回复: 2
打印 上一主题 下一主题
收起左侧

计算器GUI_Calculate_v1.0 STM32源程序 基于UCGUI 带触摸板

[复制链接]
跳转到指定楼层
楼主
通过UCGUI的学习,在stm32上面设计的一款触摸板计算器
GUI_Calculate_v1.0




程序初始化时,必须初始化串口1,否则程序会卡死在那里,具体原因尚未找到...
1.GUI_Calculate_v1.0版本根号键、百分号、反比例函数键尚未编写相应的程序。

stm32单片机源程序:
  1. #include "sys.h"
  2. #include "usart.h"               
  3. #include "delay.h"
  4. #include "math.h"
  5. #include "stdio.h"
  6.        
  7. #include "led.h"
  8. #include "timer.h"

  9. #include "gui.h"
  10. #include "touch.h"

  11. #include "WM.h"
  12. #include "button.h"
  13. #include "progbar.h"
  14. #include "CHECKBOX.h"
  15. #include "listbox.h"
  16. #include "framewin.h"
  17. #include "SCROLLBAR.h"
  18. #include "edit.h"




  19. // -------------------- 结构变量 --------------------- //
  20. GUI_PID_STATE STATE;                //该变量为GUI触屏的x y位置存储坐标(内部已将其换算为屏幕坐标了)

  21. FRAMEWIN_Handle hFrame;

  22. BUTTON_Handle hButton_1;
  23. BUTTON_Handle hButton_2;
  24. BUTTON_Handle hButton_3;
  25. BUTTON_Handle hButton_4;
  26. BUTTON_Handle hButton_5;
  27. BUTTON_Handle hButton_6;
  28. BUTTON_Handle hButton_7;
  29. BUTTON_Handle hButton_8;
  30. BUTTON_Handle hButton_9;
  31. BUTTON_Handle hButton_0;                //  10
  32. BUTTON_Handle hButton_Point;        //        11

  33. BUTTON_Handle hButton_Add;                //        12
  34. BUTTON_Handle hButton_Sub;                //        13
  35. BUTTON_Handle hButton_Mul;                //        14
  36. BUTTON_Handle hButton_Div;                //        15

  37. BUTTON_Handle hButton_Equ;                //        16
  38. BUTTON_Handle hButton_Inv;                //        17
  39. BUTTON_Handle hButton_Per;                //        18

  40. BUTTON_Handle hButton_Bac;                //        19
  41. BUTTON_Handle hButton_CE;                //        20
  42. BUTTON_Handle hButton_AC;                //        21

  43. BUTTON_Handle hButton_Neg;                //        22
  44. BUTTON_Handle hButton_Sqrt;                //        23

  45. EDIT_Handle hEdit;


  46. // -------------------- 计算变量 ---------------------- //
  47. double Result=0;
  48. u8 AC_Flag=0;                                // 0:刚刚清零,重新开始计算        1:计算过程中
  49. u8 Operator=0;                                // 0:运算符号清空        1:+                2:-                3:*                4:/
  50. u8 Operator_Last=0;
  51. u8 Update_Var=0;
  52. double Variable=0;                                // 加减乘除运算的变量
  53. u8 Inte_Digits=0;                        // 整数位数
  54. u8 Deci_Digits=0;                        // 小数位数
  55. u8 Point_Flag=0;                        // 0:没有小数点 1:有小数点
  56. unsigned char str[9];
  57. unsigned char Inv_str[10];
  58. u8 Deci_Len;
  59. int Inverse_Flag=1;


  60. // --------------------- 分界线 ----------------------- //
  61. void Result_To_String(void);
  62. void Inverse_Key(void);

  63. // -----------------------------------------------------//
  64. //
  65. void Touch_Process(void)
  66. {
  67.         GUI_TOUCH_GetState(&STATE);
  68. //        GUI_DispStringAt("x:", 0, 300);
  69. //        GUI_DispDec(STATE.x, 3);
  70. //        GUI_DispStringAt("y:", 50, 300);
  71. //        GUI_DispDec(STATE.y, 3);
  72.         if (STATE.Pressed == 1)
  73.         {
  74.                 GUI_CURSOR_SetPosition(STATE.x,STATE.y);
  75.         //        GUI_CURSOR_Show();
  76.         }
  77. }
  78. //

  79. //
  80. void Button_Process(void)
  81. {
  82.         float temp1,temp2;
  83.         switch(GUI_GetKey())
  84.         {
  85.                 case 10:// 0
  86.                                 Operator_Last=Operator;
  87.                                 if(Update_Var==1)
  88.                                 {
  89.                                         Update_Var=0;
  90.                                         Variable=0;
  91.                                         EDIT_SetText(hEdit,"0");
  92.                                 }       
  93.                                 if(Point_Flag!=0)          // 出现小数点,开始输入小数
  94.                                 {
  95.                                         if(Deci_Digits<7)
  96.                                         {
  97.                                                 Deci_Digits++;
  98.                                                 EDIT_AddKey(hEdit,'0');       
  99.                                         }       
  100.                                 }               
  101.                                 else
  102.                                 {
  103.                                         if(Variable!=0)
  104.                                         {
  105.                                                 if(Inte_Digits<8)
  106.                                                 {
  107.                                                         Inte_Digits++;
  108.                                                         Variable*=10;
  109.                                                         EDIT_AddKey(hEdit,'0');
  110.                                                 }
  111.                                         }
  112.                                 }
  113.                                 break;

  114.                 case 1:        Operator_Last=Operator;
  115.                                 if(Update_Var==1)
  116.                                 {
  117.                                         Update_Var=0;
  118.                                         Variable=0;
  119.                                 }
  120.                                 if(Point_Flag!=0)                  // 出现小数点,开始输入小数
  121.                                 {
  122.                                         if(Deci_Digits<7)
  123.                                         {
  124.                                                 Deci_Digits++;
  125.                                                 Variable+=1/pow(10,Deci_Digits)*Inverse_Flag;
  126.                                                 EDIT_AddKey(hEdit,'1');               
  127.                                         }       
  128.                                 }               
  129.                                 else
  130.                                 {
  131.                                         if(Inte_Digits<8)
  132.                                         {
  133.                                                 if(Inte_Digits==0)
  134.                                                 {
  135.                                                         EDIT_SetText(hEdit,NULL);
  136.                                                 }
  137.                                                 Inte_Digits++;
  138.                                                 Variable*=10;
  139.                                                 Variable+=1*Inverse_Flag;
  140.                                                 EDIT_AddKey(hEdit,'1');       
  141.                                         }
  142.                                 }
  143.                                
  144.                                
  145.                                 break;
  146.                 case 2:        Operator_Last=Operator;
  147.                                 if(Update_Var==1)
  148.                                 {
  149.                                         Update_Var=0;
  150.                                         Variable=0;
  151.                                 }
  152.                                 if(Point_Flag!=0)                  // 出现小数点,开始输入小数
  153.                                 {
  154.                                         if(Deci_Digits<7)
  155.                                         {
  156.                                                 Deci_Digits++;
  157.                                                 Variable+=2/pow(10,Deci_Digits)*Inverse_Flag;
  158.                                                 EDIT_AddKey(hEdit,'2');       
  159.                                         }
  160.                                 }               
  161.                                 else
  162.                                 {
  163.                                         if(Inte_Digits<8)
  164.                                         {
  165.                                                 if(Inte_Digits==0)
  166.                                                 {
  167.                                                         EDIT_SetText(hEdit,NULL);
  168.                                                 }
  169.                                                 Inte_Digits++;
  170.                                                 Variable*=10;
  171.                                                 Variable+=2*Inverse_Flag;
  172.                                                 EDIT_AddKey(hEdit,'2');
  173.                                         }
  174.                                 }
  175.                                 if(Operator!=0)
  176.                                 {
  177.                                         AC_Flag=1;
  178.                                 }
  179.                                
  180.                                 break;

  181.                 case 3:        Operator_Last=Operator;
  182.                                 if(Update_Var==1)
  183.                                 {
  184.                                         Update_Var=0;
  185.                                         Variable=0;
  186.                                 }
  187.                                 if(Point_Flag!=0)                  // 出现小数点,开始输入小数
  188.                                 {
  189.                                         if(Deci_Digits<7)
  190.                                         {
  191.                                                 Deci_Digits++;
  192.                                                 Variable+=3/pow(10,Deci_Digits)*Inverse_Flag;
  193.                                                 EDIT_AddKey(hEdit,'3');       
  194.                                         }
  195.                                 }               
  196.                                 else
  197.                                 {
  198.                                         if(Inte_Digits<8)
  199.                                         {
  200.                                                 if(Inte_Digits==0)
  201.                                                 {
  202.                                                         EDIT_SetText(hEdit,NULL);
  203.                                                 }
  204.                                                 Inte_Digits++;
  205.                                                 Variable*=10;
  206.                                                 Variable+=3*Inverse_Flag;
  207.                                                 EDIT_AddKey(hEdit,'3');
  208.                                         }
  209.                                 }
  210.                                
  211.                                 break;

  212.                 case 4:        Operator_Last=Operator;
  213.                                 if(Update_Var==1)
  214.                                 {
  215.                                         Update_Var=0;
  216.                                         Variable=0;
  217.                                 }
  218.                                 if(Point_Flag!=0)                  // 出现小数点,开始输入小数
  219.                                 {
  220.                                         if(Deci_Digits<7)
  221.                                         {
  222.                                                 Deci_Digits++;
  223.                                                 Variable+=4/pow(10,Deci_Digits)*Inverse_Flag;
  224.                                                 EDIT_AddKey(hEdit,'4');       
  225.                                         }
  226.                                 }               
  227.                                 else
  228.                                 {
  229.                                         if(Inte_Digits<8)
  230.                                         {
  231.                                                 if(Inte_Digits==0)
  232.                                                 {
  233.                                                         EDIT_SetText(hEdit,NULL);
  234.                                                 }
  235.                                                 Inte_Digits++;
  236.                                                 Variable*=10;
  237.                                                 Variable+=4*Inverse_Flag;
  238.                                                 EDIT_AddKey(hEdit,'4');
  239.                                         }
  240.                                 }
  241.                                
  242.                                 break;
  243.                 case 5:        Operator_Last=Operator;
  244.                                 if(Update_Var==1)
  245.                                 {
  246.                                         Update_Var=0;
  247.                                         Variable=0;
  248.                                 }
  249.                                 if(Point_Flag!=0)                  // 出现小数点,开始输入小数
  250.                                 {
  251.                                         if(Deci_Digits<7)
  252.                                         {
  253.                                                 Deci_Digits++;
  254.                                                 Variable+=5/pow(10,Deci_Digits)*Inverse_Flag;
  255.                                                 EDIT_AddKey(hEdit,'5');       
  256.                                         }
  257.                                 }               
  258.                                 else
  259.                                 {
  260.                                         if(Inte_Digits<8)
  261.                                         {
  262.                                                 if(Inte_Digits==0)
  263.                                                 {
  264.                                                         EDIT_SetText(hEdit,NULL);
  265.                                                 }
  266.                                                 Inte_Digits++;
  267.                                                 Variable*=10;
  268.                                                 Variable+=5*Inverse_Flag;
  269.                                                 EDIT_AddKey(hEdit,'5');
  270.                                         }
  271.                                 }
  272.                                
  273.                                 break;
  274.                 case 6:        Operator_Last=Operator;
  275.                                 if(Update_Var==1)
  276.                                 {
  277.                                         Update_Var=0;
  278.                                         Variable=0;
  279.                                 }
  280.                                 if(Point_Flag!=0)                  // 出现小数点,开始输入小数
  281.                                 {
  282.                                         if(Deci_Digits<7)
  283.                                         {
  284.                                                 Deci_Digits++;
  285.                                                 Variable+=6/pow(10,Deci_Digits)*Inverse_Flag;
  286.                                                 EDIT_AddKey(hEdit,'6');       
  287.                                         }
  288.                                 }               
  289.                                 else
  290.                                 {
  291.                                         if(Inte_Digits<8)
  292.                                         {
  293.                                                 if(Inte_Digits==0)
  294.                                                 {
  295.                                                         EDIT_SetText(hEdit,NULL);
  296.                                                 }
  297.                                                 Inte_Digits++;
  298.                                                 Variable*=10;
  299.                                                 Variable+=6*Inverse_Flag;
  300.                                                 EDIT_AddKey(hEdit,'6');
  301.                                         }
  302.                                 }
  303.                                
  304.                                 break;
  305.                 case 7:        Operator_Last=Operator;
  306.                                 if(Update_Var==1)
  307.                                 {
  308.                                         Update_Var=0;
  309.                                         Variable=0;
  310.                                 }
  311.                                 if(Point_Flag!=0)                  // 出现小数点,开始输入小数
  312.                                 {
  313.                                         if(Deci_Digits<7)
  314.                                         {
  315.                                                 Deci_Digits++;
  316.                                                 Variable+=7/pow(10,Deci_Digits)*Inverse_Flag;
  317.                                                 EDIT_AddKey(hEdit,'7');       
  318.                                         }
  319.                                 }               
  320.                                 else
  321.                                 {
  322.                                         if(Inte_Digits<8)
  323.                                         {
  324.                                                 if(Inte_Digits==0)
  325.                                                 {
  326.                                                         EDIT_SetText(hEdit,NULL);
  327.                                                 }
  328.                                                 Inte_Digits++;
  329.                                                

  330. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

完整代码下载:
计算器GUI_Calculate_v1.0.rar (2.62 MB, 下载次数: 58)


评分

参与人数 1黑币 +1 收起 理由
toytang + 1 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:283348 发表于 2018-3-16 16:58 | 只看该作者
感谢楼主!
回复

使用道具 举报

板凳
ID:336051 发表于 2020-1-14 12:42 | 只看该作者
在战舰板上能实现吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表