Op Panel
Dependencies: mbed TextLCD_ST7565SPI ST7565SPI
Revision 1:84c425d62f13, committed 2019-02-19
- Comitter:
- Valenz
- Date:
- Tue Feb 19 05:42:38 2019 +0000
- Parent:
- 0:d53b674e7f03
- Commit message:
- Op Panel tester offline
Changed in this revision
TextLCD_ST7565SPI.lib | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r d53b674e7f03 -r 84c425d62f13 TextLCD_ST7565SPI.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TextLCD_ST7565SPI.lib Tue Feb 19 05:42:38 2019 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/kayekss/code/TextLCD_ST7565SPI/#1ea133b6a4de
diff -r d53b674e7f03 -r 84c425d62f13 main.cpp --- a/main.cpp Sun Mar 01 19:30:56 2015 +0000 +++ b/main.cpp Tue Feb 19 05:42:38 2019 +0000 @@ -1,10 +1,64 @@ #include "mbed.h" -#include "ST7565SPI.h" +//#include "ST7565SPI.h" +#include "TextLCD_ST7565SPI.h" + +#define READBUFFERSIZE (32) +#define KEY_ROW0 PA_8 +#define KEY_ROW1 PB_10 +#define KEY_ROW2 PB_4 +#define KEY_ROW3 PB_5 +#define KEY_ROW4 PB_3 +#define KEY_ROW5 PB_13 +#define KEY_ROW6 PB_14 +#define KEY_ROW7 PB_15 + +#define KEY_COL0 PB_1 +#define KEY_COL1 PB_2 +#define KEY_COL2 PB_11 +#define KEY_COL3 PB_12 + + +#define POWER_ON PC_4 + +typedef struct KEYPAD { + DigitalIn row; + DigitalOut col; + bool key_press; + char name[7]; + char key; +} KEYPAD; -ST7565SPI lcd(/*MOSI*/ p5, /*SCK*/ p7, /*CS*/ p8, - /*RS*/ p11, /*RST*/ p12, /*Frequency*/ 1000000); +char buffer[50] = "HELLO, WORLD!! HELLO, WORLD!! HELLO, WORLD!! "; + +Serial pc(USBTX, USBRX); + +DigitalIn ROW0(KEY_ROW0,PullDown); +DigitalIn ROW1(KEY_ROW1,PullDown); +DigitalIn ROW2(KEY_ROW2,PullDown); +DigitalIn ROW3(KEY_ROW3,PullDown); +DigitalIn ROW4(KEY_ROW4,PullDown); +DigitalIn ROW5(KEY_ROW5,PullDown); +DigitalIn ROW6(KEY_ROW6,PullDown); +DigitalIn ROW7(KEY_ROW7,PullDown); -// Dithered gray patterns + +DigitalOut COL0(KEY_COL0, 0); +DigitalOut COL1(KEY_COL1, 0); +DigitalOut COL2(KEY_COL2, 0); +DigitalOut COL3(KEY_COL3, 0); + +DigitalOut POWR(POWER_ON, 0); + +bool col0_pressed = false; +bool col1_pressed = false; +bool col2_pressed = false; +bool col3_pressed = false; +bool power_on = false; + +TextLCD_ST7565SPI lcd(/*MOSI*/ PA_7, /*SCK*/ PA_5, /*CS*/ PB_6, + /*RS*/ PC_7, /*RST*/ PA_9,21, 4 );// /*Frequency */1000000); + +/*/ Dithered gray patterns uint8_t const pattern[8][4] = { { 0xff, 0xff, 0xff, 0xff }, // 100% { 0x77, 0xff, 0xdd, 0xff }, // 87.5% @@ -14,33 +68,342 @@ { 0x55, 0x22, 0x55, 0x88 }, // 37.5% { 0x55, 0x00, 0x55, 0x00 }, // 25% { 0x11, 0x00, 0x44, 0x00 } // 12.5% -}; +};*/ + +void setOut(int data) +{ + switch (data) + { + case 0: + COL0 = 1; + COL1 = 0; + COL2 = 0; + COL3 = 0; + break; + case 1: + COL0 = 0; + COL1 = 1; + COL2 = 0; + COL3 = 0; + break; + case 2: + COL0 = 0; + COL1 = 0; + COL2 = 1; + COL3 = 0; + break; + case 3: + COL0 = 0; + COL1 = 0; + COL2 = 0; + COL3 = 1; + break; + default: + COL0 = 0; + COL1 = 0; + COL2 = 0; + COL3 = 0; + } +} + +int ReadLineString( Serial& serial, char szReadBuffer[], const int ciReadBufferSize, int& riIndexChar, char szLineString[], const int ciLineStringSize ) +{ + while( 1 ) + { + if( !serial.readable() ) + { + break; + } + char c = serial.getc(); + if( 'r' == c ) + { + szReadBuffer[riIndexChar] = '\0'; + strncpy( szLineString, szReadBuffer, ciLineStringSize - 1 ); + szLineString[ciLineStringSize - 1] = '\0'; + riIndexChar = 0; + return 1; + } + else if( 's' == c ) + { + szReadBuffer[riIndexChar] = '\0'; + strncpy( szLineString, szReadBuffer, ciLineStringSize - 1 ); + szLineString[ciLineStringSize - 1] = '\0'; + riIndexChar = 0; + return 2; + } + else + { + if( (ciReadBufferSize - 1) > riIndexChar ) + { + szReadBuffer[riIndexChar] = c; + riIndexChar++; + } + } + } + return 0; +} int main(void) { - // Initialize LCD - lcd.init(/*V0*/ 3, /*Contrast*/ 48, /*Bias*/ ST7565SPI::Bias1_9); + // Initialize LCD + pc.baud(115200); + + POWR = 1; + wait_ms(100); + POWR = 0; + + char szReadBuffer[READBUFFERSIZE] = ""; + int iIndexChar = 0; + + char mesg[21]; + uint8_t count = 0; + uint8_t a = 0; + uint16_t c = 0; + int x = 0; + char szLineString[READBUFFERSIZE]; + while (1){ + + x = ReadLineString( pc, szReadBuffer, READBUFFERSIZE, iIndexChar, szLineString, READBUFFERSIZE ); + //pc.printf("x = %d\n", x); + switch (x){ + case 1: + power_on=true; + POWR = 1; + lcd.init(/*V0*/ 3, /*Contrast*/ 100, /*Bias*/ TextLCD_ST7565SPI::Bias1_9); + lcd.cls(); + lcd.locate(0, 0); + //lcd.printf(buffer); + wait_ms(100); + + count = 0; + a = 0; + c = 0; + //lcd.locate(count, 4); + break; + case 2: + power_on=false; + POWR = 0; + COL0 = 0; + COL1 = 0; + COL2 = 0; + COL3 = 0; + default: + break; + } + + if (power_on) { + + if (c==0) { + c = 400; + for (int i = 0; i<21; i++) + { + mesg[i] = buffer[count + i]; + } + count++; + lcd.locate(0, 0); + lcd.printf("%s\r\n",mesg); + if (count==16) count = 0; + + lcd.locate(7, 2); + lcd.printf(" "); + + }else c--; + + + if(a == 0) a = 3; + else a--; - // Draw horizontal stripes - for (uint8_t j = 0; j < 8; j++) { - lcd.setPage(j); - lcd.setColumn(0); - for (uint8_t i = 0; i < 128 / 4; i++) { - lcd.data(pattern[j][0]); - lcd.data(pattern[j][1]); - lcd.data(pattern[j][2]); - lcd.data(pattern[j][3]); + setOut(a); + lcd.locate(7, 2); + switch (a){ + case 0: + if(ROW0){ + if(!col0_pressed){ + pc.printf("A"); + col0_pressed = true; + } + lcd.printf(" REDIAL "); + }else if(ROW1){ + if(!col0_pressed){ + pc.printf("H"); + col0_pressed = true; + } + lcd.printf(" START "); + }else if(ROW2) { + if(!col0_pressed){ + pc.printf("B"); + col0_pressed = true; + } + lcd.printf(" BACK "); + }else if(ROW3){ + if(!col0_pressed){ + pc.printf("C"); + col0_pressed = true; + } + lcd.printf(" CANCEL "); + }else if(ROW4){ + if(!col0_pressed){ + pc.printf("9"); + col0_pressed = true; + } + lcd.printf(" 9 "); + }else if(ROW5) { + if(!col0_pressed){ + pc.printf("8"); + col0_pressed = true; + } + lcd.printf(" 8 "); + }else if(ROW6){ + if(!col0_pressed){ + pc.printf("7"); + col0_pressed = true; + } + lcd.printf(" 7 "); + }else if(ROW7) { + if(!col0_pressed){ + pc.printf("D"); + col0_pressed = true; + } + lcd.printf("PhoneBook"); + }else col0_pressed = false; + + break; + case 1: + if(ROW0){ + if(!col1_pressed){ + pc.printf("E"); + col1_pressed = true; + } + lcd.printf("HandsFree"); + }else if(ROW1){ + if(!col1_pressed){ + pc.printf("F"); + col1_pressed = true; + } + lcd.printf(" OK "); + }else if(ROW2) { + if(!col1_pressed){ + pc.printf("G"); + col1_pressed = true; + } + lcd.printf(" DOWN "); + }else if(ROW3){ + if(!col1_pressed){ + pc.printf("*"); + col1_pressed = true; + } + lcd.printf(" * "); + }else if(ROW4){ + if(!col1_pressed){ + pc.printf("6"); + col1_pressed = true; + } + lcd.printf(" 6 "); + }else if(ROW5) { + if(!col1_pressed){ + pc.printf("5"); + col1_pressed = true; + } + lcd.printf(" 5 "); + }else if(ROW6){ + if(!col1_pressed){ + pc.printf("4"); + col1_pressed = true; + } + lcd.printf(" 4 "); + }else col1_pressed = false; + + break; + case 2: + if(ROW1){ + if(!col2_pressed){ + pc.printf("I"); + col2_pressed = true; + } + lcd.printf(" UP "); + }else if(ROW2){ + if(!col2_pressed){ + pc.printf("J"); + col2_pressed = true; + } + lcd.printf(" MENU "); + }else if(ROW3) { + if(!col2_pressed){ + pc.printf("0"); + col2_pressed = true; + } + lcd.printf(" 0 "); + }else if(ROW4){ + if(!col2_pressed){ + pc.printf("3"); + col2_pressed = true; + } + lcd.printf(" 3 "); + }else if(ROW5){ + if(!col2_pressed){ + pc.printf("2"); + col2_pressed = true; + } + lcd.printf(" 2 "); + }else if(ROW6) { + if(!col2_pressed){ + pc.printf("1"); + col2_pressed = true; + } + lcd.printf(" 1 "); + }else col2_pressed = false; + + break; + case 3: + if(ROW0){ + if(!col3_pressed){ + pc.printf("K"); + col3_pressed = true; + } + lcd.printf(" WiFi "); + }else if(ROW1){ + if(!col3_pressed){ + pc.printf("L"); + col3_pressed = true; + } + lcd.printf(" Receipt "); + }else if(ROW2) { + if(!col3_pressed){ + pc.printf("M"); + col3_pressed = true; + } + lcd.printf(" ID "); + }else if(ROW3){ + if(!col3_pressed){ + pc.printf("#"); + col3_pressed = true; + } + lcd.printf(" # "); + }else if(ROW4){ + if(!col3_pressed){ + pc.printf("N"); + col3_pressed = true; + } + lcd.printf(" COPY "); + }else if(ROW5) { + if(!col3_pressed){ + pc.printf("O"); + col3_pressed = true; + } + lcd.printf(" SCAN "); + }else if(ROW6){ + if(!col3_pressed){ + pc.printf("P"); + col3_pressed = true; + } + lcd.printf(" FAX "); + }else col3_pressed = false; + + break; + default: + break; + } + wait_ms(1); } } - - // Scroll entire display by changing line offset values - uint8_t c = 0; - while (1) { - lcd.command(ST7565SPI::COMMON_OFFSET + c); - if (c == 0) { - c = 63; - } else { - c--; - } - wait(.25); - } + }