Advertisement
microrobotics

LED Matrix for Raspberry Pi - Max7219

Apr 5th, 2023
758
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.05 KB | None | 0 0
  1. // blink.c
  2. //
  3. // Example program for bcm2835 library
  4. // Blinks a pin on an off every 0.5 secs
  5. //
  6. // After installing bcm2835, you can build this
  7. // with something like:
  8. // make or gcc -o led led.c -lbcm2835
  9. // sudo ./led
  10. /*
  11.              define from bcm2835.h                       define from Board DVK511
  12.                  3.3V | | 5V               ->                 3.3V | | 5V
  13.     RPI_V2_GPIO_P1_03 | | 5V               ->                  SDA | | 5V
  14.     RPI_V2_GPIO_P1_05 | | GND              ->                  SCL | | GND
  15.        RPI_GPIO_P1_07 | | RPI_GPIO_P1_08   ->                  IO7 | | TX
  16.                   GND | | RPI_GPIO_P1_10   ->                  GND | | RX
  17.        RPI_GPIO_P1_11 | | RPI_GPIO_P1_12   ->                  IO0 | | IO1
  18.     RPI_V2_GPIO_P1_13 | | GND              ->                  IO2 | | GND
  19.        RPI_GPIO_P1_15 | | RPI_GPIO_P1_16   ->                  IO3 | | IO4
  20.                   VCC | | RPI_GPIO_P1_18   ->                  VCC | | IO5
  21.        RPI_GPIO_P1_19 | | GND              ->                 MOSI | | GND
  22.        RPI_GPIO_P1_21 | | RPI_GPIO_P1_22   ->                 MISO | | IO6
  23.        RPI_GPIO_P1_23 | | RPI_GPIO_P1_24   ->                  SCK | | CE0
  24.                   GND | | RPI_GPIO_P1_26   ->                  GND | | CE1
  25.  
  26. ::if your raspberry Pi is version 1 or rev 1 or rev A
  27. RPI_V2_GPIO_P1_03->RPI_GPIO_P1_03
  28. RPI_V2_GPIO_P1_05->RPI_GPIO_P1_05
  29. RPI_V2_GPIO_P1_13->RPI_GPIO_P1_13:
  30. */
  31.  
  32. #include <bcm2835.h>
  33. #include <stdio.h>
  34.  
  35. typedef unsigned char uchar;
  36. typedef unsigned int uint;
  37.  
  38. #define Max7219_pinCS  RPI_GPIO_P1_24
  39.  
  40. uchar disp1[38][8] = {
  41.     // 0 to 9, A to Z, and special characters
  42. };
  43.  
  44. void Delay_xms(uint x) {
  45.     bcm2835_delay(x);
  46. }
  47.  
  48. void Write_Max7219_byte(uchar DATA) {
  49.     uchar i;
  50.     bcm2835_gpio_write(Max7219_pinCS, LOW);
  51.     bcm2835_spi_transfer(DATA);
  52. }
  53.  
  54. void Write_Max7219(uchar address1, uchar dat1, uchar address2, uchar dat2) {
  55.     bcm2835_gpio_write(Max7219_pinCS, LOW);
  56.  
  57.     Write_Max7219_byte(address1);
  58.     Write_Max7219_byte(dat1);
  59.     Write_Max7219_byte(address2);
  60.     Write_Max7219_byte(dat2);
  61.  
  62.     bcm2835_gpio_write(Max7219_pinCS, HIGH);
  63. }
  64.  
  65. void Init_MAX7219(void) {
  66.     Write_Max7219(0x09, 0x00, 0x09, 0x00);
  67.     Write_Max7219(0x0a, 0x03, 0x0a, 0x03);
  68.     Write_Max7219(0x0b, 0x07, 0x0b, 0x07);
  69.     Write_Max7219(0x0c, 0x01, 0x0c, 0x01);
  70.     Write_Max7219(0x0f, 0x00, 0x0f, 0x00);
  71. }
  72.  
  73. int main(void) {
  74.     uchar i, j;
  75.     if (!bcm2835_init()) return 1;
  76.  
  77.     bcm2835_spi_begin();
  78.     bcm2835_spi_setBitOrder(BCM2835_SPI_BIT_ORDER_MSBFIRST);
  79.     bcm2835_spi_setDataMode(BCM2835_SPI_MODE0);
  80.     bcm2835_spi_setClockDivider(BCM2835_SPI_CLOCK_DIVIDER_256);
  81.  
  82.     bcm2835_gpio_fsel(Max7219_pinCS, BCM2835_GPIO_FSEL_OUTP);
  83.  
  84.     Delay_xms(50);
  85.     Init_MAX7219();
  86.  
  87.     while(1) {
  88.         for(j = 0; j < 37; j++) {
  89.             for(i = 1; i < 9; i++) {
  90.                 Write_Max7219(i, disp1[j+1][i-1], i, disp1[j][i-1]);
  91.             }
  92.             Delay_xms(1000);
  93.         }
  94.     }
  95.  
  96.     bcm2835_spi_end();
  97.     bcm2835_close();
  98.  
  99.     return 0;
  100. }
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement