Advertisement
uwezi

20200708_m32u4_pcf8576

Jul 9th, 2020
1,564
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.73 KB | None | 0 0
  1. /*
  2.  * 20200708_m32u4_pcf8576.c
  3.  *
  4.  * Created: 2020-07-08 21:09:00
  5.  * Author : uwezi
  6.  */
  7.  
  8. #include <avr/io.h>
  9. #include <util/delay.h>
  10. #include "i2cmaster.h"
  11.  
  12. #define i2c_pcf8576   0x40
  13.  
  14. void init(void)
  15. {
  16.   DDRE = (1 << PE6);
  17.   i2c_init(1,152);
  18. }
  19.  
  20. void all_off(void)
  21. {
  22.   uint8_t j;
  23.   i2c_start_wait(0b01110000);    
  24.   i2c_write(0b11100000);          
  25.   i2c_write(0);
  26.   for (j=0; j<20; j++)
  27.   {
  28.     i2c_write(0x00);
  29.   }
  30.   i2c_stop();
  31.   _delay_ms(10);
  32. }
  33.  
  34. #define fONE   0b00000110
  35. #define fTWO   0b01111010
  36. #define fTHREE 0b00111110
  37. #define fFOUR  0b10100110
  38. #define fFIVE  0b10111100
  39. #define fSIX   0b11111100
  40. #define fSEVEN 0b00001110
  41. #define fEIGHT 0b11111110
  42. #define fNINE  0b10111110
  43. #define fZERO  0b11011110
  44. #define fSYM   0b00000001
  45.  
  46. uint8_t framebuffer[16] = {fONE,fTWO,fTHREE,fFOUR,fFIVE,fSIX,fSEVEN,fEIGHT,fNINE,fZERO,fONE,fTWO,fTHREE,fFOUR,fFIVE,fSIX};
  47. uint8_t adresses[16] = {0x02,0x06,0x08,0x0a,0x0c,0x0e,0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x24,0x26};
  48.  
  49. int main(void)
  50. {
  51.   uint8_t adr=0, j;
  52.   init();
  53.   _delay_ms(100);          
  54.   i2c_start_wait(0b01110000);    
  55.   i2c_write(0b11100000);      
  56.  
  57.   // C 1 0 LP E B M1 M0
  58.   i2c_write(0b11011000);      
  59.   i2c_write(0b01110101);        
  60.   i2c_stop();
  61.  
  62.   while(1)
  63.   {
  64.     {
  65.       PORTE |= (1 << PE6);
  66.       _delay_ms(1);
  67.       PORTE &= ~(1 << PE6);
  68.     }
  69.     all_off();
  70.  
  71.     i2c_start_wait(0b01110000);    
  72.     i2c_write(0b11100000);        
  73.     i2c_write(0);
  74.  
  75.     for (j=0; j<20; j++)
  76.     {
  77.       if (j==adresses[adr]/2)
  78.       {
  79.         i2c_write(framebuffer[adr] | fSYM);
  80.       }
  81.       else
  82.       {
  83.         i2c_write(0);
  84.       }
  85.     }
  86.     i2c_stop();
  87.  
  88.     adr ++;
  89.     adr %= 16;
  90.  
  91.     _delay_ms(300);
  92.   }
  93.   return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement