diff --git a/firmware/basic/config.c b/firmware/basic/config.c index 313d46e..0e3b35f 100644 --- a/firmware/basic/config.c +++ b/firmware/basic/config.c @@ -17,7 +17,7 @@ struct CDESC the_config[]= { {"lcdbacklight", 50, 0, 100}, {"lcdmirror", 0, 0, 1 }, {"lcdinvert", 0, 0, 1 }, - {"lcdcontrast", 0, 1, 6 }, + {"lcdcontrast", 3, 0, 31 }, { NULL, 0, 0, 0 }, }; diff --git a/firmware/filesystem/select.c b/firmware/filesystem/select.c index 90c9af6..74b4773 100644 --- a/firmware/filesystem/select.c +++ b/firmware/filesystem/select.c @@ -66,6 +66,7 @@ int selectFile(char *filename, char *extension) } lcdRefresh(); key=getInputWait(); + getInputWaitRelease(); if( key==BTN_DOWN ){ if( selected < count-1 ){ selected++; diff --git a/firmware/lcd/display.c b/firmware/lcd/display.c index bdb1d4f..5922e8e 100644 --- a/firmware/lcd/display.c +++ b/firmware/lcd/display.c @@ -62,6 +62,55 @@ static void lcdWrite(uint8_t cd, uint8_t data) { frame = SSP_SSP0DR; } +#define CS 2,1 +#define SCK 2,11 +#define SDA 0,9 +#define RST 2,2 + +uint8_t lcdRead(uint8_t data) +{ + uint8_t i; + + gpioSetDir(SDA, 1); + gpioSetValue(SCK, 0); + delayms(1); + gpioSetValue(CS, 0); + delayms(1); + + gpioSetValue(SDA, 0); + delayms(1); + gpioSetValue(SCK, 1); + delayms(1); + + for(i=0; i<8; i++){ + gpioSetValue(SCK, 0); + delayms(1); + if( data & 0x80 ) + gpioSetValue(SDA, 1); + else + gpioSetValue(SDA, 0); + data <<= 1; + gpioSetValue(SCK, 1); + delayms(1); + } + uint8_t ret = 0; + + gpioSetDir(SDA, 0); + for(i=0; i<8; i++){ + gpioSetValue(SCK, 0); + delayms(1); + ret <<= 1; + ret |= gpioGetValue(SDA); + gpioSetValue(SCK, 1); + delayms(1); + } + + gpioSetValue(CS, 0); + gpioSetDir(SDA, 1); + delayms(1); +} + + void lcdInit(void) { sspInit(0, sspClockPolarity_Low, sspClockPhase_RisingEdge); @@ -173,8 +222,9 @@ inline void lcdInvert(void) { } void lcdSetContrast(int c) { - c+=0x20; - if(c>0x2e) c=0x24; + c+=0x80; + if(c>0x9F) + return; lcd_select(); lcdWrite(TYPE_CMD,c); lcd_deselect(); diff --git a/firmware/lcd/display.h b/firmware/lcd/display.h index d39ccd3..14927d8 100644 --- a/firmware/lcd/display.h +++ b/firmware/lcd/display.h @@ -20,6 +20,7 @@ /* Display buffer */ extern uint8_t lcdBuffer[RESX*RESY_B]; +uint8_t lcdRead(uint8_t data); void lcdInit(void); void lcdFill(char f); void lcdDisplay(void);