st7920 spi
This commit is contained in:
parent
5c648df381
commit
fd914d2852
|
@ -263,57 +263,75 @@ class U8G2_SSD1306_128X64_NONAME_F_SW_I2C : public U8G2 {
|
|||
u8x8_SetPin_SSD13xx_SW_I2C(getU8x8(), clock, data, reset);
|
||||
}
|
||||
};
|
||||
class U8G2_ST7920_192X32_1_6800 : public U8G2 {
|
||||
public: U8G2_ST7920_192X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
|
||||
u8g2_Setup_st7920_192x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset);
|
||||
}
|
||||
};
|
||||
class U8G2_ST7920_192X32_1_8080 : public U8G2 {
|
||||
public: U8G2_ST7920_192X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
|
||||
u8g2_Setup_st7920_192x32_1(&u8g2, rotation, u8x8_byte_8bit_8080mode, u8x8_gpio_and_delay_arduino);
|
||||
u8g2_Setup_st7920_p_192x32_1(&u8g2, rotation, u8x8_byte_8bit_8080mode, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset);
|
||||
}
|
||||
};
|
||||
class U8G2_ST7920_192X32_1_ST7920_SW_SPI : public U8G2 {
|
||||
public: U8G2_ST7920_192X32_1_ST7920_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
|
||||
u8g2_Setup_st7920_192x32_1(&u8g2, rotation, u8x8_byte_st7920_sw_spi, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset);
|
||||
}
|
||||
};
|
||||
class U8G2_ST7920_192X32_2_6800 : public U8G2 {
|
||||
public: U8G2_ST7920_192X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
|
||||
u8g2_Setup_st7920_192x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset);
|
||||
}
|
||||
};
|
||||
class U8G2_ST7920_192X32_2_8080 : public U8G2 {
|
||||
public: U8G2_ST7920_192X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
|
||||
u8g2_Setup_st7920_192x32_2(&u8g2, rotation, u8x8_byte_8bit_8080mode, u8x8_gpio_and_delay_arduino);
|
||||
u8g2_Setup_st7920_p_192x32_2(&u8g2, rotation, u8x8_byte_8bit_8080mode, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset);
|
||||
}
|
||||
};
|
||||
class U8G2_ST7920_192X32_2_ST7920_SW_SPI : public U8G2 {
|
||||
public: U8G2_ST7920_192X32_2_ST7920_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
|
||||
u8g2_Setup_st7920_192x32_2(&u8g2, rotation, u8x8_byte_st7920_sw_spi, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset);
|
||||
}
|
||||
};
|
||||
class U8G2_ST7920_192X32_F_6800 : public U8G2 {
|
||||
public: U8G2_ST7920_192X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
|
||||
u8g2_Setup_st7920_192x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset);
|
||||
}
|
||||
};
|
||||
class U8G2_ST7920_192X32_F_8080 : public U8G2 {
|
||||
public: U8G2_ST7920_192X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
|
||||
u8g2_Setup_st7920_192x32_f(&u8g2, rotation, u8x8_byte_8bit_8080mode, u8x8_gpio_and_delay_arduino);
|
||||
u8g2_Setup_st7920_p_192x32_f(&u8g2, rotation, u8x8_byte_8bit_8080mode, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset);
|
||||
}
|
||||
};
|
||||
class U8G2_ST7920_192X32_F_ST7920_SW_SPI : public U8G2 {
|
||||
public: U8G2_ST7920_192X32_F_ST7920_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
|
||||
u8g2_Setup_st7920_192x32_f(&u8g2, rotation, u8x8_byte_st7920_sw_spi, u8x8_gpio_and_delay_arduino);
|
||||
class U8G2_ST7920_192X32_1_SW_SPI : public U8G2 {
|
||||
public: U8G2_ST7920_192X32_1_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
|
||||
u8g2_Setup_st7920_s_192x32_1(&u8g2, rotation, u8x8_byte_4wire_sw_spi, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset);
|
||||
}
|
||||
};
|
||||
class U8G2_ST7920_192X32_2_SW_SPI : public U8G2 {
|
||||
public: U8G2_ST7920_192X32_2_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
|
||||
u8g2_Setup_st7920_s_192x32_2(&u8g2, rotation, u8x8_byte_4wire_sw_spi, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset);
|
||||
}
|
||||
};
|
||||
class U8G2_ST7920_192X32_F_SW_SPI : public U8G2 {
|
||||
public: U8G2_ST7920_192X32_F_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
|
||||
u8g2_Setup_st7920_s_192x32_f(&u8g2, rotation, u8x8_byte_4wire_sw_spi, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset);
|
||||
}
|
||||
};
|
||||
class U8G2_ST7920_128X64_1_8080 : public U8G2 {
|
||||
public: U8G2_ST7920_128X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
|
||||
u8g2_Setup_st7920_p_128x64_1(&u8g2, rotation, u8x8_byte_8bit_8080mode, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset);
|
||||
}
|
||||
};
|
||||
class U8G2_ST7920_128X64_2_8080 : public U8G2 {
|
||||
public: U8G2_ST7920_128X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
|
||||
u8g2_Setup_st7920_p_128x64_2(&u8g2, rotation, u8x8_byte_8bit_8080mode, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset);
|
||||
}
|
||||
};
|
||||
class U8G2_ST7920_128X64_F_8080 : public U8G2 {
|
||||
public: U8G2_ST7920_128X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
|
||||
u8g2_Setup_st7920_p_128x64_f(&u8g2, rotation, u8x8_byte_8bit_8080mode, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset);
|
||||
}
|
||||
};
|
||||
class U8G2_ST7920_128X64_1_SW_SPI : public U8G2 {
|
||||
public: U8G2_ST7920_128X64_1_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
|
||||
u8g2_Setup_st7920_s_128x64_1(&u8g2, rotation, u8x8_byte_4wire_sw_spi, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset);
|
||||
}
|
||||
};
|
||||
class U8G2_ST7920_128X64_2_SW_SPI : public U8G2 {
|
||||
public: U8G2_ST7920_128X64_2_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
|
||||
u8g2_Setup_st7920_s_128x64_2(&u8g2, rotation, u8x8_byte_4wire_sw_spi, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset);
|
||||
}
|
||||
};
|
||||
class U8G2_ST7920_128X64_F_SW_SPI : public U8G2 {
|
||||
public: U8G2_ST7920_128X64_F_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
|
||||
u8g2_Setup_st7920_s_128x64_f(&u8g2, rotation, u8x8_byte_4wire_sw_spi, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -190,21 +190,27 @@ class U8X8_SSD1306_128X64_NONAME_SW_I2C : public U8X8 {
|
|||
u8x8_SetPin_SSD13xx_SW_I2C(getU8x8(), clock, data, reset);
|
||||
}
|
||||
};
|
||||
class U8X8_ST7920_192X32_6800 : public U8X8 {
|
||||
public: U8X8_ST7920_192X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() {
|
||||
u8x8_Setup(getU8x8(), u8x8_d_st7920_192x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset);
|
||||
}
|
||||
};
|
||||
class U8X8_ST7920_192X32_8080 : public U8X8 {
|
||||
public: U8X8_ST7920_192X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() {
|
||||
u8x8_Setup(getU8x8(), u8x8_d_st7920_192x32, u8x8_cad_001, u8x8_byte_8bit_8080mode, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset);
|
||||
}
|
||||
};
|
||||
class U8X8_ST7920_192X32_ST7920_SW_SPI : public U8X8 {
|
||||
public: U8X8_ST7920_192X32_ST7920_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() {
|
||||
u8x8_Setup(getU8x8(), u8x8_d_st7920_192x32, u8x8_cad_001, u8x8_byte_st7920_sw_spi, u8x8_gpio_and_delay_arduino);
|
||||
class U8X8_ST7920_192X32_SW_SPI : public U8X8 {
|
||||
public: U8X8_ST7920_192X32_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() {
|
||||
u8x8_Setup(getU8x8(), u8x8_d_st7920_192x32, u8x8_cad_st7920_spi, u8x8_byte_4wire_sw_spi, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset);
|
||||
}
|
||||
};
|
||||
class U8X8_ST7920_128X64_8080 : public U8X8 {
|
||||
public: U8X8_ST7920_128X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() {
|
||||
u8x8_Setup(getU8x8(), u8x8_d_st7920_128x64, u8x8_cad_001, u8x8_byte_8bit_8080mode, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset);
|
||||
}
|
||||
};
|
||||
class U8X8_ST7920_128X64_SW_SPI : public U8X8 {
|
||||
public: U8X8_ST7920_128X64_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() {
|
||||
u8x8_Setup(getU8x8(), u8x8_d_st7920_128x64, u8x8_cad_st7920_spi, u8x8_byte_4wire_sw_spi, u8x8_gpio_and_delay_arduino);
|
||||
u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset);
|
||||
}
|
||||
};
|
||||
|
|
18
csrc/u8g2.h
18
csrc/u8g2.h
|
@ -319,6 +319,9 @@ uint8_t *u8g2_m_ssd1306_16_f(uint8_t *page_cnt);
|
|||
uint8_t *u8g2_m_st7920_24_1(uint8_t *page_cnt);
|
||||
uint8_t *u8g2_m_st7920_24_2(uint8_t *page_cnt);
|
||||
uint8_t *u8g2_m_st7920_24_f(uint8_t *page_cnt);
|
||||
uint8_t *u8g2_m_st7920_16_1(uint8_t *page_cnt);
|
||||
uint8_t *u8g2_m_st7920_16_2(uint8_t *page_cnt);
|
||||
uint8_t *u8g2_m_st7920_16_f(uint8_t *page_cnt);
|
||||
uint8_t *u8g2_m_uc1701_13_1(uint8_t *page_cnt);
|
||||
uint8_t *u8g2_m_uc1701_13_2(uint8_t *page_cnt);
|
||||
uint8_t *u8g2_m_uc1701_13_f(uint8_t *page_cnt);
|
||||
|
@ -330,9 +333,18 @@ uint8_t *u8g2_m_uc1701_13_f(uint8_t *page_cnt);
|
|||
void u8g2_Setup_ssd1306_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_ssd1306_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_ssd1306_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_st7920_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_st7920_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_st7920_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_st7920_p_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_st7920_p_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_st7920_p_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_st7920_s_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_st7920_s_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_st7920_s_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_st7920_p_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_st7920_p_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_st7920_p_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_st7920_s_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_st7920_s_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_st7920_s_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_uc1701_dogs102_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_uc1701_dogs102_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
void u8g2_Setup_uc1701_dogs102_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
|
||||
|
|
|
@ -39,6 +39,24 @@ uint8_t *u8g2_m_st7920_24_f(uint8_t *page_cnt)
|
|||
*page_cnt = 4;
|
||||
return buf;
|
||||
}
|
||||
uint8_t *u8g2_m_st7920_16_1(uint8_t *page_cnt)
|
||||
{
|
||||
static uint8_t buf[128];
|
||||
*page_cnt = 1;
|
||||
return buf;
|
||||
}
|
||||
uint8_t *u8g2_m_st7920_16_2(uint8_t *page_cnt)
|
||||
{
|
||||
static uint8_t buf[256];
|
||||
*page_cnt = 2;
|
||||
return buf;
|
||||
}
|
||||
uint8_t *u8g2_m_st7920_16_f(uint8_t *page_cnt)
|
||||
{
|
||||
static uint8_t buf[1024];
|
||||
*page_cnt = 8;
|
||||
return buf;
|
||||
}
|
||||
uint8_t *u8g2_m_uc1701_13_1(uint8_t *page_cnt)
|
||||
{
|
||||
static uint8_t buf[104];
|
||||
|
|
|
@ -33,7 +33,7 @@ void u8g2_Setup_ssd1306_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation,
|
|||
}
|
||||
/* st7920 */
|
||||
/* st7920 1 */
|
||||
void u8g2_Setup_st7920_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
|
||||
void u8g2_Setup_st7920_p_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
|
||||
{
|
||||
uint8_t tile_buf_height;
|
||||
uint8_t *buf;
|
||||
|
@ -42,7 +42,7 @@ void u8g2_Setup_st7920_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_ms
|
|||
u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation);
|
||||
}
|
||||
/* st7920 2 */
|
||||
void u8g2_Setup_st7920_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
|
||||
void u8g2_Setup_st7920_p_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
|
||||
{
|
||||
uint8_t tile_buf_height;
|
||||
uint8_t *buf;
|
||||
|
@ -51,7 +51,7 @@ void u8g2_Setup_st7920_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_ms
|
|||
u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation);
|
||||
}
|
||||
/* st7920 f */
|
||||
void u8g2_Setup_st7920_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
|
||||
void u8g2_Setup_st7920_p_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
|
||||
{
|
||||
uint8_t tile_buf_height;
|
||||
uint8_t *buf;
|
||||
|
@ -59,6 +59,90 @@ void u8g2_Setup_st7920_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_ms
|
|||
buf = u8g2_m_st7920_24_f(&tile_buf_height);
|
||||
u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation);
|
||||
}
|
||||
/* st7920 */
|
||||
/* st7920 1 */
|
||||
void u8g2_Setup_st7920_s_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
|
||||
{
|
||||
uint8_t tile_buf_height;
|
||||
uint8_t *buf;
|
||||
u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb);
|
||||
buf = u8g2_m_st7920_24_1(&tile_buf_height);
|
||||
u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation);
|
||||
}
|
||||
/* st7920 2 */
|
||||
void u8g2_Setup_st7920_s_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
|
||||
{
|
||||
uint8_t tile_buf_height;
|
||||
uint8_t *buf;
|
||||
u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb);
|
||||
buf = u8g2_m_st7920_24_2(&tile_buf_height);
|
||||
u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation);
|
||||
}
|
||||
/* st7920 f */
|
||||
void u8g2_Setup_st7920_s_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
|
||||
{
|
||||
uint8_t tile_buf_height;
|
||||
uint8_t *buf;
|
||||
u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb);
|
||||
buf = u8g2_m_st7920_24_f(&tile_buf_height);
|
||||
u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation);
|
||||
}
|
||||
/* st7920 */
|
||||
/* st7920 1 */
|
||||
void u8g2_Setup_st7920_p_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
|
||||
{
|
||||
uint8_t tile_buf_height;
|
||||
uint8_t *buf;
|
||||
u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb);
|
||||
buf = u8g2_m_st7920_16_1(&tile_buf_height);
|
||||
u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation);
|
||||
}
|
||||
/* st7920 2 */
|
||||
void u8g2_Setup_st7920_p_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
|
||||
{
|
||||
uint8_t tile_buf_height;
|
||||
uint8_t *buf;
|
||||
u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb);
|
||||
buf = u8g2_m_st7920_16_2(&tile_buf_height);
|
||||
u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation);
|
||||
}
|
||||
/* st7920 f */
|
||||
void u8g2_Setup_st7920_p_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
|
||||
{
|
||||
uint8_t tile_buf_height;
|
||||
uint8_t *buf;
|
||||
u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb);
|
||||
buf = u8g2_m_st7920_16_f(&tile_buf_height);
|
||||
u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation);
|
||||
}
|
||||
/* st7920 */
|
||||
/* st7920 1 */
|
||||
void u8g2_Setup_st7920_s_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
|
||||
{
|
||||
uint8_t tile_buf_height;
|
||||
uint8_t *buf;
|
||||
u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb);
|
||||
buf = u8g2_m_st7920_16_1(&tile_buf_height);
|
||||
u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation);
|
||||
}
|
||||
/* st7920 2 */
|
||||
void u8g2_Setup_st7920_s_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
|
||||
{
|
||||
uint8_t tile_buf_height;
|
||||
uint8_t *buf;
|
||||
u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb);
|
||||
buf = u8g2_m_st7920_16_2(&tile_buf_height);
|
||||
u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation);
|
||||
}
|
||||
/* st7920 f */
|
||||
void u8g2_Setup_st7920_s_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
|
||||
{
|
||||
uint8_t tile_buf_height;
|
||||
uint8_t *buf;
|
||||
u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb);
|
||||
buf = u8g2_m_st7920_16_f(&tile_buf_height);
|
||||
u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation);
|
||||
}
|
||||
/* uc1701 */
|
||||
/* uc1701 1 */
|
||||
void u8g2_Setup_uc1701_dogs102_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
|
||||
|
|
|
@ -469,6 +469,7 @@ uint8_t u8x8_cad_EndTransfer(u8x8_t *u8x8) U8X8_NOINLINE;
|
|||
void u8x8_cad_SendSequence(u8x8_t *u8x8, uint8_t const *data);
|
||||
uint8_t u8x8_cad_110(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
|
||||
uint8_t u8x8_cad_001(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
|
||||
uint8_t u8x8_cad_st7920_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
|
||||
|
||||
|
||||
/*==========================================*/
|
||||
|
@ -590,6 +591,7 @@ void tga_save(const char *name);
|
|||
uint8_t u8x8_d_uc1701_dogs102(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
|
||||
uint8_t u8x8_d_ssd1306_128x64_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
|
||||
uint8_t u8x8_d_st7920_192x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
|
||||
uint8_t u8x8_d_st7920_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
|
||||
|
||||
/*==========================================*/
|
||||
/* u8x8_8x8.c */
|
||||
|
|
|
@ -318,6 +318,8 @@ uint8_t u8x8_byte_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void
|
|||
|
||||
/*=========================================*/
|
||||
|
||||
#ifdef OLDOLDOLD
|
||||
|
||||
static void u8x8_byte_st7920_send_byte(u8x8_t *u8x8, uint8_t b) U8X8_NOINLINE;
|
||||
static void u8x8_byte_st7920_send_byte(u8x8_t *u8x8, uint8_t b)
|
||||
{
|
||||
|
@ -337,6 +339,8 @@ static void u8x8_byte_st7920_send_byte(u8x8_t *u8x8, uint8_t b)
|
|||
u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->sda_setup_time_ns);
|
||||
u8x8_gpio_SetSPIClock(u8x8, takeover_edge);
|
||||
u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->sck_pulse_width_ns);
|
||||
|
||||
b<<=1;
|
||||
cnt--;
|
||||
} while( cnt != 0 );
|
||||
|
||||
|
@ -345,7 +349,7 @@ static void u8x8_byte_st7920_send_byte(u8x8_t *u8x8, uint8_t b)
|
|||
uint8_t u8x8_byte_st7920_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
|
||||
{
|
||||
uint8_t *data;
|
||||
uint16_t b;
|
||||
uint8_t b;
|
||||
static uint8_t last_dc;
|
||||
|
||||
switch(msg)
|
||||
|
@ -368,7 +372,8 @@ uint8_t u8x8_byte_st7920_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void
|
|||
while( arg_int > 0 )
|
||||
{
|
||||
b = *data;
|
||||
u8x8_byte_st7920_send_byte(u8x8, b);
|
||||
u8x8_byte_st7920_send_byte(u8x8, b & 0x0f0);
|
||||
u8x8_byte_st7920_send_byte(u8x8, b << 4);
|
||||
data++;
|
||||
arg_int--;
|
||||
}
|
||||
|
@ -402,7 +407,7 @@ uint8_t u8x8_byte_st7920_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void
|
|||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*=========================================*/
|
||||
|
||||
|
|
|
@ -230,3 +230,51 @@ uint8_t u8x8_cad_001(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
|
|||
return 1;
|
||||
}
|
||||
|
||||
/* cad procedure for the ST7920 in SPI mode */
|
||||
/* u8x8_byte_SetDC is not used */
|
||||
uint8_t u8x8_cad_st7920_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
|
||||
{
|
||||
uint8_t *data;
|
||||
uint8_t b;
|
||||
|
||||
switch(msg)
|
||||
{
|
||||
case U8X8_MSG_CAD_SEND_CMD:
|
||||
//u8x8_byte_SetDC(u8x8, 0);
|
||||
u8x8_byte_SendByte(u8x8, 0x0f8);
|
||||
u8x8_byte_SendByte(u8x8, arg_int & 0x0f0);
|
||||
u8x8_byte_SendByte(u8x8, arg_int << 4);
|
||||
break;
|
||||
case U8X8_MSG_CAD_SEND_ARG:
|
||||
//u8x8_byte_SetDC(u8x8, 0);
|
||||
u8x8_byte_SendByte(u8x8, 0x0f8);
|
||||
u8x8_byte_SendByte(u8x8, arg_int & 0x0f0);
|
||||
u8x8_byte_SendByte(u8x8, arg_int << 4);
|
||||
break;
|
||||
case U8X8_MSG_CAD_SEND_DATA:
|
||||
//u8x8_byte_SetDC(u8x8, 1);
|
||||
|
||||
u8x8_byte_SendByte(u8x8, 0x0fa);
|
||||
|
||||
data = (uint8_t *)arg_ptr;
|
||||
while( arg_int > 0 )
|
||||
{
|
||||
b = *data;
|
||||
u8x8_byte_SendByte(u8x8, b & 0x0f0);
|
||||
u8x8_byte_SendByte(u8x8, b << 4);
|
||||
data++;
|
||||
arg_int--;
|
||||
}
|
||||
break;
|
||||
case U8X8_MSG_CAD_INIT:
|
||||
case U8X8_MSG_CAD_START_TRANSFER:
|
||||
case U8X8_MSG_CAD_END_TRANSFER:
|
||||
case U8X8_MSG_CAD_SET_I2C_ADR:
|
||||
case U8X8_MSG_CAD_SET_DEVICE:
|
||||
return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
|
||||
u8x8_d_st7920_192x32.c
|
||||
u8x8_d_st7920.c
|
||||
|
||||
Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)
|
||||
|
||||
|
@ -41,7 +41,7 @@
|
|||
|
||||
|
||||
|
||||
static const uint8_t u8x8_d_st7920_192x32_init_seq[] = {
|
||||
static const uint8_t u8x8_d_st7920_init_seq[] = {
|
||||
|
||||
U8X8_DLY(100),
|
||||
U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */
|
||||
|
@ -54,34 +54,12 @@ static const uint8_t u8x8_d_st7920_192x32_init_seq[] = {
|
|||
//U8X8_C(0x001), /* clear RAM, needs 1.6 ms */
|
||||
U8X8_DLY(2), /* delay 2ms */
|
||||
|
||||
#ifdef ST7920_TEST_PATTERN
|
||||
U8X8_C(0x03e), /* enable extended instruction set */
|
||||
U8X8_C(0x080), /* x */
|
||||
U8X8_C(0x080), /* y */
|
||||
|
||||
U8X8_D1(0x055), /* data */
|
||||
U8X8_D1(0x055), /* data */
|
||||
U8X8_D1(0x055), /* data */
|
||||
U8X8_D1(0x055), /* data */
|
||||
U8X8_D1(0x055), /* data */
|
||||
U8X8_D1(0x055), /* data */
|
||||
U8X8_D1(0x055), /* data */
|
||||
U8X8_D1(0x055), /* data */
|
||||
U8X8_D1(0x0ff), /* data */
|
||||
U8X8_D1(0x0ff), /* data */
|
||||
U8X8_D1(0x0ff), /* data */
|
||||
U8X8_D1(0x0ff), /* data */
|
||||
U8X8_D1(0x0ff), /* data */
|
||||
U8X8_D1(0x0ff), /* data */
|
||||
U8X8_D1(0x0ff), /* data */
|
||||
U8X8_D1(0x0ff), /* data */
|
||||
#endif
|
||||
|
||||
U8X8_END_TRANSFER(), /* disable chip */
|
||||
U8X8_END() /* end of sequence */
|
||||
};
|
||||
|
||||
static const uint8_t u8x8_d_st7920_192x32_powersave0_seq[] = {
|
||||
static const uint8_t u8x8_d_st7920_powersave0_seq[] = {
|
||||
U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */
|
||||
U8X8_C(0x038), /* 8 Bit interface (DL=1), basic instruction set (RE=0) */
|
||||
U8X8_C(0x00c), /* display on, cursor & blink off */
|
||||
|
@ -89,7 +67,7 @@ static const uint8_t u8x8_d_st7920_192x32_powersave0_seq[] = {
|
|||
U8X8_END() /* end of sequence */
|
||||
};
|
||||
|
||||
static const uint8_t u8x8_d_st7920_192x32_powersave1_seq[] = {
|
||||
static const uint8_t u8x8_d_st7920_powersave1_seq[] = {
|
||||
U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */
|
||||
U8X8_C(0x038), /* 8 Bit interface (DL=1), basic instruction set (RE=0) */
|
||||
U8X8_C(0x008), /* display off */
|
||||
|
@ -97,85 +75,51 @@ static const uint8_t u8x8_d_st7920_192x32_powersave1_seq[] = {
|
|||
U8X8_END() /* end of sequence */
|
||||
};
|
||||
|
||||
static const u8x8_display_info_t u8x8_st7920_192x32_display_info =
|
||||
{
|
||||
/* chip_enable_level = */ 0,
|
||||
/* chip_disable_level = */ 1,
|
||||
|
||||
/* post_chip_enable_wait_ns = */ 5,
|
||||
/* pre_chip_disable_wait_ns = */ 5,
|
||||
/* reset_pulse_width_ms = */ 1,
|
||||
/* post_reset_wait_ms = */ 6,
|
||||
/* sda_setup_time_ns = */ 12,
|
||||
/* sck_pulse_width_ns = */ 75, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */
|
||||
/* sck_takeover_edge = */ 1, /* rising edge */
|
||||
/* i2c_bus_clock_100kHz = */ 37,
|
||||
/* data_setup_time_ns = */ 30,
|
||||
/* write_pulse_width_ns = */ 40,
|
||||
/* tile_width = */ 24,
|
||||
/* tile_hight = */ 4,
|
||||
/* default_x_offset = */ 0,
|
||||
/* pixel_width = */ 192,
|
||||
/* pixel_height = */ 32
|
||||
};
|
||||
|
||||
uint8_t u8x8_d_st7920_192x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
|
||||
uint8_t u8x8_d_st7920_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
|
||||
{
|
||||
uint8_t x, y, c, i, j;
|
||||
uint8_t x, y, c, i;
|
||||
uint8_t *ptr;
|
||||
switch(msg)
|
||||
{
|
||||
/* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */
|
||||
/*
|
||||
case U8X8_MSG_DISPLAY_SETUP_MEMORY:
|
||||
u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7920_192x32_display_info);
|
||||
break;
|
||||
*/
|
||||
case U8X8_MSG_DISPLAY_INIT:
|
||||
u8x8_d_helper_display_init(u8x8);
|
||||
u8x8_cad_SendSequence(u8x8, u8x8_d_st7920_192x32_init_seq);
|
||||
u8x8_cad_SendSequence(u8x8, u8x8_d_st7920_init_seq);
|
||||
break;
|
||||
case U8X8_MSG_DISPLAY_SET_POWER_SAVE:
|
||||
if ( arg_int == 0 )
|
||||
u8x8_cad_SendSequence(u8x8, u8x8_d_st7920_192x32_powersave0_seq);
|
||||
u8x8_cad_SendSequence(u8x8, u8x8_d_st7920_powersave0_seq);
|
||||
else
|
||||
u8x8_cad_SendSequence(u8x8, u8x8_d_st7920_192x32_powersave1_seq);
|
||||
u8x8_cad_SendSequence(u8x8, u8x8_d_st7920_powersave1_seq);
|
||||
break;
|
||||
case U8X8_MSG_DISPLAY_DRAW_TILE:
|
||||
y = (((u8x8_tile_t *)arg_ptr)->y_pos);
|
||||
y*=8;
|
||||
x = ((u8x8_tile_t *)arg_ptr)->x_pos;
|
||||
x /= 2; /* not sure whether this is a clever idea, problem is, the ST7920 can address only every second tile */
|
||||
/* two tiles have to be written through data transfer */
|
||||
//x *= 8;
|
||||
//x += u8x8->x_offset;
|
||||
|
||||
|
||||
u8x8_cad_StartTransfer(u8x8);
|
||||
|
||||
|
||||
#ifdef OLD
|
||||
c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */
|
||||
for( i = 0; i < 8; i++ )
|
||||
if ( y >= 32 ) /* this is the adjustment for 128x64 displays */
|
||||
{
|
||||
ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* data ptr to the tiles */
|
||||
ptr += i;
|
||||
|
||||
u8x8_cad_SendCmd(u8x8, 0x03e ); /* enable extended mode */
|
||||
u8x8_cad_SendCmd(u8x8, 0x080 | (y+i) ); /* y pos */
|
||||
u8x8_cad_SendCmd(u8x8, 0x080 | x ); /* set x pos */
|
||||
|
||||
for( j = 0; j < c; j++ )
|
||||
{
|
||||
u8x8_cad_SendData(u8x8, 1, ptr); /* note: SendData can not handle more than 255 bytes */
|
||||
ptr += 8;
|
||||
}
|
||||
y-=32;
|
||||
x+=8;
|
||||
}
|
||||
#endif
|
||||
|
||||
u8x8_cad_StartTransfer(u8x8);
|
||||
|
||||
|
||||
/*
|
||||
Tile structure is reused here.
|
||||
Tile structure is reused here for the ST7920, however u8x8 is not supported
|
||||
tile_ptr points to data which has cnt*8 bytes (same as SSD1306 tiles)
|
||||
however, buffer is expected to have 8 lines of code fitting to the ST7920 internal memory
|
||||
Buffer is expected to have 8 lines of code fitting to the ST7920 internal memory
|
||||
"cnt" includes the number of horizontal bytes. width is equal to cnt*8
|
||||
Also important: Width must be a multiple of 16 (ST7920 requirement), so cnt must be even.
|
||||
|
||||
TODO: Consider arg_int, however arg_int is not used by u8g2
|
||||
*/
|
||||
c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */
|
||||
ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* data ptr to the tiles */
|
||||
|
@ -188,16 +132,6 @@ uint8_t u8x8_d_st7920_192x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *a
|
|||
ptr += c;
|
||||
}
|
||||
|
||||
/*
|
||||
do
|
||||
{
|
||||
c = ((u8x8_tile_t *)arg_ptr)->cnt;
|
||||
ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr;
|
||||
u8x8_cad_SendData(u8x8, c*8, ptr);
|
||||
arg_int--;
|
||||
} while( arg_int > 0 );
|
||||
*/
|
||||
|
||||
u8x8_cad_EndTransfer(u8x8);
|
||||
|
||||
break;
|
||||
|
@ -207,4 +141,78 @@ uint8_t u8x8_d_st7920_192x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *a
|
|||
return 1;
|
||||
}
|
||||
|
||||
static const u8x8_display_info_t u8x8_st7920_192x32_display_info =
|
||||
{
|
||||
/* chip_enable_level = */ 1,
|
||||
/* chip_disable_level = */ 0,
|
||||
|
||||
/* post_chip_enable_wait_ns = */ 5,
|
||||
/* pre_chip_disable_wait_ns = */ 5,
|
||||
/* reset_pulse_width_ms = */ 1,
|
||||
/* post_reset_wait_ms = */ 6,
|
||||
/* sda_setup_time_ns = */ 20,
|
||||
/* sck_pulse_width_ns = */ 140, /* datasheet ST7920 */
|
||||
/* sck_takeover_edge = */ 1, /* rising edge */
|
||||
/* i2c_bus_clock_100kHz = */ 37,
|
||||
/* data_setup_time_ns = */ 30,
|
||||
/* write_pulse_width_ns = */ 40,
|
||||
/* tile_width = */ 24,
|
||||
/* tile_hight = */ 4,
|
||||
/* default_x_offset = */ 0,
|
||||
/* pixel_width = */ 192,
|
||||
/* pixel_height = */ 32
|
||||
};
|
||||
|
||||
static const u8x8_display_info_t u8x8_st7920_128x64_display_info =
|
||||
{
|
||||
/* chip_enable_level = */ 1,
|
||||
/* chip_disable_level = */ 0,
|
||||
|
||||
/* post_chip_enable_wait_ns = */ 5,
|
||||
/* pre_chip_disable_wait_ns = */ 5,
|
||||
/* reset_pulse_width_ms = */ 1,
|
||||
/* post_reset_wait_ms = */ 6,
|
||||
/* sda_setup_time_ns = */ 20,
|
||||
/* sck_pulse_width_ns = */ 140, /* datasheet ST7920 */
|
||||
/* sck_takeover_edge = */ 1, /* rising edge */
|
||||
/* i2c_bus_clock_100kHz = */ 37,
|
||||
/* data_setup_time_ns = */ 30,
|
||||
/* write_pulse_width_ns = */ 40,
|
||||
/* tile_width = */ 16,
|
||||
/* tile_hight = */ 8,
|
||||
/* default_x_offset = */ 0,
|
||||
/* pixel_width = */ 128,
|
||||
/* pixel_height = */ 64
|
||||
};
|
||||
|
||||
uint8_t u8x8_d_st7920_192x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
|
||||
{
|
||||
switch(msg)
|
||||
{
|
||||
case U8X8_MSG_DISPLAY_SETUP_MEMORY:
|
||||
u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7920_192x32_display_info);
|
||||
break;
|
||||
default:
|
||||
return u8x8_d_st7920_common(u8x8, msg, arg_int, arg_ptr);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint8_t u8x8_d_st7920_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
|
||||
{
|
||||
switch(msg)
|
||||
{
|
||||
case U8X8_MSG_DISPLAY_SETUP_MEMORY:
|
||||
u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7920_128x64_display_info);
|
||||
break;
|
||||
default:
|
||||
return u8x8_d_st7920_common(u8x8, msg, arg_int, arg_ptr);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -54,7 +54,10 @@
|
|||
//U8G2_SSD1306_128X64_NONAME_1_8080 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /*enable=*/ 7, /*cs=*/ 10, /*dc=*/ 9, /*reset=*/ 8);
|
||||
//U8G2_UC1701_DOGS102_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_UC1701_DOGS102_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
U8G2_ST7920_192X32_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ U8X8_PIN_NONE, /*dc=*/ 17, /*reset=*/ U8X8_PIN_NONE);
|
||||
//U8G2_ST7920_192X32_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ U8X8_PIN_NONE, /*dc=*/ 17, /*reset=*/ U8X8_PIN_NONE);
|
||||
U8G2_ST7920_192X32_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 16 /* A2 */, /* CS=*/ 17 /* A3 */, /* reset=*/ U8X8_PIN_NONE);
|
||||
//U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 16 /* A2 */, /* CS=*/ 17 /* A3 */, /* reset=*/ U8X8_PIN_NONE);
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -74,7 +77,7 @@ void loop(void) {
|
|||
u8g2.firstPage();
|
||||
do {
|
||||
u8g2.setFont(u8g2_font_ncenB14_tr);
|
||||
u8g2.drawStr(0,20,"Hello World!");
|
||||
u8g2.drawStr(0,24,"Hello World!");
|
||||
} while ( u8g2.nextPage() );
|
||||
delay(1000);
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <error.h>
|
||||
#include <ctype.h>
|
||||
#include <unistd.h>
|
||||
|
||||
|
@ -19,7 +20,7 @@
|
|||
#define COM_6800 0x0004
|
||||
#define COM_8080 0x0008
|
||||
#define COM_SSDI2C 0x0010
|
||||
#define COM_ST7920SPI 0x0020
|
||||
#define COM_ST7920SPI 0x0020 /* mostly identical to COM_4WSPI, but does not use DC */
|
||||
|
||||
struct interface
|
||||
{
|
||||
|
@ -46,6 +47,7 @@ struct controller
|
|||
int tile_height;
|
||||
const char *ll_hvline;
|
||||
const char *cad;
|
||||
const char *cad_shortname;
|
||||
unsigned com;
|
||||
struct display display_list[10]; /* usually not used completly, but space does not matter much here */
|
||||
};
|
||||
|
@ -53,21 +55,42 @@ struct controller
|
|||
struct controller controller_list[] =
|
||||
{
|
||||
{
|
||||
"ssd1306", 16, 8, "u8g2_ll_hvline_vertical_top_lsb", "u8x8_cad_001", COM_4WSPI|COM_3WSPI|COM_6800|COM_8080|COM_8080|COM_SSDI2C,
|
||||
"ssd1306", 16, 8, "u8g2_ll_hvline_vertical_top_lsb", "u8x8_cad_001", "", COM_4WSPI|COM_3WSPI|COM_6800|COM_8080|COM_8080|COM_SSDI2C,
|
||||
{
|
||||
{ "128x64_noname" },
|
||||
{ NULL }
|
||||
}
|
||||
},
|
||||
{
|
||||
"st7920", 24, 4, "u8g2_ll_hvline_horizontal_right_lsb", "u8x8_cad_001", COM_6800|COM_8080|COM_ST7920SPI,
|
||||
"st7920", 24, 4, "u8g2_ll_hvline_horizontal_right_lsb", "u8x8_cad_001", "p", COM_8080,
|
||||
{
|
||||
{ "192x32" },
|
||||
{ NULL }
|
||||
}
|
||||
},
|
||||
{
|
||||
"uc1701", 13, 8, "u8g2_ll_hvline_vertical_top_lsb", "u8x8_cad_001", COM_4WSPI|COM_3WSPI|COM_6800|COM_8080|COM_8080,
|
||||
"st7920", 24, 4, "u8g2_ll_hvline_horizontal_right_lsb", "u8x8_cad_st7920_spi", "s", COM_ST7920SPI,
|
||||
{
|
||||
{ "192x32" },
|
||||
{ NULL }
|
||||
}
|
||||
},
|
||||
{
|
||||
"st7920", 16, 8, "u8g2_ll_hvline_horizontal_right_lsb", "u8x8_cad_001", "p", COM_8080,
|
||||
{
|
||||
{ "128x64" },
|
||||
{ NULL }
|
||||
}
|
||||
},
|
||||
{
|
||||
"st7920", 16, 8, "u8g2_ll_hvline_horizontal_right_lsb", "u8x8_cad_st7920_spi", "s", COM_ST7920SPI,
|
||||
{
|
||||
{ "128x64" },
|
||||
{ NULL }
|
||||
}
|
||||
},
|
||||
{
|
||||
"uc1701", 13, 8, "u8g2_ll_hvline_vertical_top_lsb", "u8x8_cad_001", "", COM_4WSPI|COM_3WSPI|COM_6800|COM_8080|COM_8080,
|
||||
{
|
||||
{ "dogs102" },
|
||||
{ NULL }
|
||||
|
@ -167,18 +190,18 @@ struct interface interface_list[] =
|
|||
},
|
||||
/* 8 */
|
||||
{
|
||||
"ST7920_SW_SPI",
|
||||
"u8x8_SetPin_3Wire_SW_SPI",
|
||||
"u8x8_byte_st7920_sw_spi",
|
||||
/* ST7920 */ "SW_SPI",
|
||||
"u8x8_SetPin_3Wire_SW_SPI", /* use the 3 wire interface, because the DC is not used */
|
||||
"u8x8_byte_4wire_sw_spi", /* "u8x8_byte_st7920_sw_spi", */
|
||||
"u8x8_gpio_and_delay_arduino",
|
||||
"uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE",
|
||||
"clock, data, cs, reset",
|
||||
"clock, data, cs [, reset]",
|
||||
"u8x8_byte_st7920_sw_spi"
|
||||
"u8x8_byte_4wire_sw_spi", /* "u8x8_byte_st7920_sw_spi" */
|
||||
},
|
||||
/* 9 */
|
||||
{
|
||||
"ST7920_HW_SPI",
|
||||
/* ST7920 */ "HW_SPI",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
|
@ -192,6 +215,39 @@ struct interface interface_list[] =
|
|||
};
|
||||
|
||||
|
||||
/*===========================================*/
|
||||
|
||||
#define STR_MAX 1024
|
||||
char *str_list[STR_MAX];
|
||||
int str_cnt = 0;
|
||||
|
||||
int str_exists(const char *s)
|
||||
{
|
||||
int i;
|
||||
for( i = 0; i < str_cnt; i++ )
|
||||
{
|
||||
if ( strcmp(str_list[i], s) == 0 )
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void str_add(const char *s)
|
||||
{
|
||||
if ( str_exists(s) )
|
||||
return;
|
||||
if ( str_cnt >= STR_MAX )
|
||||
{
|
||||
error(1,0, "max number of strings reached");
|
||||
}
|
||||
else
|
||||
{
|
||||
str_list[str_cnt] = strdup(s);
|
||||
str_cnt++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*===========================================*/
|
||||
|
||||
/*
|
||||
|
@ -316,13 +372,32 @@ FILE *u8x8_setup_cpp_md_fp;
|
|||
FILE *u8g2_setup_c_md_fp;
|
||||
FILE *u8g2_setup_cpp_md_fp;
|
||||
|
||||
const char *get_setup_function_name(int controller_idx, int display_idx, const char *postfix)
|
||||
{
|
||||
static char s[1024];
|
||||
strcpy(s, "u8g2_Setup_");
|
||||
strcat(s, strlowercase(controller_list[controller_idx].name));
|
||||
strcat(s, "_");
|
||||
if ( controller_list[controller_idx].cad_shortname[0] != '\0' )
|
||||
{
|
||||
strcat(s, strlowercase(controller_list[controller_idx].cad_shortname));
|
||||
strcat(s, "_");
|
||||
}
|
||||
strcat(s, strlowercase(controller_list[controller_idx].display_list[display_idx].name));
|
||||
strcat(s, "_");
|
||||
strcat(s, postfix);
|
||||
}
|
||||
|
||||
void do_setup_prototype(FILE *fp, int controller_idx, int display_idx, const char *postfix)
|
||||
{
|
||||
/*
|
||||
fprintf(fp, "void u8g2_Setup_");
|
||||
fprintf(fp, "%s_", strlowercase(controller_list[controller_idx].name));
|
||||
fprintf(fp, "%s_", strlowercase(controller_list[controller_idx].display_list[display_idx].name));
|
||||
fprintf(fp, "%s(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)", postfix);
|
||||
*/
|
||||
fprintf(fp, "void %s", get_setup_function_name(controller_idx, display_idx, postfix));
|
||||
fprintf(fp, "(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)");
|
||||
}
|
||||
|
||||
/*===========================================*/
|
||||
|
@ -399,10 +474,13 @@ void do_display_interface(int controller_idx, int display_idx, const char *postf
|
|||
fprintf(fp, "(const u8g2_cb_t *rotation, ");
|
||||
fprintf(fp, "%s) : U8G2() {\n", interface_list[interface_idx].pins_with_type);
|
||||
fprintf(fp, " ");
|
||||
/*
|
||||
fprintf(fp, "u8g2_Setup_");
|
||||
fprintf(fp, "%s_", strlowercase(controller_list[controller_idx].name));
|
||||
fprintf(fp, "%s_", strlowercase(controller_list[controller_idx].display_list[display_idx].name));
|
||||
fprintf(fp, "%s", postfix);
|
||||
*/
|
||||
fprintf(fp, "%s", get_setup_function_name(controller_idx, display_idx, postfix));
|
||||
fprintf(fp, "(&u8g2, ");
|
||||
fprintf(fp, "rotation, ");
|
||||
fprintf(fp, "%s, ", interface_list[interface_idx].arduino_com_procedure);
|
||||
|
@ -424,6 +502,7 @@ void do_display_interface(int controller_idx, int display_idx, const char *postf
|
|||
|
||||
void do_display(int controller_idx, int display_idx, const char *postfix)
|
||||
{
|
||||
|
||||
do_setup_prototype(setup_header_fp, controller_idx, display_idx, postfix);
|
||||
fprintf(setup_header_fp, ";\n");
|
||||
|
||||
|
@ -478,17 +557,22 @@ void do_display(int controller_idx, int display_idx, const char *postfix)
|
|||
void do_controller_buffer_code(int idx, const char *postfix, int buf_len, int rows)
|
||||
{
|
||||
int display_idx;
|
||||
//FILE *fp = stdout;
|
||||
fprintf(buf_code_fp, "uint8_t *u8g2_m_%s_%d_%s(uint8_t *page_cnt)\n",
|
||||
strlowercase(controller_list[idx].name), controller_list[idx].tile_width, postfix);
|
||||
fprintf(buf_code_fp, "{\n");
|
||||
fprintf(buf_code_fp, " static uint8_t buf[%d];\n", buf_len);
|
||||
fprintf(buf_code_fp, " *page_cnt = %d;\n", rows);
|
||||
fprintf(buf_code_fp, " return buf;\n");
|
||||
fprintf(buf_code_fp, "}\n");
|
||||
char s[1024];
|
||||
sprintf(s, "u8g2_m_%s_%d_%s", strlowercase(controller_list[idx].name), controller_list[idx].tile_width, postfix);
|
||||
|
||||
fprintf(buf_header_fp, "uint8_t *u8g2_m_%s_%d_%s(uint8_t *page_cnt);\n",
|
||||
strlowercase(controller_list[idx].name), controller_list[idx].tile_width, postfix);
|
||||
if ( str_exists(s) == 0 )
|
||||
{
|
||||
str_add(s);
|
||||
//FILE *fp = stdout;
|
||||
fprintf(buf_code_fp, "uint8_t *%s(uint8_t *page_cnt)\n", s);
|
||||
fprintf(buf_code_fp, "{\n");
|
||||
fprintf(buf_code_fp, " static uint8_t buf[%d];\n", buf_len);
|
||||
fprintf(buf_code_fp, " *page_cnt = %d;\n", rows);
|
||||
fprintf(buf_code_fp, " return buf;\n");
|
||||
fprintf(buf_code_fp, "}\n");
|
||||
|
||||
fprintf(buf_header_fp, "uint8_t *%s(uint8_t *page_cnt);\n", s);
|
||||
}
|
||||
|
||||
display_idx = 0;
|
||||
fprintf(setup_code_fp, "/* %s %s */\n", controller_list[idx].name, postfix);
|
||||
|
@ -580,10 +664,14 @@ void do_md_display_interface_buffer(int controller_idx, int display_idx, int int
|
|||
}
|
||||
else
|
||||
{
|
||||
fprintf(fp, "| u8g2_Setup_");
|
||||
fprintf(fp, "| ");
|
||||
/*
|
||||
fprintf(fp, "u8g2_Setup_");
|
||||
fprintf(fp, "%s_", strlowercase(controller_list[controller_idx].name));
|
||||
fprintf(fp, "%s_", strlowercase(controller_list[controller_idx].display_list[display_idx].name));
|
||||
fprintf(fp, "%s", strlowercase(postfix));
|
||||
*/
|
||||
fprintf(fp, "%s", get_setup_function_name(controller_idx, display_idx, postfix));
|
||||
fprintf(fp, "(u8g2, ");
|
||||
fprintf(fp, "rotation, ");
|
||||
fprintf(fp, "%s, ", interface_list[interface_idx].generic_com_procedure);
|
||||
|
|
Loading…
Reference in New Issue