原创 CEPARK AVR大学堂----Linglong AVR单片机之SPI通信

2009-11-19 09:56 1946 5 5 分类: MCU/ 嵌入式
/*********************************
功能AVR 单片机SPI通信
文件名:main.c
时钟:  16MHZ
芯片类型:Atmega16
作者:Linglong
时间:20090918
Email:Linglong0510@sina.com

这里我们是用SPI的方式驱动74HC595芯片在数据管上循环显示0~9;
*********************************/
#include <avr/io.h>
#include <util/delay.h>

#define DD_SPI DDRB
#define DD_MOSI PB5
#define DD_SS   PB4
#define DD_SCK  PB7

unsigned char DispBuff[] = {0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90}; //共阳数码管字库

void SPIMasterInit(void )   //SPI初始代函数
{
    DD_SPI = (1 << DD_MOSI)|(1 << DD_SS)|(1 << DD_SCK); // MOSI,SS,SCK 设置为输出
    
    SPCR = (1 << SPE)|(1 << MSTR)|(1 << SPR0);          //设置SPI始能,主机模式,时钟速率为fck/16.
        
}

void SPIDataTrantsmit(unsigned char cData)   //SPI传输函数
{
    SPDR = cData;
    while(!(SPSR&(1 << SPIF)));            //这里是判断SPIF是否为1,为1表示8位数据传完了。这里我们没有用中断的方式。
}

int main(void)
{
    unsigned char count = 0;      //设制循环变量
    PORTB = 0xff;
//    DDRB  = 0xff;
    SPIMasterInit();
    
    while(1)
    {

        PORTB &= ~(1 << DD_SS);
        SPIDataTrantsmit(DispBuff[count]);
        PORTB |= (1 << DD_SS);      //上升沿
        _delay_ms(500);
        
        
        count++;
        if(count > 9)
            {
                count = 0;    
            }    
    }
        
}

<?xml:namespace prefix = o />


 


                                                                                                            Linglong @ 20090918

附件下载地址:
CEPARK AVR大学堂----Linglong AVR单片机之SPI通信

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条