Redfern_89

MAX7219.c

Aug 23rd, 2020
2,250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.06 KB | None | 0 0
  1. /*
  2.  * MAX7219_test.c
  3.  *
  4.  * Created: 23.08.2020 17:05:20
  5.  * Author : 123
  6.  */
  7. #define F_CPU 16000000UL
  8.  
  9. #include <avr/io.h>
  10. #include <util/delay.h>
  11.  
  12. #define DIN PB2
  13. #define LOAD_CS PB1
  14. #define CLK PB0
  15.  
  16. #define DIN_DDR DDRB
  17. #define LOAD_CS_DDR DDRB
  18. #define CLK_DDR DDRB
  19.  
  20. #define DIN_PORT PORTB
  21. #define LOAD_CS_PORT PORTB
  22. #define CLK_PORT PORTB
  23.  
  24. void SW_SPI_Init(void) {
  25.     DIN_DDR |= (1 << DIN);
  26.     LOAD_CS_DDR |= (1 << LOAD_CS);
  27.     CLK_DDR |= (1 << CLK);
  28. }
  29.  
  30. void SW_SPI_Send(unsigned char data, char lsbFirst) {
  31.     unsigned char i = 0;
  32.     unsigned char val = 0;
  33.     for (i = 0; i < 8; i++) {
  34.         if (lsbFirst) {
  35.             val = !!(data & (1 << i));
  36.         } else {
  37.             val = !!(data & (1 << (7 - i)));
  38.         }
  39.         if (val) DIN_PORT |= (1 << DIN);
  40.         if (!val) DIN_PORT &= ~(1 << DIN);
  41.        
  42.         CLK_PORT |= (1 << CLK);
  43.         CLK_PORT &= ~(1 << CLK);
  44.        
  45.     }
  46. }
  47.  
  48. void MAX7219_Send(unsigned char reg, unsigned char data) {
  49.     LOAD_CS_PORT &= ~(1 << LOAD_CS);
  50.     SW_SPI_Send(reg, 0);
  51.     SW_SPI_Send(data, 0);
  52.     LOAD_CS_PORT |= (1 << LOAD_CS);
  53. }
  54.  
  55. void MAX7219_Clear() {
  56.     //char i = 4;
  57.     //do {
  58.         MAX7219_Send(0x01, 0x0f);
  59.         MAX7219_Send(0x02, 0x0f);
  60.         MAX7219_Send(0x03, 0x0f);
  61.         MAX7219_Send(0x04, 0x0f);
  62.     //} while (-i);
  63. }
  64.  
  65. int main(void) {
  66.    
  67.     SW_SPI_Init();
  68.    
  69.     MAX7219_Send(0x09, 0x00);
  70.     MAX7219_Send(0x0B, 3);
  71.     MAX7219_Send(0x0A, 0x02);
  72.     MAX7219_Send(0x0C, 1);
  73.     MAX7219_Clear();
  74.    
  75.     unsigned char data[14] = {
  76.         0b00110000, // i
  77.         0b00111101, // d,
  78.         0b00110000, // i
  79.         0b00000000, // \s
  80.         0b00010101, // n,
  81.         0b01110111, // A,
  82.         0x00,
  83.         0b00110111, // H,
  84.         0b00111011, // Y
  85.         0b00110000, // i,
  86.         0x00,
  87.         0x00,
  88.         0x00,
  89.         0x00
  90.        
  91.     };
  92.     unsigned char display_common[4];
  93.     unsigned char i, shift = 0;
  94.    
  95.            
  96.     while (1) {
  97.         MAX7219_Clear();
  98.        
  99.         if ((shift++) > 10) shift -= 11;
  100.         for (i = 0; i < 4; i++) {
  101.             display_common[i] = data[ (i-1) + shift ];
  102.         }
  103.        
  104.         MAX7219_Send(0x01, display_common[0]);
  105.         MAX7219_Send(0x02, display_common[1]);
  106.         MAX7219_Send(0x03, display_common[2]);
  107.         MAX7219_Send(0x04, display_common[3]);
  108.            
  109.         _delay_ms(500);
  110.    
  111.     }
  112. }
  113.  
  114.  
Advertisement
Add Comment
Please, Sign In to add comment