我对微控制器编程相当陌生。我对 Arduino 有一些经验,但在我几乎完成我的项目后,我决定将我目前的项目转移到更便宜、更小的项目上。所以我现在在 Atmel studio 中使用 AVR ATmega32。
我正在尝试使用 ATmega32 与 MAX7219 芯片进行通信,以便与 LED 矩阵进行多路复用。但是,我确实有多个不同的设备要与之通信。
如何在不实际使用微控制器上提供的 SPI 引脚的情况下与设备通信?我做了一个测试项目,但似乎有问题,我无法弄清楚问题是什么。我想我设法让它进入了测试模式,因为所有的 LED 都亮了,但在那之后我无法让它做任何事情。我什至无法清除显示/关闭它。我再次检查了接线。就引脚配置和分配引脚而言,我的编码可能不正确吗?有什么建议或更好的方法来编写我的代码吗?
//test
#include <avr/io.h>
int main(void)
{
DDRB = 0b00000111; // pin 1(data), 2(clock) and 3(latch) are outputs
PORTB = 0 << PINB0; // data pin 1 is low
PORTB = 0 << PINB1; // clock pin 2 is low
PORTB = 0 << PINB2; // latch pin 3 is low
uint16_t data;
data = 0b0000110000000000; // data to shift out to the max7219
//read bit
uint16_t mask;
for (mask = 0b0000000000000001; mask>0; mask <<= 1)
{
//iterate through bit mask
if (data & mask)
{ // if bitwise AND resolves to true
// send one
PORTB = 1 << PINB0;
// tick
PORTB = 1 << PINB1;
// tock
PORTB = 0 << PINB1;
}
else{ //if bitwise and resolves to false
// send 0
// send one
PORTB = 0 << PINB0;
// tick
PORTB = 1 << PINB1;
// tock
PORTB = 0 << PINB1;
}
}
PORTB = 1 << PINB2; // latch all the data
PORTB = 1 << PINB0; // data pin 1 is high
PORTB = 0 << PINB1; // clock pin 2 is low
PORTB = 0 << PINB2; // latch pin 3 is low
}