Library used during 1 day workshops presented by Skool and ARM Hungary in 2015.

Fork of Skool_wkshp_lib2015 by Laszlo Vagasi

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?

UserRevisionLine numberNew 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 }