Arduino spi 74hc595级联atmega64
我在显示7段40组件74hc595级联链路上显示的40个值时遇到问题。 我在arduino上执行我的程序,效果很好 这是我的密码:Arduino spi 74hc595级联atmega64,arduino,spi,atmega,Arduino,Spi,Atmega,我在显示7段40组件74hc595级联链路上显示的40个值时遇到问题。 我在arduino上执行我的程序,效果很好 这是我的密码: static const byte Pattern[] = { B00010100, // 0 B00111111, // 1 B10011000, // 2 B00011010, // 3 B00110011, // 4 B01010010, // 5 B01010000, // 6 B
static const byte Pattern[] = {
B00010100, // 0
B00111111, // 1
B10011000, // 2
B00011010, // 3
B00110011, // 4
B01010010, // 5
B01010000, // 6
B00011111, // 7
B00010000, // 8
B00010010, // 9
B00010000}; // BLANK
byte HC595_DS_POS = 2; //Data pin (DS) pin location
byte HC595_SH_CP_POS = 3; //Shift Clock (SH_CP) pin location
byte HC595_ST_CP_POS = 4; //Store Clock (ST_CP) pin location
void IE74595_Out(uint8_t *p, unsigned char n)
{
unsigned char i, j;
uint8_t b;
digitalWrite(HC595_ST_CP_POS,0);
digitalWrite(HC595_SH_CP_POS,0);
for(j=0;j<n;j++)
{
b = Pattern[*(p+n-j-1)]; // Lay byte cao nhat truoc
for(i=0;i<8;i++)
{
digitalWrite(HC595_SH_CP_POS,0);
if(b & 0b00000001)
{
digitalWrite(HC595_DS_POS,1);
}
else
{
digitalWrite(HC595_DS_POS,0);
}
digitalWrite(HC595_SH_CP_POS,1);
b=b>>1; //Now bring next bit at MSB position
}
}
digitalWrite(HC595_ST_CP_POS,1);
}
void setup()
{
// put your setup code here, to run once:
pinMode(HC595_ST_CP_POS, OUTPUT);
pinMode(HC595_SH_CP_POS, OUTPUT);
pinMode(HC595_DS_POS, OUTPUT);
}
void loop() {
uint8_t Data[40]={2,5,1,3,2,1,3,6,1,9,4,8,1,7,0,5,1,2,5,6,5,4,1,4,1,8,1,3,1,9,5,6,4,5,6,2,6,1,0,2};
IE74595_Out(Data,40);
}
然后我在atmel studio上重新制作了另一个程序,并通过extrem burner和卡中的Usbasp加载它
这是我的密码:
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
static const uint8_t Pattern[] = {
0b00010100, // 0
0b00111111, // 1
0b10011000, // 2
0b00011010, // 3
0b00110011, // 4
0b01010010, // 5
0b01010000, // 6
0b00011111, // 7
0b00010000, // 8
0b00010010, // 9
0b00010000}; // BLANK
#define output_low(port,pin) port &= ~(1<<pin)
#define output_high(port,pin) port |= (1<<pin)
#define set_input(portdir,pin) portdir &= ~(1<<pin)
#define set_output(portdir,pin) portdir |= (1<<pin)
#define HC595_DS_POS PC4 //Data pin (DS) pin location
#define HC595_SH_CP_POS PC5 //Shift Clock (SH_CP) pin location
#define HC595_ST_CP_POS PC6 //Store Clock (ST_CP) pin location
#define HC595_PORT PORTC
#define HC595_DDR DDRC
void IE74595_Out(uint8_t *p, unsigned char n)
{
unsigned char i, j;
uint8_t b;
output_low(HC595_PORT,HC595_ST_CP_POS);
output_low(HC595_PORT,HC595_SH_CP_POS);
for(j=0;j<n;j++)
{
b = Pattern[*(p+n-j-1)];// Lay byte cao nhat truoc
for(i=0;i<8;i++)
{
output_low(HC595_PORT,HC595_SH_CP_POS);
if(b & 0b00000001)
{
output_high(HC595_PORT,HC595_DS_POS);
}
else
{
output_low(HC595_PORT,HC595_DS_POS);
}
output_high(HC595_PORT,HC595_SH_CP_POS);
b=b>>1;
}
}
output_high(HC595_PORT,HC595_ST_CP_POS);
}
int main(void)
{
set_output(DDRC,HC595_DS_POS);
set_output(DDRC,HC595_SH_CP_POS);
set_output(DDRC,HC595_ST_CP_POS);
uint8_t Data[40]={5,9,1,6,1,1,0,9,1,7,1,5,4,2,6,2,8,7,0,7,1,2,3,5,1,5,4,2,1,7,5,9,1,9,4,8,1,5,2,9};
while (1)
{
IE74595_Out(Data,40);
return 1;
}
}
这是我的名片
显示与arduino不同
我只显示最后一个值
我在中国开发了我的电子卡
材料有问题吗
这两个计划之间的唯一区别是:
在arduino上数码书写
和atmel上的输出_高或输出_低
DigitalWrite==输出是高还是低
我必须写最后一条指令返回1;过了一会儿
Thank的SS Slave Select上的10K下拉电阻器设计用于在主处理器引导时防止寄存器以位计时,并且SS线可能处于浮动和不确定状态 这是 调用SPI.transfer一次向寄存器发送一个字节一个位,然后使锁存器(也称为SS或ST line high)从寄存器的内部存储器向输出引脚传输数据 销连接
Uno和类似产品的引脚连接:每个移位寄存器是否有合适的去耦电容器?此外,digitalWrite的速度大约是sbi/cbi指令的80倍,因此缺少解耦可能是一个问题。特别是对于这种电流,@20mA=>3.2A上的所有段的一半,以及=>6.4A上的所有段。不,我使用我在中国开发的电子卡,我找到了解决方案,我找到了解决方案,我在时钟前加了一个延迟,这是代码