使用MAX7219启用SPI并创建阵列

时间:2015-01-06 21:45:53

标签: c avr avr-gcc atmega

#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:错误:&#39; digits_disp&#39;的冲突类型 ../exp3.c:44:错误:以前定义&#39; digits_disp&#39;在这里

你能帮我解决一下我做错了什么吗?你能否告诉我如何初始化我的阵列以便我可以显示角色&#39; 3&#39;在我的模拟?换句话说,为了在我的数组中显示字符,我需要添加哪行代码? 谢谢。

2 个答案:

答案 0 :(得分:0)

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

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 };

答案 1 :(得分:0)

从第一行的评论中我收集到的是你正在使用其中一款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