找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3087|回复: 3
收起左侧

使用stm32mini板实现简易计算器功能 源程序

[复制链接]
ID:817832 发表于 2020-9-12 10:28 | 显示全部楼层 |阅读模式
由于mini板和开发板之间有些串口不同的区别,一个用GPIO,一个用FSMC,可能会白屏。
程序初始化时,必须初始化串口1,否则程序会卡死在那里,具体原因尚未找到...
1.GUI_Calculate_v1.0版本根号键、百分号、反比例函数键尚未编写相应的程序。

单片机源程序如下:
  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. ……………………

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

所有资料51hei提供下载:
GUI_Calculate_v1.0.7z (434.67 KB, 下载次数: 50)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:649697 发表于 2020-12-15 09:52 | 显示全部楼层
兄弟,这怎么解压,我打不开这文件
回复

使用道具 举报

ID:337834 发表于 2020-12-16 17:52 | 显示全部楼层
可能你还没初始化串口就先使用串口发送数据,多半是printf函数
回复

使用道具 举报

ID:649697 发表于 2020-12-17 09:10 | 显示全部楼层
lyshhh 发表于 2020-12-15 09:52
兄弟,这怎么解压,我打不开这文件

解决了,关于7z的压缩方式用得少,百度了一下,设置rar也能解压7z的压缩包
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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