/*
* 20200708_m32u4_pcf8576.c
*
* Created: 2020-07-08 21:09:00
* Author : uwezi
*/
#include <avr/io.h>
#include <util/delay.h>
#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;
}
Comments