Simple integer calculator using FRDM-KL25Z and Adafruit 2.8" TFT with touch \\ "Dentaku" means "Desktop Calculator" in Japanese \\ On 5-Dec-2015, Support for FRDM-K64F, FRDM-K22F, NUCLEO-F411RE added.

Dependencies:   SPI_STMPE610 UniGraphic mbed vt100

Yet another simple desktop calculator program, only for integer.
As usual I used FRDM-KL25Z, Adafruit 2.8" TFT with touch and UniGraphic library.
Now works with FRDM-K64F, FRDM-K22F, and NUCLEO-F411RE.

整数計算のみの簡単な電卓プログラムです。
例によって、FRDM-KL25Z, Adafruit 2.8" TFT with touch, そして UniGraphic を使用しています。
FRDM-K64F, FRDM-K22F, NUCLEO-F411RE でも動くようになりました。

/media/uploads/Rhyme/img_1194.jpg

Committer:
Rhyme
Date:
Tue Apr 11 06:06:25 2017 +0000
Revision:
4:d4c937bcc469
Parent:
0:659a74b77279
Support of MAX32600 added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:659a74b77279 1 /** mbed oscilloscope my implementation of a oscillo scope
Rhyme 0:659a74b77279 2 * Copyright (c) 2014, 2015 Motoo Tanaka @ Design Methodology Lab
Rhyme 0:659a74b77279 3 *
Rhyme 0:659a74b77279 4 * menu.cpp
Rhyme 0:659a74b77279 5 *
Rhyme 0:659a74b77279 6 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Rhyme 0:659a74b77279 7 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Rhyme 0:659a74b77279 8 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Rhyme 0:659a74b77279 9 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Rhyme 0:659a74b77279 10 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Rhyme 0:659a74b77279 11 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
Rhyme 0:659a74b77279 12 * THE SOFTWARE.
Rhyme 0:659a74b77279 13 */
Rhyme 0:659a74b77279 14 #include "mbed.h"
Rhyme 0:659a74b77279 15 #include <ILI9341.h>
Rhyme 0:659a74b77279 16 #include "SPI_STMPE610.h"
Rhyme 0:659a74b77279 17 //#include "Arial12x12.h"
Rhyme 0:659a74b77279 18 //#include "Arial24x23.h"
Rhyme 0:659a74b77279 19 #include "Arial28x28.h"
Rhyme 0:659a74b77279 20 //#include "Arial43x48_numb.h"
Rhyme 0:659a74b77279 21 #include "vt100.h"
Rhyme 0:659a74b77279 22 #include "TFTMenu.h"
Rhyme 0:659a74b77279 23 #include "menu.h"
Rhyme 0:659a74b77279 24 #include "main.h"
Rhyme 0:659a74b77279 25
Rhyme 0:659a74b77279 26 #define NUM_MAX_DIGIT 8
Rhyme 0:659a74b77279 27 int num_digit = 0 ;
Rhyme 0:659a74b77279 28 long prevValue = 0 ;
Rhyme 0:659a74b77279 29 long topValue = 0 ;
Rhyme 0:659a74b77279 30 int op = opPlus ;
Rhyme 0:659a74b77279 31
Rhyme 0:659a74b77279 32 void doDigit(int num)
Rhyme 0:659a74b77279 33 {
Rhyme 0:659a74b77279 34 if (num_digit < NUM_MAX_DIGIT) {
Rhyme 0:659a74b77279 35 topValue = topValue * 10 + num ;
Rhyme 0:659a74b77279 36 num_digit++ ;
Rhyme 0:659a74b77279 37 display() ;
Rhyme 0:659a74b77279 38 }
Rhyme 0:659a74b77279 39 }
Rhyme 0:659a74b77279 40
Rhyme 0:659a74b77279 41 void do0(void) { doDigit(0) ; }
Rhyme 0:659a74b77279 42 void do1(void) { doDigit(1) ; }
Rhyme 0:659a74b77279 43 void do2(void) { doDigit(2) ; }
Rhyme 0:659a74b77279 44 void do3(void) { doDigit(3) ; }
Rhyme 0:659a74b77279 45 void do4(void) { doDigit(4) ; }
Rhyme 0:659a74b77279 46 void do5(void) { doDigit(5) ; }
Rhyme 0:659a74b77279 47 void do6(void) { doDigit(6) ; }
Rhyme 0:659a74b77279 48 void do7(void) { doDigit(7) ; }
Rhyme 0:659a74b77279 49 void do8(void) { doDigit(8) ; }
Rhyme 0:659a74b77279 50 void do9(void) { doDigit(9) ; }
Rhyme 0:659a74b77279 51
Rhyme 0:659a74b77279 52 void doPlus(void)
Rhyme 0:659a74b77279 53 {
Rhyme 0:659a74b77279 54 doCalc() ;
Rhyme 0:659a74b77279 55 prevValue = topValue ;
Rhyme 0:659a74b77279 56 topValue = 0 ;
Rhyme 0:659a74b77279 57 num_digit = 0 ;
Rhyme 0:659a74b77279 58 op = opPlus ;
Rhyme 0:659a74b77279 59 display("+") ;
Rhyme 0:659a74b77279 60 }
Rhyme 0:659a74b77279 61
Rhyme 0:659a74b77279 62 void doMinus(void)
Rhyme 0:659a74b77279 63 {
Rhyme 0:659a74b77279 64 doCalc() ;
Rhyme 0:659a74b77279 65 prevValue = topValue ;
Rhyme 0:659a74b77279 66 topValue = 0 ;
Rhyme 0:659a74b77279 67 num_digit = 0 ;
Rhyme 0:659a74b77279 68 op = opMinus ;
Rhyme 0:659a74b77279 69 display("-") ;
Rhyme 0:659a74b77279 70 }
Rhyme 0:659a74b77279 71
Rhyme 0:659a74b77279 72 void doMul(void)
Rhyme 0:659a74b77279 73 {
Rhyme 0:659a74b77279 74 doCalc() ;
Rhyme 0:659a74b77279 75 prevValue = topValue ;
Rhyme 0:659a74b77279 76 topValue = 0 ;
Rhyme 0:659a74b77279 77 num_digit = 0 ;
Rhyme 0:659a74b77279 78 op = opMul ;
Rhyme 0:659a74b77279 79 display("x") ;
Rhyme 0:659a74b77279 80 }
Rhyme 0:659a74b77279 81
Rhyme 0:659a74b77279 82 void doDiv(void)
Rhyme 0:659a74b77279 83 {
Rhyme 0:659a74b77279 84 doCalc() ;
Rhyme 0:659a74b77279 85 prevValue = topValue ;
Rhyme 0:659a74b77279 86 topValue = 0 ;
Rhyme 0:659a74b77279 87 num_digit = 0 ;
Rhyme 0:659a74b77279 88 op = opDiv ;
Rhyme 0:659a74b77279 89 display("/") ;
Rhyme 0:659a74b77279 90 }
Rhyme 0:659a74b77279 91
Rhyme 0:659a74b77279 92 void doClear(void)
Rhyme 0:659a74b77279 93 {
Rhyme 0:659a74b77279 94 prevValue = 0 ;
Rhyme 0:659a74b77279 95 topValue = 0 ;
Rhyme 0:659a74b77279 96 num_digit = 0 ;
Rhyme 0:659a74b77279 97 op = opPlus ;
Rhyme 0:659a74b77279 98 display() ;
Rhyme 0:659a74b77279 99 }
Rhyme 0:659a74b77279 100
Rhyme 0:659a74b77279 101 int doCalc(void)
Rhyme 0:659a74b77279 102 {
Rhyme 0:659a74b77279 103 int error = 0 ;
Rhyme 0:659a74b77279 104 switch(op) {
Rhyme 0:659a74b77279 105 case opPlus:
Rhyme 0:659a74b77279 106 topValue += prevValue ;
Rhyme 0:659a74b77279 107 break ;
Rhyme 0:659a74b77279 108 case opMinus:
Rhyme 0:659a74b77279 109 topValue = prevValue - topValue ;
Rhyme 0:659a74b77279 110 break ;
Rhyme 0:659a74b77279 111 case opMul:
Rhyme 0:659a74b77279 112 topValue = prevValue * topValue ;
Rhyme 0:659a74b77279 113 break ;
Rhyme 0:659a74b77279 114 case opDiv:
Rhyme 0:659a74b77279 115 if (topValue != 0) {
Rhyme 0:659a74b77279 116 topValue = prevValue / topValue ;
Rhyme 0:659a74b77279 117 } else {
Rhyme 0:659a74b77279 118 error = 1 ;
Rhyme 0:659a74b77279 119 }
Rhyme 0:659a74b77279 120 break ;
Rhyme 0:659a74b77279 121 default:
Rhyme 0:659a74b77279 122 break ;
Rhyme 0:659a74b77279 123 }
Rhyme 0:659a74b77279 124 prevValue = 0 ;
Rhyme 0:659a74b77279 125 return(error) ;
Rhyme 0:659a74b77279 126 }
Rhyme 0:659a74b77279 127
Rhyme 0:659a74b77279 128 void doEqu(void)
Rhyme 0:659a74b77279 129 {
Rhyme 0:659a74b77279 130 int error = 0 ;
Rhyme 0:659a74b77279 131 error = doCalc() ;
Rhyme 0:659a74b77279 132 if (error) {
Rhyme 0:659a74b77279 133 display("Error!") ;
Rhyme 0:659a74b77279 134 } else {
Rhyme 0:659a74b77279 135 display() ;
Rhyme 0:659a74b77279 136 }
Rhyme 0:659a74b77279 137 op = opPlus ;
Rhyme 0:659a74b77279 138 num_digit = 0 ;
Rhyme 0:659a74b77279 139 }
Rhyme 0:659a74b77279 140
Rhyme 0:659a74b77279 141 void initMenu(void)
Rhyme 0:659a74b77279 142 {
Rhyme 0:659a74b77279 143 int f_left = 18 ;
Rhyme 0:659a74b77279 144 int f_top = 14 ;
Rhyme 0:659a74b77279 145
Rhyme 0:659a74b77279 146 numMenu = 0 ;
Rhyme 0:659a74b77279 147 menu[numMenu++] = new TFTMenuItem( 5, 85, 55, 135, do7, "7", Green, Black, f_left, f_top) ;
Rhyme 0:659a74b77279 148 menu[numMenu++] = new TFTMenuItem( 65, 85, 115, 135, do8, "8", Green, Black, f_left, f_top) ;
Rhyme 0:659a74b77279 149 menu[numMenu++] = new TFTMenuItem(125, 85, 175, 135, do9, "9", Green, Black, f_left, f_top) ;
Rhyme 0:659a74b77279 150 menu[numMenu++] = new TFTMenuItem(185, 85, 235, 135, doClear, "C", Green, Black, f_left, f_top) ;
Rhyme 0:659a74b77279 151
Rhyme 0:659a74b77279 152 menu[numMenu++] = new TFTMenuItem( 5, 145, 55, 195, do4, "4", Green, Black, f_left, f_top) ;
Rhyme 0:659a74b77279 153 menu[numMenu++] = new TFTMenuItem( 65, 145, 115, 195, do5, "5", Green, Black, f_left, f_top) ;
Rhyme 0:659a74b77279 154 menu[numMenu++] = new TFTMenuItem(125, 145, 175, 195, do6, "6", Green, Black, f_left, f_top) ;
Rhyme 0:659a74b77279 155 menu[numMenu++] = new TFTMenuItem(185, 145, 235, 195, doMinus,"-", Green, Black, f_left, f_top) ;
Rhyme 0:659a74b77279 156
Rhyme 0:659a74b77279 157 menu[numMenu++] = new TFTMenuItem( 5, 205, 55, 255, do1, "1", Green, Black, f_left, f_top) ;
Rhyme 0:659a74b77279 158 menu[numMenu++] = new TFTMenuItem( 65, 205, 115, 255, do2, "2", Green, Black, f_left, f_top) ;
Rhyme 0:659a74b77279 159 menu[numMenu++] = new TFTMenuItem(125, 205, 175, 255, do3, "3", Green, Black, f_left, f_top) ;
Rhyme 0:659a74b77279 160 menu[numMenu++] = new TFTMenuItem(185, 205, 235, 255, doPlus, "+", Green, Black, f_left, f_top) ;
Rhyme 0:659a74b77279 161
Rhyme 0:659a74b77279 162 menu[numMenu++] = new TFTMenuItem( 5, 265, 55, 315, do0, "0", Green, Black, f_left, f_top) ;
Rhyme 0:659a74b77279 163 menu[numMenu++] = new TFTMenuItem( 65, 265, 115, 315, doMul ,"x", Green, Black, f_left, f_top) ;
Rhyme 0:659a74b77279 164 menu[numMenu++] = new TFTMenuItem(125, 265, 175, 315, doDiv, "/", Green, Black, f_left, f_top) ;
Rhyme 0:659a74b77279 165 menu[numMenu++] = new TFTMenuItem(185, 265, 235, 315, doEqu, "=", Green, Black, f_left, f_top) ;
Rhyme 0:659a74b77279 166 }
Rhyme 0:659a74b77279 167
Rhyme 0:659a74b77279 168 void drawMenu(void)
Rhyme 0:659a74b77279 169 {
Rhyme 0:659a74b77279 170 for (int i = 0 ; i < numMenu ; i++ ) {
Rhyme 0:659a74b77279 171 menu[i]->draw() ;
Rhyme 0:659a74b77279 172 }
Rhyme 0:659a74b77279 173 }
Rhyme 0:659a74b77279 174
Rhyme 0:659a74b77279 175 bool doMenu(uint16_t x, uint16_t y)
Rhyme 0:659a74b77279 176 {
Rhyme 0:659a74b77279 177 bool result = false ;
Rhyme 0:659a74b77279 178
Rhyme 0:659a74b77279 179 for (int i = 0 ; i < numMenu ; i++ ) {
Rhyme 0:659a74b77279 180 if (menu[i]->hit(x, y)) {
Rhyme 0:659a74b77279 181 menu[i]->doIt() ;
Rhyme 0:659a74b77279 182 menu[i]->draw() ;
Rhyme 0:659a74b77279 183 result = true ;
Rhyme 0:659a74b77279 184 // printf("%s TopValue = %d, PreValue = %d\n\r", menu[i]->name(), topValue, prevValue) ;
Rhyme 0:659a74b77279 185 break ;
Rhyme 0:659a74b77279 186 }
Rhyme 0:659a74b77279 187 }
Rhyme 0:659a74b77279 188 return( result ) ;
Rhyme 0:659a74b77279 189 }