本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
看这个论坛氛围很好,在别处问过的问题再问一遍。
小弟谢了atmega64与max7221的程序,在板子上实验,LED不亮,请各位大神老师指点下哪有错误,谢谢各位。
程序如下
- #include <AVR/io.h>
- #define uint unsigned int
- #define uchar unsigned char
- void SPI_MasterInit(void);
- void LedDisPlay(uchar addr,uint data);
- void Max7221Init(void);
- void Write_TUBE( void);
- uchar num;
- uint TUBE[10]={0,1,2,3,4,5,6,7,8,9}; //缓存数码管的十位数据
- //spi初始化
- void SPI_MasterInit(void)
- {
- DDRB =(1<<DDB0)|(1<<DDB1)|(1<<DDB2);
- SPCR =(0<<SPIE)|(1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA)|(0<<SPR1)|(1<<SPR0);
- }
- void Max7221Init(void)
- {
- LedDisPlay(0x0c,0x01); //工作模式地址 0x0c(0x00:关闭,0x01:正常)
- LedDisPlay(0x09,0xff); //解码模式地址 0x09(0x00 为不解码,0xff 为全解码)
- LedDisPlay(0x0a,0x07); // 亮度地址0x0a(0x00~0x0f,0x0f 最亮)
- LedDisPlay(0x0b,0x07); // 扫描数码管个数地址0x0b(0x07 为扫描数码管0~7)
- }
- void LedDisPlay(uchar addr,uint data)
- {
- PORTB &= ~(1<<PB0);
- SPDR = addr;
- while(!(SPSR & (1<<SPIF)));
- SPDR = data;
- while(!(SPSR & (1<<SPIF)));
- PORTB |= (1<<PB0);
- }
- //将 TUBE[10] 中数据写入数码管
- void Write_TUBE( )
- {
- uint i;
- for(num=0;num<=9;num++)
- {
- LedDisPlay(num,TUBE[num-1]);
- for(i=0;i<=100;i++)
- {
- //NOP;
- }
- }
- }
- /************************主程序*****************************/
- int main()
- {
- DDRB =(1<<PB0)|(1<<PB1)|(1<<PB2);
- SPI_MasterInit();
- Max7221Init();
- Write_TUBE();
- while(1);
- }
- 复制代码
复制代码 |