Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SPI_STMPE610 UniGraphic mbed vt100
menu.cpp
00001 /** mbed oscilloscope my implementation of a oscillo scope 00002 * Copyright (c) 2014, 2015 Motoo Tanaka @ Design Methodology Lab 00003 * 00004 * menu.cpp 00005 * 00006 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00007 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00008 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 00009 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00010 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00011 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 00012 * THE SOFTWARE. 00013 */ 00014 #include "mbed.h" 00015 #include <ILI9341.h> 00016 #include "SPI_STMPE610.h" 00017 //#include "Arial12x12.h" 00018 //#include "Arial24x23.h" 00019 #include "Arial28x28.h" 00020 //#include "Arial43x48_numb.h" 00021 #include "vt100.h" 00022 #include "TFTMenu.h" 00023 #include "menu.h" 00024 #include "main.h" 00025 00026 #define NUM_MAX_DIGIT 8 00027 int num_digit = 0 ; 00028 long prevValue = 0 ; 00029 long topValue = 0 ; 00030 int op = opPlus ; 00031 00032 void doDigit(int num) 00033 { 00034 if (num_digit < NUM_MAX_DIGIT) { 00035 topValue = topValue * 10 + num ; 00036 num_digit++ ; 00037 display() ; 00038 } 00039 } 00040 00041 void do0(void) { doDigit(0) ; } 00042 void do1(void) { doDigit(1) ; } 00043 void do2(void) { doDigit(2) ; } 00044 void do3(void) { doDigit(3) ; } 00045 void do4(void) { doDigit(4) ; } 00046 void do5(void) { doDigit(5) ; } 00047 void do6(void) { doDigit(6) ; } 00048 void do7(void) { doDigit(7) ; } 00049 void do8(void) { doDigit(8) ; } 00050 void do9(void) { doDigit(9) ; } 00051 00052 void doPlus(void) 00053 { 00054 doCalc() ; 00055 prevValue = topValue ; 00056 topValue = 0 ; 00057 num_digit = 0 ; 00058 op = opPlus ; 00059 display("+") ; 00060 } 00061 00062 void doMinus(void) 00063 { 00064 doCalc() ; 00065 prevValue = topValue ; 00066 topValue = 0 ; 00067 num_digit = 0 ; 00068 op = opMinus ; 00069 display("-") ; 00070 } 00071 00072 void doMul(void) 00073 { 00074 doCalc() ; 00075 prevValue = topValue ; 00076 topValue = 0 ; 00077 num_digit = 0 ; 00078 op = opMul ; 00079 display("x") ; 00080 } 00081 00082 void doDiv(void) 00083 { 00084 doCalc() ; 00085 prevValue = topValue ; 00086 topValue = 0 ; 00087 num_digit = 0 ; 00088 op = opDiv ; 00089 display("/") ; 00090 } 00091 00092 void doClear(void) 00093 { 00094 prevValue = 0 ; 00095 topValue = 0 ; 00096 num_digit = 0 ; 00097 op = opPlus ; 00098 display() ; 00099 } 00100 00101 int doCalc(void) 00102 { 00103 int error = 0 ; 00104 switch(op) { 00105 case opPlus: 00106 topValue += prevValue ; 00107 break ; 00108 case opMinus: 00109 topValue = prevValue - topValue ; 00110 break ; 00111 case opMul: 00112 topValue = prevValue * topValue ; 00113 break ; 00114 case opDiv: 00115 if (topValue != 0) { 00116 topValue = prevValue / topValue ; 00117 } else { 00118 error = 1 ; 00119 } 00120 break ; 00121 default: 00122 break ; 00123 } 00124 prevValue = 0 ; 00125 return(error) ; 00126 } 00127 00128 void doEqu(void) 00129 { 00130 int error = 0 ; 00131 error = doCalc() ; 00132 if (error) { 00133 display("Error!") ; 00134 } else { 00135 display() ; 00136 } 00137 op = opPlus ; 00138 num_digit = 0 ; 00139 } 00140 00141 void initMenu(void) 00142 { 00143 int f_left = 18 ; 00144 int f_top = 14 ; 00145 00146 numMenu = 0 ; 00147 menu[numMenu++] = new TFTMenuItem( 5, 85, 55, 135, do7, "7", Green, Black, f_left, f_top) ; 00148 menu[numMenu++] = new TFTMenuItem( 65, 85, 115, 135, do8, "8", Green, Black, f_left, f_top) ; 00149 menu[numMenu++] = new TFTMenuItem(125, 85, 175, 135, do9, "9", Green, Black, f_left, f_top) ; 00150 menu[numMenu++] = new TFTMenuItem(185, 85, 235, 135, doClear, "C", Green, Black, f_left, f_top) ; 00151 00152 menu[numMenu++] = new TFTMenuItem( 5, 145, 55, 195, do4, "4", Green, Black, f_left, f_top) ; 00153 menu[numMenu++] = new TFTMenuItem( 65, 145, 115, 195, do5, "5", Green, Black, f_left, f_top) ; 00154 menu[numMenu++] = new TFTMenuItem(125, 145, 175, 195, do6, "6", Green, Black, f_left, f_top) ; 00155 menu[numMenu++] = new TFTMenuItem(185, 145, 235, 195, doMinus,"-", Green, Black, f_left, f_top) ; 00156 00157 menu[numMenu++] = new TFTMenuItem( 5, 205, 55, 255, do1, "1", Green, Black, f_left, f_top) ; 00158 menu[numMenu++] = new TFTMenuItem( 65, 205, 115, 255, do2, "2", Green, Black, f_left, f_top) ; 00159 menu[numMenu++] = new TFTMenuItem(125, 205, 175, 255, do3, "3", Green, Black, f_left, f_top) ; 00160 menu[numMenu++] = new TFTMenuItem(185, 205, 235, 255, doPlus, "+", Green, Black, f_left, f_top) ; 00161 00162 menu[numMenu++] = new TFTMenuItem( 5, 265, 55, 315, do0, "0", Green, Black, f_left, f_top) ; 00163 menu[numMenu++] = new TFTMenuItem( 65, 265, 115, 315, doMul ,"x", Green, Black, f_left, f_top) ; 00164 menu[numMenu++] = new TFTMenuItem(125, 265, 175, 315, doDiv, "/", Green, Black, f_left, f_top) ; 00165 menu[numMenu++] = new TFTMenuItem(185, 265, 235, 315, doEqu, "=", Green, Black, f_left, f_top) ; 00166 } 00167 00168 void drawMenu(void) 00169 { 00170 for (int i = 0 ; i < numMenu ; i++ ) { 00171 menu[i]->draw() ; 00172 } 00173 } 00174 00175 bool doMenu(uint16_t x, uint16_t y) 00176 { 00177 bool result = false ; 00178 00179 for (int i = 0 ; i < numMenu ; i++ ) { 00180 if (menu[i]->hit(x, y)) { 00181 menu[i]->doIt() ; 00182 menu[i]->draw() ; 00183 result = true ; 00184 // printf("%s TopValue = %d, PreValue = %d\n\r", menu[i]->name(), topValue, prevValue) ; 00185 break ; 00186 } 00187 } 00188 return( result ) ; 00189 }
Generated on Thu Jul 14 2022 06:26:05 by
1.7.2