| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #include <u8g2.h>
- #include <util/delay.h>
- #include <u8x8_avr.h>
- #include <avr/power.h>
- #define CS_DDR DDRB
- #define CS_PORT PORTB
- #define CS_BIT 0
- #define DC_DDR DDRB
- #define DC_PORT PORTB
- #define DC_BIT 4
- #define RESET_DDR DDRA
- #define RESET_PORT PORTA
- #define RESET_BIT 7
- u8g2_t u8g2;
- uint8_t
- u8x8_gpio_and_delay (u8x8_t * u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) {
- // Re-use library for delays
- if (u8x8_avr_delay(u8x8, msg, arg_int, arg_ptr))
- return 1;
- switch (msg) {
- // called once during init phase of u8g2/u8x8
- // can be used to setup pins
- case U8X8_MSG_GPIO_AND_DELAY_INIT:
- CS_DDR |= _BV(CS_BIT);
- DC_DDR |= _BV(DC_BIT);
- RESET_DDR |= _BV(RESET_BIT);
- break;
- // CS (chip select) pin: Output level in arg_int
- case U8X8_MSG_GPIO_CS:
- if (arg_int)
- CS_PORT |= _BV(CS_BIT);
- else
- CS_PORT &= ~_BV(CS_BIT);
- break;
- // DC (data/cmd, A0, register select) pin: Output level in arg_int
- case U8X8_MSG_GPIO_DC:
- if (arg_int)
- DC_PORT |= _BV(DC_BIT);
- else
- DC_PORT &= ~_BV(DC_BIT);
- break;
- // Reset pin: Output level in arg_int
- case U8X8_MSG_GPIO_RESET:
- if (arg_int)
- RESET_PORT |= _BV(RESET_BIT);
- else
- RESET_PORT &= ~_BV(RESET_BIT);
- break;
- default:
- u8x8_SetGPIOResult(u8x8, 1);
- break;
- }
- return 1;
- }
- int main (void) {
- u8g2_Setup_sh1106_128x64_vcomh0_f(
- &u8g2, U8G2_R0,
- u8x8_byte_avr_hw_spi,
- u8x8_gpio_and_delay
- );
- u8g2_InitDisplay(&u8g2);
- u8g2_SetPowerSave(&u8g2, 0);
- while (1) {
- u8g2_ClearBuffer(&u8g2);
- u8g2_SetFont(&u8g2, u8g2_font_ncenB14_tr);
- u8g2_DrawStr(&u8g2, 0, 15, "Hello!");
- u8g2_SendBuffer(&u8g2);
- }
- }
|