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 でも動くようになりました。

Revision 0:659a74b77279, committed 2015-08-02
- Comitter:
- Rhyme
- Date:
- Sun Aug 02 14:00:59 2015 +0000
- Child:
- 1:1d311dfd5f5c
- Commit message:
- commit before publish;
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SPI_STMPE610.lib Sun Aug 02 14:00:59 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Rhyme/code/SPI_STMPE610/#34e7dc5991b5
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/TFTMenu.cpp Sun Aug 02 14:00:59 2015 +0000
@@ -0,0 +1,180 @@
+/** mbed oscilloscope my implementation of a oscillo scope
+ * Copyright (c) 2014, 2015 Motoo Tanaka @ Design Methodology Lab
+ *
+ * TFTMenu.cpp
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include "mbed.h"
+#include <ILI9341.h>
+#include "SPI_STMPE610.h"
+#include "Arial12x12.h"
+//#include "Arial24x23.h"
+#include "Arial28x28.h"
+//#include "Arial43x48_numb.h"
+#include "vt100.h"
+#include <string.h>
+
+#include "TFTMenu.h"
+
+extern ILI9341 TFT ;
+extern SPI_STMPE610 TSC ;
+extern vt100 *tty ;
+
+
+TFTMenuItem::TFTMenuItem(int x1, int y1, int x2, int y2, FuncPtr fnc,
+ char *name, uint16_t mcolor, uint16_t fcolor, int l_margin, int t_margin )
+{
+ left = x1 ;
+ right = x2 ;
+ top = y1 ;
+ bottom = y2 ;
+ if (name) {
+ label = new char[strlen(name)+1] ;
+ strcpy(label, name) ;
+ font_color = fcolor ;
+ }
+ menu_color = mcolor ;
+
+ left_margin = l_margin ; // 7 ;
+ top_margin = t_margin ; // 10 ;
+ func = fnc ;
+}
+
+TFTMenuItem::~TFTMenuItem()
+{
+ left = 0 ;
+ right = 0 ;
+ top = 0 ;
+ bottom = 0 ;
+ if (label) {
+ free(label) ;
+ }
+}
+
+TFTRadioButton::TFTRadioButton(int x1, int y1, int x2, int y2, FuncPtr fnc,
+ char *name, uint16_t mcolor, uint16_t fcolor,
+ char *altname, uint16_t altmcolor, uint16_t altfcolor,
+ bool sel) : TFTMenuItem(x1,y1,x2,y2,fnc,name,mcolor,fcolor)
+{
+ if (altname) {
+ alt_label = new char[strlen(altname) + 1] ;
+ strcpy(alt_label, altname) ;
+ } else {
+ alt_label = 0 ;
+ }
+ alt_font_color = altfcolor ;
+ alt_menu_color = altmcolor ;
+ selected = sel ;
+}
+
+TFTRadioButton::~TFTRadioButton()
+{
+ left = 0 ;
+ right = 0 ;
+ top = 0 ;
+ bottom = 0 ;
+ if (label) {
+ delete label ;
+ }
+ if (alt_label) {
+ delete alt_label ;
+ }
+}
+
+bool TFTRadioButton::hit(int x, int y)
+{
+ bool result = false ;
+ if ((left <= x)&&(x <= right)&&(top <= y)&&(y <= bottom)) {
+ result = true ;
+ if (selected) {
+ selected = false ;
+ } else {
+ selected = true ;
+ }
+ draw() ;
+ }
+ return( result ) ;
+}
+
+void TFTRadioButton::select(bool value)
+{
+ selected = value ;
+}
+
+uint16_t TFTMenuItem::getColor(void)
+{
+ return(menu_color) ;
+}
+
+bool TFTMenuItem::hit(int x, int y)
+{
+ bool result = false ;
+ if ((left <= x)&&(x <= right)&&(top <= y)&&(y <= bottom)) {
+ result = true ;
+ draw() ;
+ }
+// draw() ;
+ return( result ) ;
+}
+
+void TFTMenuItem::doIt(void)
+{
+ if (func) {
+ func() ;
+ }
+}
+
+void TFTMenuItem::font_margin(int x, int y)
+{
+ top_margin = y ;
+ left_margin = x ;
+}
+
+void TFTMenuItem::draw(int offset_x, int offset_y)
+{
+ TFT.BusEnable(true) ;
+ TFT.fillrect(left+offset_x, top+offset_y, right+offset_x, bottom+offset_y, Black) ;
+ TFT.fillrect(left+offset_x, top+offset_y, right+offset_x, bottom+offset_y, menu_color) ;
+ wait(0.1) ;
+ TFT.locate(left+offset_x+left_margin, top+offset_y+top_margin) ;
+ TFT.foreground(font_color) ;
+ TFT.background(menu_color) ;
+ TFT.set_font((unsigned char *)Arial28x28) ;
+ wait(0.1) ;
+ TFT.printf(label) ;
+ TFT.BusEnable(false) ;
+}
+
+void TFTRadioButton::draw(int offset_x, int offset_y)
+{
+ TFT.BusEnable(true) ;
+ if (selected) {
+ TFT.fillrect(left+offset_x, top+offset_y, right+offset_x, bottom+offset_y, Black) ;
+ TFT.fillrect(left+offset_x, top+offset_y, right+offset_x, bottom+offset_y, alt_menu_color) ;
+ wait(0.1) ;
+ TFT.locate(left+offset_x+left_margin, top+offset_y+top_margin) ;
+ TFT.foreground(alt_font_color) ;
+ TFT.background(alt_menu_color) ;
+ TFT.set_font((unsigned char *)Arial12x12) ;
+ wait(0.1) ;
+ TFT.printf(alt_label) ;
+ } else {
+ TFTMenuItem::draw(offset_x, offset_y) ;
+ }
+ TFT.BusEnable(false) ;
+}
+
+
+void TFTMenuItem::highlight(int offset_x, int offset_y)
+{
+ TFT.BusEnable(true) ;
+ TFT.rect(left+offset_x, top+offset_y, right+offset_x, bottom+offset_y, font_color) ;
+ TFT.BusEnable(false) ;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/TFTMenu.h Sun Aug 02 14:00:59 2015 +0000
@@ -0,0 +1,76 @@
+/** mbed oscilloscope my implementation of a oscillo scope
+ * Copyright (c) 2014, 2015 Motoo Tanaka @ Design Methodology Lab
+ *
+ * TFTMenu.h
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#ifndef _TFT_MENU_H_
+#define _TFT_MENU_H_ defined
+
+typedef void (*FuncPtr)(void) ;
+
+class TFTMenuItem {
+public:
+TFTMenuItem(int x1, int y1, int x2, int y2, FuncPtr fnc,
+ char *name, uint16_t mc, uint16_t fc,
+ int l_margin = 7, int t_margin = 10) ;
+~TFTMenuItem() ;
+virtual bool hit(int x, int y) ;
+virtual void draw(int offset_x = 0, int offset_y = 0) ;
+virtual void font_margin(int x, int y) ;
+void highlight(int offset_x = 0, int offset_y = 0) ;
+uint16_t getColor(void) ;
+void doIt(void) ;
+const char *name(void) { return label ; }
+
+protected:
+char *label ;
+uint16_t font_color ;
+uint16_t menu_color ;
+int top ;
+int bottom ;
+int left ;
+int right ;
+int left_margin ;
+int top_margin ;
+FuncPtr func ;
+private:
+} ;
+
+class TFTRadioButton : public TFTMenuItem {
+public:
+TFTRadioButton(int x1, int y1, int x2, int y2, FuncPtr fnc,
+ char *name, uint16_t mc, uint16_t fc,
+ char *altname = 0, uint16_t altmc = 0, uint16_t altfc = 0,
+ bool sel = false) ;
+~TFTRadioButton() ;
+
+virtual bool hit(int x, int y) ;
+virtual void draw(int offset_x = 0, int offset_y = 0) ;
+
+void select(bool value) ;
+
+protected:
+bool selected ;
+char *alt_label ;
+uint16_t alt_font_color ;
+uint16_t alt_menu_color ;
+// FuncPtr alt_func ;
+private:
+} ;
+
+class TFTMenu {
+public:
+TFTMenu() ; // constructor
+~TFTMenu() ; // destructor
+private:
+} ;
+
+#endif /* _TFT_MENU_H_ */
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/UniGraphic.lib Sun Aug 02 14:00:59 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/teams/GraphicsDisplay/code/UniGraphic/#f9a37f22b9cb
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Sun Aug 02 14:00:59 2015 +0000
@@ -0,0 +1,110 @@
+/** mbed oscilloscope my implementation of a oscillo scope
+ * Copyright (c) 2014, 2015 Motoo Tanaka @ Design Methodology Lab
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include "mbed.h"
+#include <string.h>
+#include <ILI9341.h>
+//#include "Arial12x12.h"
+//#include "Arial24x23.h"
+#include "Arial28x28.h"
+//#include "Arial43x48_numb.h"
+#include "SPI_STMPE610.h"
+#include "vt100.h"
+#include "TFTMenu.h"
+#include "menu.h"
+#include "main.h"
+
+vt100 tty ;
+DigitalOut tsc_cs(PIN_CS_TSC, 1) ;
+DigitalOut backlight(PIN_BL_TFT, 0) ;
+ILI9341 TFT(SPI_8, 10000000,
+ PIN_MOSI, PIN_MISO, PIN_SCLK,
+ PIN_CS_TFT, PIN_RESET_TFT, PIN_DC_TFT, "Adafruit2.8") ;
+SPI_STMPE610 TSC(PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TSC) ;
+TFTMenuItem *menu[NUM_MAX_MENU] ;
+int numMenu = 0 ;
+
+void initTFT(void)
+{
+ //Configure the display driver
+ TFT.BusEnable(true) ;
+ TFT.FastWindow(true) ;
+ TFT.background(Black);
+ TFT.foreground(White);
+ wait(0.01) ;
+ TFT.cls();
+ TFT.set_orientation(0) ;
+ wait(0.1) ;
+ TFT.BusEnable(false) ;
+}
+
+void hello()
+{
+ printf("=== simple calculator ===\n\r") ;
+ printf("built: %s\n\r",__DATE__) ;
+}
+
+void display(char *label)
+{
+ char str[16] ;
+ int dummy ;
+ int x = 200 ;
+ int y = 30 ;
+ int font_width = 16 ;
+ dummy = topValue ;
+
+ TFT.BusEnable(true) ;
+ TFT.fillrect(0, 0, 239, 80, Black) ;
+ wait(0.1) ;
+ TFT.foreground(White) ;
+ TFT.background(Black) ;
+ wait(0.01) ;
+ TFT.set_font((unsigned char *)Arial28x28) ;
+ wait(0.1) ;
+
+ if ((label != 0)&&(*label != 0)) {
+ strcpy(str, label) ;
+ } else {
+ sprintf(str, "%d", dummy) ;
+ }
+ x = 228 - (strlen(str) * font_width) ;
+ TFT.locate(x, y) ;
+ TFT.printf(str) ;
+ TFT.BusEnable(false) ;
+}
+
+int main()
+{
+ int touched ;
+ uint16_t x, y ;
+ bool result ;
+ tsc_cs = 1 ;
+
+ backlight = 0 ;
+ initTFT() ;
+ initMenu() ;
+ drawMenu() ;
+ backlight = 1 ;
+ hello() ;
+
+ display() ;
+
+ while(1) {
+// tsc_cs = 0 ;
+ touched = TSC.getPoint(&x, &y) ;
+// tsc_cs = 1 ;
+// if (touched && ((x != 0)||(y != 0))) { // TSC sometimes returns (0,0)
+ if ((x != 0)||(y !=0)) { // FRDM-KL46Z fails to return touched somehow
+ result = doMenu(x, y) ;
+ }
+ wait(0.1) ;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.h Sun Aug 02 14:00:59 2015 +0000 @@ -0,0 +1,101 @@ +/** mbed oscilloscope my implementation of a oscillo scope + * Copyright (c) 2014, 2015 Motoo Tanaka @ Design Methodology Lab + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#ifndef _MAIN_H_ +#define _MAIN_H_ inluded + +// uncomment following line if K64F rev is E or later +#define FRDM_K64F_VE + +#if defined (TARGET_KL25Z) +#define PIN_MOSI PTD2 +#define PIN_MISO PTD3 +#define PIN_SCLK PTD1 +#define PIN_CS_TFT PTD0 +#define PIN_DC_TFT PTD5 +#define PIN_BL_TFT PTC9 +#define PIN_CS_SD PTA4 +#define PIN_CS_TSC PTA13 +#define PIN_TSC_INTR PTC9 +#define PIN_RESET_TFT PTB10 +#define PIN_ADC_CH0 PTB0 +#define PIN_ADC_CH1 PTB1 + +#elif defined (TARGET_KL46Z) +#define PIN_MOSI PTD6 +#define PIN_MISO PTD7 +#define PIN_SCLK PTD5 +#define PIN_CS_TFT PTD4 +#define PIN_DC_TFT PTD2 +#define PIN_BL_TFT PTC9 +#define PIN_CS_SD PTA4 +#define PIN_CS_TSC PTA13 +#define PIN_TSC_INTR PTC9 +#define PIN_RESET_TFT PTA20 +#define PIN_ADC_CH0 PTB0 +#define PIN_ADC_CH1 PTB1 + +#elif defined (TARGET_K64F) +#define PIN_MOSI PTD2 +#define PIN_MISO PTD3 +#define PIN_SCLK PTD1 +#define PIN_CS_TFT PTD0 +#define PIN_DC_TFT PTC4 +#define PIN_BL_TFT PTC3 +#define PIN_CS_SD PTB23 +#ifdef FRDM_K64F_VE +#define PIN_CS_TSC PTC12 +#else +#define PIN_CS_TSC PTA0 +#endif +#define PIN_TSC_INTR PTC3 +#define PIN_RESET_TFT PTB20 +#define PIN_ADC_CH0 PTB2 +#define PIN_ADC_CH1 PTB3 + +#else + #error TARGET NOT DEFINED +#endif + +#define CHART_LEN 198 + +// NOTE: in case MIN_INTERVAL is too small +// the program hangs during ADC and timer interrupt +#define MIN_INTERVAL 30 +#define MAX_INTERVAL 20000 +#define NUM_MAX_MENU 20 +#define NUM_MAX_ANALOG_CH 2 +#define MODE_RUN 1 +#define MODE_STOP 0 + +#define opPlus 0 +#define opMinus 1 +#define opMul 2 +#define opDiv 3 + + +extern vt100 tty ; +extern AnalogIn *ach[] ; +extern Ticker timer ; + +extern DigitalOut backlight ; +extern ILI9341 TFT ; +extern SPI_STMPE610 TSC ; +extern TFTMenuItem *menu[] ; +extern int numMenu ; + +extern int num_digit ; +extern long prevValue ; +extern long topValue ; +extern int op ; + +void display(char *label = 0) ; +#endif /* _MAIN_H_ */ \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sun Aug 02 14:00:59 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/bad568076d81 \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/menu.cpp Sun Aug 02 14:00:59 2015 +0000
@@ -0,0 +1,189 @@
+/** mbed oscilloscope my implementation of a oscillo scope
+ * Copyright (c) 2014, 2015 Motoo Tanaka @ Design Methodology Lab
+ *
+ * menu.cpp
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include "mbed.h"
+#include <ILI9341.h>
+#include "SPI_STMPE610.h"
+//#include "Arial12x12.h"
+//#include "Arial24x23.h"
+#include "Arial28x28.h"
+//#include "Arial43x48_numb.h"
+#include "vt100.h"
+#include "TFTMenu.h"
+#include "menu.h"
+#include "main.h"
+
+#define NUM_MAX_DIGIT 8
+int num_digit = 0 ;
+long prevValue = 0 ;
+long topValue = 0 ;
+int op = opPlus ;
+
+void doDigit(int num)
+{
+ if (num_digit < NUM_MAX_DIGIT) {
+ topValue = topValue * 10 + num ;
+ num_digit++ ;
+ display() ;
+ }
+}
+
+void do0(void) { doDigit(0) ; }
+void do1(void) { doDigit(1) ; }
+void do2(void) { doDigit(2) ; }
+void do3(void) { doDigit(3) ; }
+void do4(void) { doDigit(4) ; }
+void do5(void) { doDigit(5) ; }
+void do6(void) { doDigit(6) ; }
+void do7(void) { doDigit(7) ; }
+void do8(void) { doDigit(8) ; }
+void do9(void) { doDigit(9) ; }
+
+void doPlus(void)
+{
+ doCalc() ;
+ prevValue = topValue ;
+ topValue = 0 ;
+ num_digit = 0 ;
+ op = opPlus ;
+ display("+") ;
+}
+
+void doMinus(void)
+{
+ doCalc() ;
+ prevValue = topValue ;
+ topValue = 0 ;
+ num_digit = 0 ;
+ op = opMinus ;
+ display("-") ;
+}
+
+void doMul(void)
+{
+ doCalc() ;
+ prevValue = topValue ;
+ topValue = 0 ;
+ num_digit = 0 ;
+ op = opMul ;
+ display("x") ;
+}
+
+void doDiv(void)
+{
+ doCalc() ;
+ prevValue = topValue ;
+ topValue = 0 ;
+ num_digit = 0 ;
+ op = opDiv ;
+ display("/") ;
+}
+
+void doClear(void)
+{
+ prevValue = 0 ;
+ topValue = 0 ;
+ num_digit = 0 ;
+ op = opPlus ;
+ display() ;
+}
+
+int doCalc(void)
+{
+ int error = 0 ;
+ switch(op) {
+ case opPlus:
+ topValue += prevValue ;
+ break ;
+ case opMinus:
+ topValue = prevValue - topValue ;
+ break ;
+ case opMul:
+ topValue = prevValue * topValue ;
+ break ;
+ case opDiv:
+ if (topValue != 0) {
+ topValue = prevValue / topValue ;
+ } else {
+ error = 1 ;
+ }
+ break ;
+ default:
+ break ;
+ }
+ prevValue = 0 ;
+ return(error) ;
+}
+
+void doEqu(void)
+{
+ int error = 0 ;
+ error = doCalc() ;
+ if (error) {
+ display("Error!") ;
+ } else {
+ display() ;
+ }
+ op = opPlus ;
+ num_digit = 0 ;
+}
+
+void initMenu(void)
+{
+ int f_left = 18 ;
+ int f_top = 14 ;
+
+ numMenu = 0 ;
+ menu[numMenu++] = new TFTMenuItem( 5, 85, 55, 135, do7, "7", Green, Black, f_left, f_top) ;
+ menu[numMenu++] = new TFTMenuItem( 65, 85, 115, 135, do8, "8", Green, Black, f_left, f_top) ;
+ menu[numMenu++] = new TFTMenuItem(125, 85, 175, 135, do9, "9", Green, Black, f_left, f_top) ;
+ menu[numMenu++] = new TFTMenuItem(185, 85, 235, 135, doClear, "C", Green, Black, f_left, f_top) ;
+
+ menu[numMenu++] = new TFTMenuItem( 5, 145, 55, 195, do4, "4", Green, Black, f_left, f_top) ;
+ menu[numMenu++] = new TFTMenuItem( 65, 145, 115, 195, do5, "5", Green, Black, f_left, f_top) ;
+ menu[numMenu++] = new TFTMenuItem(125, 145, 175, 195, do6, "6", Green, Black, f_left, f_top) ;
+ menu[numMenu++] = new TFTMenuItem(185, 145, 235, 195, doMinus,"-", Green, Black, f_left, f_top) ;
+
+ menu[numMenu++] = new TFTMenuItem( 5, 205, 55, 255, do1, "1", Green, Black, f_left, f_top) ;
+ menu[numMenu++] = new TFTMenuItem( 65, 205, 115, 255, do2, "2", Green, Black, f_left, f_top) ;
+ menu[numMenu++] = new TFTMenuItem(125, 205, 175, 255, do3, "3", Green, Black, f_left, f_top) ;
+ menu[numMenu++] = new TFTMenuItem(185, 205, 235, 255, doPlus, "+", Green, Black, f_left, f_top) ;
+
+ menu[numMenu++] = new TFTMenuItem( 5, 265, 55, 315, do0, "0", Green, Black, f_left, f_top) ;
+ menu[numMenu++] = new TFTMenuItem( 65, 265, 115, 315, doMul ,"x", Green, Black, f_left, f_top) ;
+ menu[numMenu++] = new TFTMenuItem(125, 265, 175, 315, doDiv, "/", Green, Black, f_left, f_top) ;
+ menu[numMenu++] = new TFTMenuItem(185, 265, 235, 315, doEqu, "=", Green, Black, f_left, f_top) ;
+}
+
+void drawMenu(void)
+{
+ for (int i = 0 ; i < numMenu ; i++ ) {
+ menu[i]->draw() ;
+ }
+}
+
+bool doMenu(uint16_t x, uint16_t y)
+{
+ bool result = false ;
+
+ for (int i = 0 ; i < numMenu ; i++ ) {
+ if (menu[i]->hit(x, y)) {
+ menu[i]->doIt() ;
+ menu[i]->draw() ;
+ result = true ;
+ // printf("%s TopValue = %d, PreValue = %d\n\r", menu[i]->name(), topValue, prevValue) ;
+ break ;
+ }
+ }
+ return( result ) ;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/menu.h Sun Aug 02 14:00:59 2015 +0000 @@ -0,0 +1,37 @@ +/** mbed oscilloscope my implementation of a oscillo scope + * Copyright (c) 2014, 2015 Motoo Tanaka @ Design Methodology Lab + * + * menu.h + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#ifndef _MENU_H_ +#define _MENU_H_ included + +int doCalc(void) ; +void do0(void) ; +void do1(void) ; +void do2(void) ; +void do3(void) ; +void do4(void) ; +void do5(void) ; +void do6(void) ; +void do7(void) ; +void do8(void) ; +void do9(void) ; +void doPlus(void) ; +void doMinus(void) ; +void doMul(void) ; +void doDiv(void) ; +void doClear(void) ; +void doEqu(void) ; +void initMenu(void) ; +void drawMenu(void) ; +bool doMenu(uint16_t x, uint16_t y) ; +#endif /* _MENU_H_ */ \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vt100.lib Sun Aug 02 14:00:59 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Rhyme/code/vt100/#62238d4d6032