📄 main.c
字号:
#include <avr/io.h>
//#include <avr/delay.h>
//宏定义
#define uchar unsigned char
#define uint unsigned int
void delay(int x)
{ int xx=100;
while(x-->0)
while(xx-->0);
}
//SPI初始化
void spi_init(void)
{
//OSCCAL=0x9d; // 8M系统内部时钟校准
DDRB|=0Xf8;
SPSR =_BV(SPI2X); // 设置SPI时钟倍速
SPCR =_BV(SPE) |_BV(MSTR); // 使能SPI接口,主机模式,4M时钟 0X50
}
int main()
{
spi_init();
DDRC=0XFF;
PORTC=0XFF;
uchar jtd1,jtd2,jtd_row,init_jtd1=0xfe,init_jtd2=0xff;
int jtd_x=0;
while(1)
{
//0x0f 0xff空 0xf0 0xff黄 0xff 0xf0 红 0xff 0x0f 绿
SPDR=0xff;
while((SPSR&0x80)==0); //等待数据传送完毕,置一
SPDR=0xff;
while((SPSR&0x80)==0); //等待数据传送完毕,置一
SPDR=jtd1;
while((SPSR&0x80)==0); //等待数据传送完毕,置一
SPDR=jtd2;
while((SPSR&0x80)==0); //等待数据传送完毕,置一
PORTB&=~_BV(PB6);//锁存595数据
PORTB|=_BV(PB6);
PORTB&=~_BV(PB6);
delay(20);
jtd_row++;
jtd1=(jtd1<<1)|0x01;
jtd2=(jtd2<<1)|0x01;
if(jtd_row>=4)
{
jtd_row=0;
jtd1=init_jtd1;
jtd2=init_jtd2;
jtd_x++;
}
if(jtd_x==200)
{
init_jtd1=0xff;
init_jtd2=0xfe;
}
if(jtd_x==400)
{
init_jtd1=0xff;
init_jtd2=0xef;
}
if(jtd_x==600)
{
init_jtd1=0xfe;
init_jtd2=0xff;
jtd_x=0;
}
}
}
/*
_delay_ms(1000);
_delay_ms(1000);
_delay_ms(1000);
_delay_ms(1000);
*/
/*
SPDR=0xff;
while((SPSR&0x80)==0); //等待数据传送完毕,置一
SPDR=0xff;
while((SPSR&0x80)==0); //等待数据传送完毕,置一
SPDR=0xff;
while((SPSR&0x80)==0); //等待数据传送完毕,置一
SPDR=0xf0;
while((SPSR&0x80)==0); //等待数据传送完毕,置一
PORTB&=~_BV(PB6);//锁存595数据
PORTB|=_BV(PB6);
PORTB&=~_BV(PB6);
delay(1000);
PORTC=0X00;
SPDR=0xff;
while((SPSR&0x80)==0); //等待数据传送完毕,置一
SPDR=0xff;
while((SPSR&0x80)==0); //等待数据传送完毕,置一
delay(1000);
SPDR=0xf0;
while((SPSR&0x80)==0); //等待数据传送完毕,置一
SPDR=0xff;
while((SPSR&0x80)==0); //等待数据传送完毕,置一
PORTB&=~_BV(PB6);//锁存595数据
PORTB|=_BV(PB6);
PORTB&=~_BV(PB6);
delay(1000);
PORTC=0Xff;
}
// TCNT0=00;///////////////////////////////////////////////////////
// delay(1);
}
/**/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -