找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3951|回复: 1
收起左侧

STM32触摸屏-计算器程序(嵌入式设计)

[复制链接]
ID:350754 发表于 2020-4-21 15:41 | 显示全部楼层 |阅读模式
嵌入式,触摸屏计算器的设计

单片机源程序如下:
  1. #include "sys.h"
  2. #include "usart.h"        
  3. #include "delay.h"
  4. #include "math.h"
  5. #include "stdio.h"   
  6. #include "led.h"
  7. #include "gui.h"
  8. #include "touch.h"
  9. #include "WM.h"
  10. #include "button.h"
  11. #include "progbar.h"
  12. #include "CHECKBOX.h"
  13. #include "listbox.h"
  14. #include "framewin.h"
  15. #include "SCROLLBAR.h"
  16. #include "edit.h"

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

  19. FRAMEWIN_Handle hFrame;

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

  31. BUTTON_Handle hButton_Add;        //    12
  32. BUTTON_Handle hButton_Sub;        //    13
  33. BUTTON_Handle hButton_Mul;        //    14
  34. BUTTON_Handle hButton_Div;        //    15

  35. BUTTON_Handle hButton_Equ;        //    16
  36. BUTTON_Handle hButton_Inv;        //    17
  37. BUTTON_Handle hButton_Per;        //    18

  38. BUTTON_Handle hButton_Bac;        //    19
  39. BUTTON_Handle hButton_CE;        //    20
  40. BUTTON_Handle hButton_AC;        //    21

  41. BUTTON_Handle hButton_Neg;        //    22
  42. BUTTON_Handle hButton_Sqrt;        //    23

  43. EDIT_Handle hEdit;


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


  58. // --------------------- 分界线 ----------------------- //
  59. void Result_To_String(void);
  60. void Inverse_Key(void);

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

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

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

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

  210.         case 4:    Operator_Last=Operator;
  211.                 if(Update_Var==1)
  212.                 {
  213.                     Update_Var=0;
  214.                     Variable=0;
  215.                 }
  216.                 if(Point_Flag!=0)          // 出现小数点,开始输入小数
  217.                 {
  218.                     if(Deci_Digits<7)
  219.                     {
  220.                         Deci_Digits++;
  221.                         Variable+=4/pow(10,Deci_Digits)*Inverse_Flag;
  222.                         EDIT_AddKey(hEdit,'4');   
  223.                     }
  224.                 }        
  225.                 else
  226.                 {
  227.                     if(Inte_Digits<8)
  228.                     {
  229.                         if(Inte_Digits==0)
  230.                         {
  231. ……………………

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

复制代码

所有资料51hei提供下载:
嵌入式触摸屏-计算器.7z (441.65 KB, 下载次数: 75)
20200421153745.png
20200421153816.png
20200421153844.png
回复

使用道具 举报

ID:1004205 发表于 2022-2-8 10:18 | 显示全部楼层
少了个文件10ANZI.c
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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