使用Max7219和Atmega 16或类似的微控制器驱动双色8 * 8 led matri

时间:2017-05-23 10:18:17

标签: microcontroller avr atmega16

我有一个带有24个引脚的共阳极双色LED矩阵,并希望使用一个微控制器驱动其中的两个。所以我决定尝试使用Max7219驱动程序。但作为一个新手,我很难搞清楚要做什么,而在线资源似乎以arduino为中心。我找到了由Davide Gironi开发的library。但它似乎与共同的阴极矩阵一起工作。因此,我将行更改为列以适应共阳极结构,但没有运气。 您能否告诉我一些寻找解决方案的线索?

1 个答案:

答案 0 :(得分:1)

我首先尝试点亮单个LED,然后点亮没有库的行和列。一旦你很好地理解它是如何工作的,你可以自己编写一个库,或者在你正在使用的库中调整低级驱动程序固件。 一旦您获得了正常工作的代码,您就可以调试该库直到它工作。

这里有一些伪代码。我不太熟悉Atmega 16的确切功能,但我确信您能够使用正确的代码替换延迟和端口配置。

  #define CLOCK  PORT1.0 // Replace PORT1.x with proper port
  #define DIN    PORT1.1
  #define LOAD   PORT1.2
  #define nCS    PORT1.3

  void SetupIO()
  {
     //Set clock as an output
     //Set DIN as an output
     //Set LOAD as an output
     //Set nCS as an output
  }

  void DoClock()
  {
     CLOCK = 1;
     delay_us(1);
     CLOCK = 0;
     delay_us(1);
  }

  void WriteBits(char address, char data)
  {
     char i;
     // Set LOAD and nCS low
     LOAD = 0;
     nCS = 0;
     delay_us(1); // replace all delay functions/macros with proper delay macro

     // write address
     for( i = 7; i > 0 ; i--)
     {
        DIN = (address >> i) & 1;  // shift data to the proper bit
        delay_us(1);               // allow signal to settle
        DoClock();                 // clock the bit into the MAX7219
     }

     // write data
     for( i = 7; i > 0 ; i--)
     {
        DIN = (data >> i) & 1;     // shift data to the proper bit
        delay_us(1);
        DoClock();                 // clock the bit into the MAX7219
     }

     // Latch the address/data
     LOAD = 1;
     nCS = 1;
     delay_us(1);
     LOAD = 0;
     nCS = 0;
     delay_us(1);
  }

  void main()
  {
     SetupPins();

     // initialize display
     WriteBits(0x0C, 0x01); // Normal operation
     WriteBits(0x09, 0x00); // BCD decoder off
     WriteBits(0x0A, 0xFF); // Max intensity
     WriteBits(0x0B, 0x07); // Scan all digits

     //Test display 8, all digits on
     WriteBits(0x00, 0xff);
  }