C语言 启用 SPI 并使用 MAX7219 创建阵列


#define F_CPU 16000000UL          // AVRJazz28PIN Board Used 16MHz
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define SPI_PORT PORTB
#define SPI_DDR  DDRB
#define SPI_CS   PB2

void SPI_Write(uint8_t addr, uint8_t dataout)
{        
  // Enable CS Pin
  SPI_PORT &= ~(1<<SPI_CS);
  // Start Address transmission (MOSI)    
  SPDR = addr;
  // Wait for transmission complete
  while(!(SPSR & (1<<SPIF)));    
  // Start Data transmission (MOSI)
  SPDR = dataout;
  // Wait for transmission complete
  while(!(SPSR & (1<<SPIF)));
  // Disable CS Pin
  SPI_PORT |= (1<<SPI_CS);    
}
 char digit[10] = {0,0,0,0,0,0,0,0,0,0};
digit[0] = 0x7E
digit[1] = 0x30
digit[2] = 0x6D
digit[3] = 0x79
digit[4] = 0x33
digit[5] = 0x5B
digit[6] = 0x5F
digit[7] = 0x70
digit[8] = 0x7F
digit[9] = 0x7B
void main()
{
char ch;
char digits_disp[10] = {0,0,0,0,0,0,0,0,0,0};
ch = digits_disp[3];
}

这是一个非常基本的代码。我正在使用MAX 7219显示驱动器设计时钟。在我详细介绍之前,我想得到一个基本代码,我将初始化SPI,然后使用MAX7219的数据表声明每个字符的值,然后编写一个简短的数组来显示随机数。但是这段代码不能正常工作,并且一直在说:../exp3.c:45:错误:"digits_disp"的类型冲突../exp3.c:44:错误:此处是"digits_disp"的先前定义

你能

帮我解决我做错了什么吗?你能告诉我如何初始化我的数组,以便我可以在我的模拟中显示字符"3"吗?换句话说,我需要添加哪行代码才能显示数组中的字符?谢谢。

我无法真正理解您的代码,但是这部分代码在语法上无效:

char digit[10] = {0,0,0,0,0,0,0,0,0,0};
digit[0] = 0x7E
digit[1] = 0x30
digit[2] = 0x6D
digit[3] = 0x79
digit[4] = 0x33
digit[5] = 0x5B
digit[6] = 0x5F
digit[7] = 0x70
digit[8] = 0x7F
digit[9] = 0x7B

您可能希望改为执行以下操作:

char digit[10] = { 0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B, 0x5F, 0x70, 0x7F, 0x7B };

从我收集的第一行的评论中,您正在使用 Atmel 芯片之一。如果是这样,以下是对您有所帮助的文章:

http://www.adnbr.co.uk/articles/max7219-and-7-segment-displays

您可以使用他们的代码作为起点:

https://gist.github.com/adnbr/2352797

这也是Arduino版本,以防其他人感兴趣:

https://gist.github.com/nrdobie/8193350

最新更新