void do_menu(uint8_t func_number) { // lcd_MEM2_string(DoMenu_str); // "do menu " // u2lcd(func_number); if (func_number == MODE_FREQ) GetFrequency(0); #if PROCESSOR_TYP == 644 if (func_number == MODE_HFREQ) GetFrequency(1); // measure high frequency with 16:1 divider if (func_number == MODE_H_CRYSTAL) GetFrequency(5); // HF crystal input + 16:1 divider if (func_number == MODE_L_CRYSTAL) GetFrequency(6); // LF crystal input, 1:1 divider #endif if (func_number == MODE_FGEN) { make_frequency(); // make some sample frequencies } if (func_number == MODE_PWM) { do_10bit_PWM(); // generate 10bit PWM } if (func_number == MODE_ESR) { show_C_ESR(); // measure capacity and ESR at TP1 and TP3 } if (func_number == MODE_RESIS) { show_Resis13(); // measure resistor at TP1 and TP3 } if (func_number == MODE_CAP13) { lcd_clear(); show_Cap13(); // measure capacitor at TP1 and TP3 } #ifdef WITH_ROTARY_CHECK if (func_number == MODE_ROTARY) { CheckRotaryEncoder(); // check rotary encoder } #endif if (func_number == MODE_BIG_CAP_CORR) { set_big_cap_corr(); } #ifdef WITH_SELFTEST if (func_number == MODE_SELFTEST) AutoCheck(0x11); // Full selftest with calibration #endif if (func_number == MODE_VEXT) show_vext(); #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || defined(LCD_DOGM)) if (func_number == MODE_CONTRAST) set_contrast(); #endif if (func_number == MODE_SHOW) { ShowData(); // Show Calibration Data } if (func_number == MODE_OFF) { ON_PORT &= ~(1<<ON_PIN); //switch off power wait_for_key_ms(0); //never ending loop } }
/* ****************************************************************** */ void function_menu() { uint8_t ii; uint8_t func_number; #ifdef PAGE_MODE uint8_t page_nr; uint8_t p_nr; uint8_t ff; page_nr = MODE_LAST; #ifdef WITH_ROTARY_SWITCH rotary.count = 0; #endif #endif func_number = 0; #ifdef POWER_OFF uint8_t ll; for (ll=0;ll<((MODE_LAST+1)*10);ll++) #else while (1) /* without end, if no power off specified */ #endif { if (func_number > MODE_LAST) func_number -= (MODE_LAST + 1); message_key_released(SELECTION_str); #ifdef FOUR_LINE_LCD #ifdef PAGE_MODE ff = 0; if (func_number == page_nr) ff = 1; // number is found p_nr = page_nr + 1; if (p_nr > MODE_LAST) p_nr -= (MODE_LAST + 1); if (func_number == p_nr) ff = 1; // number is found p_nr = page_nr + 2; if (p_nr > MODE_LAST) p_nr -= (MODE_LAST + 1); if (func_number == p_nr) ff = 1; // number is found if (ff == 0) { // func_number is not in page list #ifdef WITH_ROTARY_SWITCH if (rotary.count >= 0) { page_nr = (func_number + MODE_LAST -1); // page_nr = func_number - 2 } else { page_nr = func_number; // for backward, set page_nr to func_number } if (page_nr > MODE_LAST) page_nr -= (MODE_LAST + 1); #else page_nr = func_number; #endif } if (ff == 0) { lcd_line2(); lcd_clear_line(); // clear line 2 } lcd_line2(); // reset cursor to begin of line 2 if (func_number == page_nr) { lcd_data('>'); } else { lcd_space(); // put a blank to 1. row of line 2 } message2line(page_nr); // show first page function if (ff == 0) { lcd_line3(); lcd_clear_line(); // clear line 3 } lcd_line3(); // reset cursor to begin of line 3 p_nr = page_nr + 1; if (p_nr > MODE_LAST) p_nr -= (MODE_LAST + 1); if (func_number == p_nr) { lcd_data('>'); } else { lcd_space(); // put a blank to 1. row of line 3 } message2line(p_nr); // show 2. page function if (ff == 0) { lcd_line4(); lcd_clear_line(); // clear line 4 } lcd_line4(); // reset cursor to begin of line 4 p_nr = page_nr + 2; if (p_nr > MODE_LAST) p_nr -= (MODE_LAST + 1); if (func_number == p_nr) { lcd_data('>'); } else { lcd_space(); // put a blank to 1. row of line 4 } message2line(p_nr); // show 3. page function #else /* no PAGE_MODE */ lcd_line2(); lcd_clear_line(); // clear line 2 lcd_line2(); // reset cursor to begin of line 2 lcd_space(); // put a blank to 1. row of line 2 message2line(func_number + MODE_LAST); // show lower (previous) function lcd_line3(); lcd_clear_line(); // clear line 3 lcd_line3(); // reset cursor to begin of line 3 lcd_data('>'); // put a '>' marker to row 1 of line 3 message2line(func_number); // show selectable function lcd_line4(); lcd_clear_line(); // clear line 4 lcd_line4(); // reset cursor to begin of line 4 lcd_space(); // put a blank to 1. row of line 4 message2line(func_number + 1); // show higher (next) function #endif /* PAGE_MODE */ #else /* no FOUR_LINE_LCD */ lcd_line2(); lcd_clear_line(); // clear line 2 lcd_line2(); // reset cursor to begin of line 2 message2line(func_number); #endif /* FOUR_LINE_LCD */ #ifdef POWER_OFF ii = wait_for_key_ms(SHORT_WAIT_TIME); // wait about 5 seconds if (ii > 0) ll = 0; // reset timer, operator present #else ii = wait_for_key_ms(0); // wait endless #endif #ifdef WITH_ROTARY_SWITCH if ((ii >= MIN_SELECT_TIME) || ((rotary_switch_present != 0) && (ii > 0))) #else if (ii >= MIN_SELECT_TIME) #endif { // selection only with key-press if (func_number == MODE_TRANS) break; // return to TransistorTester if (func_number == MODE_FREQ) GetFrequency(0); #if PROCESSOR_TYP == 644 if (func_number == MODE_HFREQ) GetFrequency(1); // measure high frequency with 16:1 divider if (func_number == MODE_H_CRYSTAL) GetFrequency(5); // HF crystal input + 16:1 divider if (func_number == MODE_L_CRYSTAL) GetFrequency(6); // LF crystal input, 1:1 divider #endif if (func_number == MODE_FGEN) { make_frequency(); // make some sample frequencies } if (func_number == MODE_PWM) { do_10bit_PWM(); // generate 10bit PWM } if (func_number == MODE_ESR) { show_C_ESR(); // measure capacity and ESR at TP1 and TP3 } if (func_number == MODE_ROTARY) { CheckRotaryEncoder(); // check rotary encoder } #ifdef WITH_SELFTEST if (func_number == MODE_SELFTEST) AutoCheck(0x11); // Full selftest with calibration #endif if (func_number == MODE_VEXT) show_vext(); #if (LCD_ST_TYPE == 7565) if (func_number == MODE_CONTRAST) set_contrast(); #endif if (func_number == MODE_SHOW) { ShowData(); // Show Calibration Data } if (func_number == MODE_OFF) { ON_PORT &= ~(1<<ON_PIN); //switch off power wait_for_key_ms(0); //never ending loop } // don't increase function number for easier selection the same function ii = 0; // function was executed before, do not increase func_number #ifdef WITH_ROTARY_SWITCH rotary.incre = 0; // reset all rotary information rotary.count = 0; #endif } /* end if (ii >= MIN_SELECT_TIME) */ #ifdef WITH_ROTARY_SWITCH if (rotary.incre >= FAST_ROTATION) break; // to much rotation #ifdef POWER_OFF if (rotary.count != 0) ll = 0; // someone is working, reset timer #endif if (rotary.count >= 0) { func_number += rotary.count; // function number is increased by rotary steps } else { func_number += (MODE_LAST + 1 + rotary.count); // function is decreased by rotary steps } #endif if (ii > 0) func_number++; // increase the function number with key press } /* end for ll */ return; } // end function_menu()
/* ****************************************************************** */ void function_menu() { uint8_t ii; uint8_t func_number; #ifdef PAGE_MODE uint8_t page_nr; uint8_t p_nr; uint8_t ff; page_nr = MODE_LAST; #ifdef WITH_ROTARY_SWITCH rotary.count = 0; #endif #endif func_number = 0; message_key_released(SELECTION_str); #ifdef POWER_OFF uint8_t ll; for (ll=0;ll<((MODE_LAST+1)*10);ll++) #else while (1) /* without end, if no power off specified */ #endif { if (func_number > MODE_LAST) func_number -= (MODE_LAST + 1); #if (LCD_LINES > 3) uint8_t mm; #ifdef PAGE_MODE ff = 0; mm = 0; do { p_nr = page_nr + mm; if (p_nr > MODE_LAST) p_nr -= (MODE_LAST + 1); if (func_number == p_nr) ff = 1; // number is found } while (++mm < MENU_LINES); if (ff == 0) { // func_number is not in page list #ifdef WITH_ROTARY_SWITCH if (rotary.count >= 0) { page_nr = (func_number + MODE_LAST -1); // page_nr = func_number - 2 } else { page_nr = func_number; // for backward, set page_nr to func_number } if (page_nr > MODE_LAST) page_nr -= (MODE_LAST + 1); #else page_nr = func_number; #endif } mm= 0; do { p_nr = page_nr + mm; if (p_nr > MODE_LAST) p_nr -= (MODE_LAST + 1); lcd_set_cursor((mm+1)*PAGES_PER_LINE,0); if (func_number == p_nr) { lcd_data('>'); } else { lcd_space(); // put a blank to 1. row of line 2 } message2line(p_nr); // show page function } while (++mm < MENU_LINES); #else /* no PAGE_MODE */ uint8_t f_nr; mm = 0; do { lcd_set_cursor((mm+1)*PAGES_PER_LINE,0); if (mm == MENU_MIDDLE) { lcd_data('>'); // put a '>' marker to row 1 of line 4 } else { lcd_space(); // put a blank to 1. row of line 2 } f_nr = func_number + MODE_LAST + 1 - MENU_MIDDLE + mm; if (f_nr > MODE_LAST) f_nr -= (MODE_LAST +1); message2line(f_nr); // show function for this line } while (++mm < MENU_LINES); #endif /* PAGE_MODE */ #else /* not LCD_LINES > 3 */ lcd_line2(); message2line(func_number); #endif /* (LCD_LINES > 3) */ #ifdef POWER_OFF ii = wait_for_key_ms(SHORT_WAIT_TIME); // wait about 5 seconds if (ii > 0) ll = 0; // reset timer, operator present if (DC_Pwr_mode == 1) ll = 0; #else ii = wait_for_key_ms(0); // wait endless #endif #ifdef WITH_ROTARY_SWITCH if ((ii >= MIN_SELECT_TIME) || ((rotary_switch_present != 0) && (ii > 0))) #else if (ii >= MIN_SELECT_TIME) #endif { // selection only with key-press if (func_number == MODE_TRANS) break; // return to TransistorTester if (func_number == MODE_FREQ) GetFrequency(0); #if PROCESSOR_TYP == 644 if (func_number == MODE_HFREQ) GetFrequency(1); // measure high frequency with 16:1 divider if (func_number == MODE_H_CRYSTAL) GetFrequency(5); // HF crystal input + 16:1 divider if (func_number == MODE_L_CRYSTAL) GetFrequency(6); // LF crystal input, 1:1 divider #endif if (func_number == MODE_FGEN) { make_frequency(); // make some sample frequencies } if (func_number == MODE_PWM) { do_10bit_PWM(); // generate 10bit PWM } if (func_number == MODE_ESR) { show_C_ESR(); // measure capacity and ESR at TP1 and TP3 } if (func_number == MODE_RESIS) { show_Resis13(); // measure resistor at TP1 and TP3 } if (func_number == MODE_CAP13) { lcd_clear(); show_Cap13(); // measure capacitor at TP1 and TP3 } if (func_number == MODE_ROTARY) { CheckRotaryEncoder(); // check rotary encoder } if (func_number == MODE_BIG_CAP_CORR) { set_big_cap_corr(); } #ifdef WITH_SELFTEST if (func_number == MODE_SELFTEST) AutoCheck(0x11); // Full selftest with calibration #endif if (func_number == MODE_VEXT) show_vext(); #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || defined(LCD_DOGM)) if (func_number == MODE_CONTRAST) set_contrast(); #endif if (func_number == MODE_SHOW) { ShowData(); // Show Calibration Data } if (func_number == MODE_OFF) { ON_PORT &= ~(1<<ON_PIN); //switch off power wait_for_key_ms(0); //never ending loop } // don't increase function number for easier selection the same function ii = 0; // function was executed before, do not increase func_number #ifdef WITH_ROTARY_SWITCH rotary.incre = 0; // reset all rotary information rotary.count = 0; #endif message_key_released(SELECTION_str); //write Line 1 with Selection: } /* end if (ii >= MIN_SELECT_TIME) */ #ifdef WITH_ROTARY_SWITCH if (rotary.incre >= FAST_ROTATION) break; // to much rotation #ifdef POWER_OFF if (rotary.count != 0) ll = 0; // someone is working, reset timer #endif if (rotary.count >= 0) { func_number += rotary.count; // function number is increased by rotary steps } else { func_number += (MODE_LAST + 1 + rotary.count); // function is decreased by rotary steps } #endif if (ii > 0) func_number++; // increase the function number with key press } /* end for ll */ return; } // end function_menu()