Library used during 1 day workshops presented by Skool and ARM Hungary in 2015.
Fork of Skool_wkshp_lib2015 by
menu.cpp@0:3ad0af8abf43, 2015-09-25 (annotated)
- Committer:
- lvagasi
- Date:
- Fri Sep 25 13:48:39 2015 +0000
- Revision:
- 0:3ad0af8abf43
- Child:
- 1:68d1a8c4970b
First version. Trying to put together all the necessary stuff into one single library.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lvagasi | 0:3ad0af8abf43 | 1 | #include "menu.h" |
lvagasi | 0:3ad0af8abf43 | 2 | #include "serial_lcd.h" |
lvagasi | 0:3ad0af8abf43 | 3 | #include "keypad.h" |
lvagasi | 0:3ad0af8abf43 | 4 | #include "rtc.h" |
lvagasi | 0:3ad0af8abf43 | 5 | |
lvagasi | 0:3ad0af8abf43 | 6 | const char MAINMENU_ITEMS[4][16] = {{0x90,'b','r','e','s','z','t',0x82,'s',' ','k','i','/','b','e',' '},//"Ébresztés ki/be "}, |
lvagasi | 0:3ad0af8abf43 | 7 | {'I','d',0x00,' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},//"Ido "}, |
lvagasi | 0:3ad0af8abf43 | 8 | {0x90,'b','r','e','s','z','t',0x82,'s',' ',' ',' ',' ',' ',' ',' '},//"Ébresztés "}, |
lvagasi | 0:3ad0af8abf43 | 9 | {'D',0xE0,'t','u','m',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}};//"Dátum "}}; |
lvagasi | 0:3ad0af8abf43 | 10 | const char MAINMENU_2NDLINE[16] = {' ',' ',' ',' ',' ',' ',' ','b','e',0xE0,'l','l',0xE1,'t',0xE0,'s'};//" beállítás"}; |
lvagasi | 0:3ad0af8abf43 | 11 | const char ALARM_A_TEXT[16] = {' ',' ',' ',0xFB,0x90,'b','r','e','s','z','t',0x00,0xFC,' ',' ',' '};//"<Ébreszto>" |
lvagasi | 0:3ad0af8abf43 | 12 | volatile FSM_State Main_FSM_States = IN_LOOP; |
lvagasi | 0:3ad0af8abf43 | 13 | volatile int MainMenu_CurrentItem = 0; |
lvagasi | 0:3ad0af8abf43 | 14 | extern int AlarmA_Enabled; |
lvagasi | 0:3ad0af8abf43 | 15 | |
lvagasi | 0:3ad0af8abf43 | 16 | void ShowMainMenuItem(int ItemNr) { |
lvagasi | 0:3ad0af8abf43 | 17 | write_ser_lcd(0x01, false); // Clear display |
lvagasi | 0:3ad0af8abf43 | 18 | wait_us(1100); |
lvagasi | 0:3ad0af8abf43 | 19 | write_ser_lcd(0x06, false); |
lvagasi | 0:3ad0af8abf43 | 20 | wait_us(30); |
lvagasi | 0:3ad0af8abf43 | 21 | write_ser_lcd(0x80, false); // Move address to beginning of first line |
lvagasi | 0:3ad0af8abf43 | 22 | wait_us(30); |
lvagasi | 0:3ad0af8abf43 | 23 | write_ser_text(MAINMENU_ITEMS[ItemNr], 16); |
lvagasi | 0:3ad0af8abf43 | 24 | if (ItemNr > 0) { |
lvagasi | 0:3ad0af8abf43 | 25 | write_ser_lcd(0xC0, false); // Move address to beginning of second line |
lvagasi | 0:3ad0af8abf43 | 26 | write_ser_text(MAINMENU_2NDLINE, 16); |
lvagasi | 0:3ad0af8abf43 | 27 | } |
lvagasi | 0:3ad0af8abf43 | 28 | } |
lvagasi | 0:3ad0af8abf43 | 29 | |
lvagasi | 0:3ad0af8abf43 | 30 | void ExecuteMainMenuItem(int ItemNr) { |
lvagasi | 0:3ad0af8abf43 | 31 | switch (ItemNr) { |
lvagasi | 0:3ad0af8abf43 | 32 | case 0: Main_FSM_States = ALARM_ON_OFF; |
lvagasi | 0:3ad0af8abf43 | 33 | if (AlarmA_Enabled == 0) { |
lvagasi | 0:3ad0af8abf43 | 34 | AlarmA_Enable(); |
lvagasi | 0:3ad0af8abf43 | 35 | } else AlarmA_Disable(); |
lvagasi | 0:3ad0af8abf43 | 36 | break; |
lvagasi | 0:3ad0af8abf43 | 37 | case 1: Main_FSM_States = SET_TIME; |
lvagasi | 0:3ad0af8abf43 | 38 | SetRTCTime(); |
lvagasi | 0:3ad0af8abf43 | 39 | break; |
lvagasi | 0:3ad0af8abf43 | 40 | case 2: Main_FSM_States = SET_ALARM; |
lvagasi | 0:3ad0af8abf43 | 41 | SetRTCAlarm(); |
lvagasi | 0:3ad0af8abf43 | 42 | break; |
lvagasi | 0:3ad0af8abf43 | 43 | case 3: Main_FSM_States = SET_DATE; |
lvagasi | 0:3ad0af8abf43 | 44 | SetRTCDate(); |
lvagasi | 0:3ad0af8abf43 | 45 | break; |
lvagasi | 0:3ad0af8abf43 | 46 | default: break; |
lvagasi | 0:3ad0af8abf43 | 47 | } |
lvagasi | 0:3ad0af8abf43 | 48 | } |
lvagasi | 0:3ad0af8abf43 | 49 | |
lvagasi | 0:3ad0af8abf43 | 50 | void MainMenu_Handler(void) { |
lvagasi | 0:3ad0af8abf43 | 51 | int keypress; |
lvagasi | 0:3ad0af8abf43 | 52 | int isexit = 0; |
lvagasi | 0:3ad0af8abf43 | 53 | |
lvagasi | 0:3ad0af8abf43 | 54 | MainMenu_CurrentItem = 0; |
lvagasi | 0:3ad0af8abf43 | 55 | ShowMainMenuItem(MainMenu_CurrentItem); |
lvagasi | 0:3ad0af8abf43 | 56 | while ((isexit == 0) | (Main_FSM_States != FINISH)) { |
lvagasi | 0:3ad0af8abf43 | 57 | keypress = Poll_keypad_vert(); |
lvagasi | 0:3ad0af8abf43 | 58 | switch (keypress) { |
lvagasi | 0:3ad0af8abf43 | 59 | case 0x01: MainMenu_CurrentItem = ((MainMenu_CurrentItem == 0) ? 0 : MainMenu_CurrentItem - 1); |
lvagasi | 0:3ad0af8abf43 | 60 | ShowMainMenuItem(MainMenu_CurrentItem); |
lvagasi | 0:3ad0af8abf43 | 61 | break; |
lvagasi | 0:3ad0af8abf43 | 62 | case 0x05: ExecuteMainMenuItem(MainMenu_CurrentItem); |
lvagasi | 0:3ad0af8abf43 | 63 | isexit = 1; |
lvagasi | 0:3ad0af8abf43 | 64 | break; |
lvagasi | 0:3ad0af8abf43 | 65 | case 0x09: MainMenu_CurrentItem = ((MainMenu_CurrentItem == MAINMENU_ITEMMAX - 1) ? MAINMENU_ITEMMAX - 1 : MainMenu_CurrentItem + 1); |
lvagasi | 0:3ad0af8abf43 | 66 | ShowMainMenuItem(MainMenu_CurrentItem); |
lvagasi | 0:3ad0af8abf43 | 67 | break; |
lvagasi | 0:3ad0af8abf43 | 68 | case 0x0E: isexit = 1; |
lvagasi | 0:3ad0af8abf43 | 69 | break; |
lvagasi | 0:3ad0af8abf43 | 70 | default: break; |
lvagasi | 0:3ad0af8abf43 | 71 | } |
lvagasi | 0:3ad0af8abf43 | 72 | } |
lvagasi | 0:3ad0af8abf43 | 73 | write_ser_lcd(0x01, false); |
lvagasi | 0:3ad0af8abf43 | 74 | wait_us(1100); |
lvagasi | 0:3ad0af8abf43 | 75 | write_ser_lcd(0x06, false); |
lvagasi | 0:3ad0af8abf43 | 76 | wait_us(30); |
lvagasi | 0:3ad0af8abf43 | 77 | write_ser_lcd(0x0C, false); |
lvagasi | 0:3ad0af8abf43 | 78 | wait_us(30); |
lvagasi | 0:3ad0af8abf43 | 79 | ShowTime(); |
lvagasi | 0:3ad0af8abf43 | 80 | ShowDate(); |
lvagasi | 0:3ad0af8abf43 | 81 | HAL_GPIO_WritePin(GPIOC, cols[0] | cols[1] | cols[2], GPIO_PIN_SET); |
lvagasi | 0:3ad0af8abf43 | 82 | HAL_GPIO_WritePin(GPIOC, cols[2], GPIO_PIN_RESET); |
lvagasi | 0:3ad0af8abf43 | 83 | Main_FSM_States = IN_LOOP; |
lvagasi | 0:3ad0af8abf43 | 84 | } |
lvagasi | 0:3ad0af8abf43 | 85 | |
lvagasi | 0:3ad0af8abf43 | 86 | void ShowAlarmText(void) { |
lvagasi | 0:3ad0af8abf43 | 87 | write_ser_lcd(0x01, false); // Clear display |
lvagasi | 0:3ad0af8abf43 | 88 | wait_us(1100); |
lvagasi | 0:3ad0af8abf43 | 89 | write_ser_lcd(0x06, false); // Entry mode set |
lvagasi | 0:3ad0af8abf43 | 90 | wait_us(30); |
lvagasi | 0:3ad0af8abf43 | 91 | write_ser_lcd(0x80, false); // set DDRAM addr to 0x00, beginning of 1st line |
lvagasi | 0:3ad0af8abf43 | 92 | wait_us(30); |
lvagasi | 0:3ad0af8abf43 | 93 | write_ser_text(ALARM_A_TEXT, 16); |
lvagasi | 0:3ad0af8abf43 | 94 | } |