//lcd reset
this->rst.from_string(THEKERNEL->config->value( panel_checksum, rst_pin_checksum)->by_default("nc")->as_string())->as_output();
- rst.set(1);
+ if(this->rst.connected()) rst.set(1);
//a0
this->a0.from_string(THEKERNEL->config->value( panel_checksum, a0_pin_checksum)->by_default("2.13")->as_string())->as_output();
// contrast, mviki needs 0x018
this->contrast= THEKERNEL->config->value(panel_checksum, contrast_checksum)->by_default(9)->as_number();
+ // reverse display
+ this->reversed= THEKERNEL->config->value(panel_checksum, reverse_checksum)->by_default(false)->as_bool();
framebuffer= (uint8_t *)ahbmalloc(FB_SIZE, AHB_BANK_0); // grab some memoery from USB_RAM
if(framebuffer == NULL) {
void ST7565::init(){
const unsigned char init_seq[] = {
0x40, //Display start line 0
- 0xa1, //ADC reverse
- 0xc0, //Normal COM0...COM63
+ reversed?0xa0:0xa1, // ADC
+ reversed?0xc8:0xc0, // COM select
0xa6, //Display normal
0xa2, //Set Bias 1/9 (Duty 1/65)
0x2f, //Booster, Regulator and Follower On
0xaf, //Display on
};
//rst.set(0);
- rst.set(1);
+ if(this->rst.connected()) rst.set(1);
send_commands(init_seq, sizeof(init_seq));
clear();
}
#define up_button_pin_checksum CHECKSUM("up_button_pin")
#define down_button_pin_checksum CHECKSUM("down_button_pin")
#define contrast_checksum CHECKSUM("contrast")
+#define reverse_checksum CHECKSUM("reverse")
#define rst_pin_checksum CHECKSUM("rst_pin")
#define a0_pin_checksum CHECKSUM("a0_pin")
// text cursor position
uint8_t tx, ty;
uint8_t contrast;
+ bool reversed;
};
#endif /* ST7565_H_ */