/* * 20200708_m32u4_pcf8576.c * * Created: 2020-07-08 21:09:00 * Author : uwezi */ #include #include #include "i2cmaster.h" #define i2c_pcf8576 0x40 void init(void) { DDRE = (1 << PE6); i2c_init(1,152); } void all_off(void) { uint8_t j; i2c_start_wait(0b01110000); i2c_write(0b11100000); i2c_write(0); for (j=0; j<20; j++) { i2c_write(0x00); } i2c_stop(); _delay_ms(10); } #define fONE 0b00000110 #define fTWO 0b01111010 #define fTHREE 0b00111110 #define fFOUR 0b10100110 #define fFIVE 0b10111100 #define fSIX 0b11111100 #define fSEVEN 0b00001110 #define fEIGHT 0b11111110 #define fNINE 0b10111110 #define fZERO 0b11011110 #define fSYM 0b00000001 uint8_t framebuffer[16] = {fONE,fTWO,fTHREE,fFOUR,fFIVE,fSIX,fSEVEN,fEIGHT,fNINE,fZERO,fONE,fTWO,fTHREE,fFOUR,fFIVE,fSIX}; uint8_t adresses[16] = {0x02,0x06,0x08,0x0a,0x0c,0x0e,0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x24,0x26}; int main(void) { uint8_t adr=0, j; init(); _delay_ms(100); i2c_start_wait(0b01110000); i2c_write(0b11100000); // C 1 0 LP E B M1 M0 i2c_write(0b11011000); i2c_write(0b01110101); i2c_stop(); while(1) { { PORTE |= (1 << PE6); _delay_ms(1); PORTE &= ~(1 << PE6); } all_off(); i2c_start_wait(0b01110000); i2c_write(0b11100000); i2c_write(0); for (j=0; j<20; j++) { if (j==adresses[adr]/2) { i2c_write(framebuffer[adr] | fSYM); } else { i2c_write(0); } } i2c_stop(); adr ++; adr %= 16; _delay_ms(300); } return 0; }