X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=main.c;h=ab3cf83c973beafac86f37df5080bfecb36b5dd2;hb=572033cb9097fea5474c436afb279694a286733c;hp=b97cf3a9713472d35b79a6e1595211dd64dbc24a;hpb=c1796d98d5a03a22885e2b02cae964ae61caf3ba;p=openi2cradio%2FOpenI2CRadio.git diff --git a/main.c b/main.c index b97cf3a..ab3cf83 100644 --- a/main.c +++ b/main.c @@ -30,10 +30,16 @@ #include #include #include + +#if defined(__SDCC) #include #include /* ONLY FOR PIC18x */ -#include #include +#else +#include +#endif + +#include #include "iodef.h" #include "idle.h" @@ -44,6 +50,9 @@ #include "eeprom.h" #include "ioports.h" #include "menu.h" +#include "power.h" +#include "adc_int.h" + /* * Config words. */ @@ -51,7 +60,7 @@ //#pragma stack 0x200 256 // Set stack size to 256bytes. #pragma config FOSC=INTIO67,BORV=190,BOREN=ON,PWRTEN=ON #pragma config WDTEN=ON,WDTPS=32768 -#pragma config PBADEN=OFF,MCLRE=EXTMCLR,STVREN=ON,LVP=OFF,DEBUG=ON//,XINST=ON +#pragma config PBADEN=OFF,MCLRE=EXTMCLR,STVREN=ON,LVP=OFF,DEBUG=ON,XINST=ON //#pragma config PBADEN=OFF,MCLRE=EXTMCLR,STVREN=ON,LVP=OFF//,XINST=ON #pragma config CP0=OFF,CP1=OFF,CPB=OFF,CPD=OFF #pragma config WRT0=OFF,WRT1=OFF,WRTB=OFF,WRTC=OFF,WRTD=OFF @@ -59,633 +68,296 @@ #endif // For 4xK20 or 2xK20 Series #if defined(pic18f43k20) || defined(pic18f44k20) || defined(pic18f45k20) || defined(pic18f46k20) || \ - defined(pic18f23k20) || defined(pic18f24k20) || defined(pic18f25k20) || defined(pic18f26k20) + defined(pic18f23k20) || defined(pic18f24k20) || defined(pic18f25k20) || defined(pic18f26k20) || \ + defined(_18F43K20) || defined(_18F44K20) || defined(_18F45K20) || defined(_18F46K20) || \ + defined(_18F23K20) || defined(_18F24K20) || defined(_18F25K20) || defined(_18F26K20) +#ifdef __SDCC #pragma stack 0x200 256 -#pragma config FOSC=HS,FCMEN=ON,PWRT=ON,BOREN=ON,BORV=22 -#pragma config WDTEN=ON,WDTPS=32768,PBADEN=OFF,HFOFST=ON,LPT1OSC=OFF,MCLRE=ON -#pragma config STVREN=ON,DEBUG=ON -//#pragma config CP0=OFF,CP1=OFF,CP2=OFF,CP3=OFF -//#pragma config CPB=OFF,CPD=OFF -//#pragma config WRT0=OFF,WRT1=OFF,WRT2=OFF,WRT3=OFF -//#pragma config WRTC=OFF,WRTB=OFF,WRTD=OFF -//#pragma config EBTR0=OFF,EBTR1=OFF,EBTR2=OFF,EBTR3=OFF,EBTRB=OFF #endif -//#define _LCD_DEBUG 1 +#pragma config FOSC=HS,FCMEN=ON,PWRT=ON,BOREN=NOSLP,BORV=27, \ + WDTEN=ON,WDTPS=32768,PBADEN=OFF,HFOFST=OFF,LPT1OSC=OFF, \ + MCLRE=ON,STVREN=ON,DEBUG=ON, \ + XINST=OFF +#endif +/* + * Statuses + */ +unsigned char stereoflag; +unsigned char tuneflag; +unsigned char cnrlevel; +int diffstat; +unsigned int batlevel_6955; +unsigned int battlevel; +int recv_signal; +int backlight_counter; +unsigned char pollkeybuf[33]; + +//#define _LCD_DEBUG 1 +#ifdef __XC +void TMR0_handler(void) +#else SIGHANDLER(TMR0_handler) +#endif { - unsigned char tmr0f; - unsigned char t0con; // Stop timer0 - t0con = T0CON; - t0con &= ~_IDLEN; - T0CON = t0con; - + T0CONbits.TMR0ON = 0; // Clear interrupt flag - tmr0f = INTCON; - tmr0f &= ~(_TMR0IF | _TMR0IE); - INTCON = tmr0f; +// INTCONbits.TMR0IF = 0; + INTCONbits.TMR0IE = 0;; return; } - /* * Interrupt wake up every 1ms. */ +#ifdef __XC +void TMR3_Handler(void) +#else SIGHANDLER(TMR3_Handler) +#endif { - if(statecount >= 8) statecount = 0; - readkey_io(statecount); - statecount++; - if(statecount > 7) readkey_compare(); // Compare and push to fifo. PIR2bits.TMR3IF = 0; - PIE2bits.TMR3IE = 1; - TMR3_set(); + PIE2bits.TMR3IE = 0; + T3CONbits.TMR3ON = 0; } -DEF_INTLOW(intlow_handler) - DEF_HANDLER(SIG_TMR0, TMR0_handler) -// DEF_HANDLER(SIG_TMR3, TMR3_Handler) -END_DEF - - -unsigned int amfreq; -unsigned int fmfreq; -unsigned char amband; -unsigned char fmband; -unsigned char fm; -unsigned char am_mode3k; -unsigned char am_userbandnum; -unsigned char fm_userbandnum; -_userband_t am_usrbands[USER_BAND_NUM]; -_userband_t fm_usrbands[USER_BAND_NUM]; - -unsigned char enter_mode; -unsigned char numeric_mode; -unsigned char menu_node; -int backlight_long; -unsigned char help_flag; -int help_line; -int help_section; -int ui_language; -unsigned int ui_idlecount; -unsigned char scanflag; - -int recv_signal; -int backlight_counter; -unsigned char backlight_level; -unsigned char pollkeybuf[33]; - - -unsigned int writeword_eeprom(unsigned int p, unsigned int *sum, unsigned int word) +#ifdef __XC +void EXINT_Handler(void) +#else +SIGHANDLER(EXINT_Handler) +#endif { - ClrWdt(); - if(eeprom_writebyte(p, word >> 8) == 0) return p; // Error - *sum = calcsum_byte(*sum, (word >> 8)); + INTCONbits.INT0IE = 0; + INTCONbits.INT0IF = 0; + INTCON3bits.INT1IF = 0; + INTCON3bits.INT2IF = 0; + INTCON3bits.INT1IE = 0; + INTCON3bits.INT2IE = 0; - if(eeprom_writebyte(p, word & 0xff) == 0) return p+1; // Error - *sum = calcsum_byte(*sum, word & 0xff); - return 0xffff; } - -unsigned int writebyte_eeprom(unsigned int p, unsigned int *sum, unsigned char b) +#ifdef __XC +void RBIF_handler(void) +#else +SIGHANDLER(RBIF_handler) +#endif { - ClrWdt(); - if(eeprom_writebyte(p, b) == 0) return p; // Error - *sum = calcsum_byte(*sum, b); - return 0xffff; + power_on_inthook(); +// if(chk_powerbutton(0, 0) != 0) { // If pressed on +// power_off(1); // +// } } - -void save_eeprom(void) +#ifdef __XC +void EEPROM_handler(void) +#else +SIGHANDLER(EEPROM_handler) +#endif { - unsigned int p = 0; - unsigned int sum = 0x0000; - unsigned char i; - - // Magic word - writeword_eeprom(p, &sum, 0x1298); - p+= 2; - // amfreq - writeword_eeprom(p, &sum, amfreq); - p+= 2; - // amfreq - writeword_eeprom(p, &sum, fmfreq); - p+= 2; - - writebyte_eeprom(p, &sum, amband); - p++; - writebyte_eeprom(p, &sum, fmband); - p++; - writebyte_eeprom(p, &sum, fm); - p++; - writebyte_eeprom(p, &sum, am_mode3k); - p++; - writebyte_eeprom(p, &sum, am_userbandnum); - p++; - writebyte_eeprom(p, &sum, fm_userbandnum); - p++; - - for(i = 0 ; i < USER_BAND_NUM; i++){ - writebyte_eeprom(p, &sum, am_usrbands[i].mode3k); - writebyte_eeprom(p + 1, &sum, am_usrbands[i].start); - writebyte_eeprom(p + 2, &sum, am_usrbands[i].stop); - writeword_eeprom(p + 3, &sum, am_usrbands[i].freq); - p += 5; - } - for(i = 0 ; i < USER_BAND_NUM; i++){ - writebyte_eeprom(p, &sum, fm_usrbands[i].mode3k); - writebyte_eeprom(p + 1, &sum, fm_usrbands[i].start); - writebyte_eeprom(p + 2, &sum, fm_usrbands[i].stop); - writeword_eeprom(p + 3, &sum, fm_usrbands[i].freq); - p += 5; - } - // Write checksum - eeprom_writebyte(p, sum >> 8); - eeprom_writebyte(p + 1, sum & 0xff); - p+= 2; + PIR2bits.EEIF = 0; + EECON1bits.WREN = 0; +// if(chk_powerbutton(0, 0) != 0) { // If pressed on +// power_off(1); // +// } } -unsigned int readword_eeprom(unsigned int p, unsigned int *sum) +#ifdef __XC +void INADC_handler(void) +#else +SIGHANDLER(INADC_handler) +#endif { - unsigned char h,l; - unsigned int s; - - ClrWdt(); - - h = eeprom_readbyte(p); - *sum = calcsum_byte(*sum, h); - - l = eeprom_readbyte(p + 1); - *sum = calcsum_byte(*sum, l); - - s = (h << 8) + l; - return s; +// unsigned int a; +// a = polladc(); +// if(a != 0xffff) { +// battlevel = adc_rawtobatt(a); +// } + PIR1bits.ADIF = 0; } - -unsigned char readbyte_eeprom(unsigned int p, unsigned int *sum) +#ifdef __XC +void I2C_handler(void) +#else +SIGHANDLER(I2C_handler) +#endif { - unsigned char b; - - ClrWdt(); - - b = eeprom_readbyte(p); - *sum = calcsum_byte(*sum, b); - - return b; + PIR1bits.SSPIF = 0; } - - -unsigned char load_eeprom(void) +#ifdef __XC +void I2CBus_handler(void) +#else +SIGHANDLER(I2CBus_handler) +#endif { - unsigned int p = 0; - unsigned int sum = 0x0000; - unsigned char i; - unsigned int magic; - - // Magic word - magic = readword_eeprom(p, &sum); - if(magic != 0x1298) return 0x01; // NO MAGICWORD - p+= 2; - // amfreq - amfreq = readword_eeprom(p, &sum); - p+= 2; - // fmfreq - fmfreq = readword_eeprom(p, &sum); - p+= 2; - - amband = readbyte_eeprom(p, &sum); - p++; - fmband = readbyte_eeprom(p, &sum); - p++; - fm = readbyte_eeprom(p, &sum); - p++; - am_mode3k = readbyte_eeprom(p, &sum); - p++; - am_userbandnum = readbyte_eeprom(p, &sum); - p++; - fm_userbandnum = readbyte_eeprom(p, &sum); - p++; - - for(i = 0 ; i < USER_BAND_NUM; i++){ - am_usrbands[i].mode3k = readbyte_eeprom(p, &sum); - am_usrbands[i].start = readbyte_eeprom(p + 1, &sum); - am_usrbands[i].stop = readbyte_eeprom(p + 2, &sum); - am_usrbands[i].freq = readword_eeprom(p + 3, &sum); - p += 5; - } - for(i = 0 ; i < USER_BAND_NUM; i++){ - fm_usrbands[i].mode3k = readbyte_eeprom(p, &sum); - fm_usrbands[i].start = readbyte_eeprom(p + 1, &sum); - fm_usrbands[i].stop = readbyte_eeprom(p + 2, &sum); - fm_usrbands[i].freq = readword_eeprom(p + 3, &sum); - p += 5; - } - // Write checksum - magic = (eeprom_readbyte(p) << 8) + eeprom_readbyte(p+1); - - p+= 2; - if(sum != magic) return 0x00; - return 0xff; + PIR2bits.BCLIF = 0; } -void update_status(void) -{ -#if 0 - recv_signal = akc6955_read_level(); - if(fm != 0){ - fmfreq = akc6955_get_freq(); - } else { - amfreq = akc6955_get_freq(); - } -#endif +#ifdef __SDCC +DEF_INTLOW(intlow_handler) + DEF_HANDLER(SIG_TMR0, TMR0_handler) + DEF_HANDLER(SIG_INT0, EXINT_Handler) +// DEF_HANDLER(SIG_TMR3, I2C_handler) +END_DEF +DEF_INTHIGH(inthigh_handler) + DEF_HANDLER(SIG_RBIF, RBIF_handler) + DEF_HANDLER(SIG_EEIF, EEPROM_handler) + DEF_HANDLER(SIG_TMR3, TMR3_Handler) + DEF_HANDLER(SIG_INT1, EXINT_Handler) + DEF_HANDLER(SIG_INT2, EXINT_Handler) + DEF_HANDLER(SIG_AD, INADC_handler) + //DEF_HANDLER(SIG_SSP, I2C_handler) + //DEF_HANDLER(SIG_BCOL, I2CBus_handler) +END_DEF +#else +void interrupt low_priority intlow_handler(void) +{ + if(INTCONbits.TMR0IF) TMR0_handler(); + if(INTCONbits.INT0IF) EXINT_Handler(); } - -void update_display(void) +void interrupt high_priority inthigh_handler(void) { -// _HOME(); - _LOCATE(0,0); - printstr("S="); - print_numeric_nosupress(recv_signal, 3); - _LOCATE(0,1); -// _PUTCHAR(' '); - if(fm != 0){ // FM - if(fmband < AKC6955_BAND_TV1) { - printstr("FM"); - _PUTCHAR('1' + (fmband & 7)); - printstr(" "); - } else if(fmband < AKC6955_BAND_FMUSER){ - printstr("TV"); - _PUTCHAR('1' + fmband - AKC6955_BAND_TV1); - printstr(" "); - } else { // USER - printstr("FMUSR"); - } - } else { // AM - if(amband == AKC6955_BAND_LW) { - printstr("LW "); - } else if(amband 18) amband = 0; -// amfreq = akc6955_setfreq(amfreq) -// akc6955_set_amband(amband); - _AKC6955_WAIT_62_5MS(); // 62.5ms -// amband = akc6955_get_amband(); -// amfreq = akc6955_get_freq(); - } else { - fmband++; - if(fmband > 7) fmband = 0; -// amfreq = akc6955_setfreq(amfreq) -// akc6955_set_fmband(fmband); - _AKC6955_WAIT_62_5MS(); // 62.5ms -// fmband = akc6955_get_fmband(); -// fmfreq = akc6955_get_freq(); - } - break; - case charcode_2: // Change band - if(fm == 0){ - amband--; - if(amband == 0) amband = 18; - if(amband >= 18) amband = 18; -// amfreq = akc6955_setfreq(amfreq) -// akc6955_set_amband(amband); - _AKC6955_WAIT_62_5MS(); // 62.5ms -// amband = akc6955_get_amband(); -// amfreq = akc6955_get_freq(); - } else { - fmband--; - if(fmband == 0) fmband = 7; - if(fmband >= 7) fmband = 7; -// amfreq = akc6955_setfreq(amfreq) -// akc6955_set_fmband(fmband); - _AKC6955_WAIT_62_5MS(); // 62.5ms -// fmband = akc6955_get_fmband(); -// fmfreq = akc6955_get_freq(); - } - break; - case charcode_4: // Down Freq; - if(fm != 0){ - fmfreq -= 10; - // fmfreq = akc6955_down_freq(10); // DOWN 100KHz - } else { - amfreq -= 10; - // amfreq = akc6955_down_freq(10); // DOWN 10KHz - } - break; - case charcode_6: // Down Freq; - if(fm != 0){ - fmfreq += 10; - // fmfreq = akc6955_up_freq(10); // UP 100KHz - } else { - amfreq += 10; - // amfreq = akc6955_up_freq(10); // UP 10KHz - } - break; - case charcode_9: // Down Fast; - if(fm != 0){ - fmfreq += 50; - // fmfreq = akc6955_down_freq(50); // DOWN 500KHz - } else { - amfreq += 50; - // amfreq = akc6955_down_freq(50); // DOWN 50KHz - } - break; - case charcode_7: // Down Fast; - if(fm != 0){ - fmfreq -= 50; - // fmfreq = akc6955_up_freq(50); // UP 100KHz - } else { - amfreq -= 50; - // amfreq = akc6955_up_freq(50); // UP 10KHz - } - break; - case charcode_1: // Down Slow; - if(fm != 0){ - fmfreq -= 3; - // fmfreq = akc6955_down_freq(5); // DOWN 50KHz - } else { - amfreq -= 3; - // amfreq = akc6955_down_freq(5); // DOWN 50KHz - } - break; - case charcode_3: // Down Slow; - if(fm != 0){ - fmfreq += 3; - // fmfreq = akc6955_up_freq(5); // UP 50KHz - } else { - amfreq += 3; - // amfreq = akc6955_up_freq(5); // UP 5KHz - } - break; - case charcode_0: // Step - if(fm == 0){ - if(am_mode3k == 0) { - am_mode3k = 0xff; - } else { - am_mode3k = 0; - } - // amfreq = akc6955_mode3k(am_mode3k); - } - break; - case charcode_a: // Toggle FM - toggle_amfm(); - break; - case charcode_d: - //input_userband(); - break; - case charcode_c: - //set_userband(); - break; - case charcode_b: - //set_volume(); - break; - case charcode_e: // Backlight ON/OFF - if(backlight_counter > 0) { - backlight_counter = 0; - } else { - backlight_counter = backlight_long; - } - break; - case charcode_5: - main_menu(); - break; - case charcode_f: - updown_help(); - _CLS(); - _LOCATE(0,0); - break; - default: - break; - } -} -/* - * - */ -static void setdefault(void) -{ - char i; - amfreq = 954; - fmfreq = 8000; // 10KHz order. - amband = AKC6955_BAND_MW2; - fmband = AKC6955_BAND_FM2; - am_mode3k = 0xff; - fm = 0; - recv_signal = 0; - am_userbandnum = 0; - fm_userbandnum = 0; - for(i = 0; i < 4; i++){ - am_usrbands[i].start = 0x19; - am_usrbands[i].stop = 0x32; - } - for(i = 0; i < 4; i++){ - fm_usrbands[i].start = 0x19; - fm_usrbands[i].stop = 0x32; - } + +#endif +#endif +void lowbatt(void) +{ +// _CLS(); +// idle_time_ms(100); + printhelp_2lines("Low battery X)", "Press key to suspend"); + shutdown(1); } int main(void) { unsigned char c; - unsigned int sum = 0; + unsigned char pbutton; + unsigned char reset_status; unsigned char p; - -#ifdef _LCD_DEBUG - unsigned char power_flag; -#endif -// OSCCON = (_IDLEN & 0b11111100) | 0b00111000; + unsigned char lvcount = 0; + unsigned char dispf = 0xff; + + OSCCON = (0x80 & 0b11111100) | 0b00111000; +// OSCCON = (0x80 & 0b11111100) | 0b00110010; // 8MHz idle_init(); keyin_init(); keyin_ioinit(); - - //i2c1_init(); - - _AKC6955_WAIT_125_0MS(); // Wait 125ms -#ifdef _LCD_DEBUG - power_flag = 0xff; -#endif - backlight_long = 256; - backlight_counter = backlight_long; - backlight_level = 255; - ui_idlecount = 65535 - 7182/4 + 1; // 0.25Sec - - acm1602_init(0xa0, 1); //Init LCD - _AKC6955_WAIT_125_0MS(); // Wait 125ms - _LOCATE(0,0); // It's BAD-KNOWHOW, but needs AKIZUKI'S LCD :( - _PUTCHAR(' '); // - _LOCATE(0,1); - printstr("Hello;-)"); - lcd_setbacklight(0xff, 100); -// PORTD |= _LCDPORT_CONT_RS; -#if 0 - i = 10001; - do { - ClrWdt(); - set_fmlamp(i & 1); - set_amlamp(i & 1); - set_powerlamp(i & 1); - i = i + 1; -// idle(65536 - 7182/10 + 1); - c = pollkeys(pollkeybuf, 60, 1); // Poll about 600ms - if(c != 0) { - unsigned char sp; -// _LOCATE(0,0); - for(sp = 0; sp < c; sp++) _PUTCHAR(pollkeybuf[sp] + '0'); - } else { - _CLS(); - _LOCATE(0,0); - _PUTCHAR(' '); - } - }while(1); -#else - idle(0xf800); - switch(load_eeprom()) { - case 0x01: // No magic-word - idle(65535-7128*2+1); - _CLS(); - setdefault(); - _LOCATE(0,0); - printstr("EEPROM FORMATTING"); - _LOCATE(0,1); - printstr("Press any key"); - c = pollkey_single(); - _CLS(); - _LOCATE(0,0); - printstr("Formatting..."); -// format_eeprom(2,200); -// writeword_eeprom(0, &sum, 0x1298); - - // _CLS(); - _LOCATE(0,0); - printstr("Save defaults"); - setdefault(); -// save_eeprom(); + i2c1_init(); + reset_status = chk_reset(); + idle_time_ms(300); // Wait for setup. + WDTCONbits.SWDTEN = 0; // WDT OFF. + switch(reset_status){ + case RESET_MCLR: + case RESET_BOR: + shutdown(0); // Save and halt on BOR. break; - case 0x00: // Checksum error - idle(65535-7128*2+1); - _CLS(); - _LOCATE(0,0); - printstr("X-) Sum Error"); - _LOCATE(0,1); - printstr("Press any key to format"); - c = pollkey_single(); - _CLS(); - _LOCATE(0,0); - printstr("Formatting..."); - format_eeprom(2,250); - writeword_eeprom(0, &sum, 0x1298); - _CLS(); - _LOCATE(0,0); - printstr("Save defaults"); - setdefault(); - save_eeprom(); + case RESET_SOFTWARE: // + RCONbits.RI = 0; + pbutton = chk_powerbutton(); + if(pbutton == 0) shutdown(0); // Not-Pressed power-button -> shutdown( not save). break; - case 0xff: // Success + case RESET_POR: + case RESET_WDT: // Workaround random reset. + // shutdown(0); break; - default: // Unknown error - setdefault(); + default: break; } - // Init AKC6955 + WDTCONbits.SWDTEN = 1; // WDT ON. + power_on(1); + intadc_init(); + set_powerlamp(1); + valinit(); + + acm1602_init(0xa0, 1); //Init LCD +// idle_time_ms(125); +// _LOCATE(0,0); // It's BAD-KNOWHOW, but needs AKIZUKI'S LCD :( + // _PUTCHAR(' '); // + // _LOCATE(0,1); +// printstr("Hello;-)"); + lcd_setbacklight(0xff, 255); +// idle_time_ms(1000); /* Check EEPROM */ - /* Push default parameters to AKC6955*/ - scanflag = 0; -#if 0 - akc6955_chg_fm(fm); // Set to AM - akc6955_set_amband(amband); - akc6955_set_freq(amfreq); // Dummy, TBS (954KHz) - akc6955_set_power(0xff); // Power ON -#endif -#if 0 - idle(0xf000); -#else - idle(0xff00); -#endif + check_eeprom(); + /* Push default parameters to AKC6955*/ + setup_akc6955(); _CLS(); _LOCATE(0,0); _PUTCHAR(' '); - //update_status(); -// update_display(); + update_status(); + update_display(); ClrWdt(); - idle(ui_idlecount); - _LOCATE(0,0); - printstr("OK"); + lcd_setbacklight(0xff, 255); do { + if(battlevel <= 340) { // 3.4V + lvcount++; + if(lvcount > 4) { + if(dispf == 0) { + acm1602_resume(LCD_I2CADDR); + dispf = 0xff; + } + lowbatt(); //Zap 4Times on LowVoltage. + } + } else { + lvcount = 0; + } /* Main routine*/ - c = pollkeys(pollkeybuf, 60, 1); - p = 0; - while(c > 0) { - setfreq_updown(pollkeybuf[p]); - c--; - p++; - } - // Check battery (include idle?) - // Read AKJC6955's status -// update_status(); - // Putstring to LCD. - _LOCATE(0,0); - update_display(); - if(backlight_counter > 0) { - backlight_counter--; - lcd_setbacklight(0xff, backlight_level); // Turn ON - } else { - lcd_setbacklight(0x00, 0); // Turn OFF +// c = pollkeys(pollkeybuf, 19, 1); // 23*19=437ms + c = pollkey_single_timeout(41, 1); // 23*41 = 943ms + p = 0; +// while(c > 0) { + if(c != charcode_null) { + ClrWdt(); + if(dispf == 0) { + acm1602_resume(LCD_I2CADDR); + dispf = 0xff; + } + setfreq_updown(c); + +// setfreq_updown(pollkeybuf[p]); + // c--; + // p++; + } +// _LOCATE(0,0); + pbutton = chk_powerbutton(); // 48ms + if(pbutton != 0) shutdown(1); // Button pressed. + ClrWdt(); + update_status(); + if(backlight_counter > 0) { + if(dispf == 0) { + acm1602_resume(LCD_I2CADDR); + dispf = 0xff; + } + backlight_counter--; + lcd_setbacklight(0xff, setup.backlight_level); // Turn ON + update_display(); + } else { + lcd_setbacklight(0x00, 0); // Turn OFF + acm1602_suspend(LCD_I2CADDR); + dispf = 0; } -// idle(ui_idlecount); + idle_time_ms(9); // Pad 9ms, 1Loop = 1000ms. + ClrWdt(); } while(1); -#endif }