|
发表于 2010-7-17 16:25:59
|
显示全部楼层
主机
#include<iom16v.h>
#include<macros.h>
#define uint unsigned int
#define uchar unsigned char
#define xtal 8
#define CLR_BIT(x,y) (x&=~(1<<y))
#define SET_BIT(x,y) (x|=(1<<y))
#define SS 4
uchar seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar txbuffer[10]={0,1,2,3,4,5,6,7,8,9};
uchar i=0;
uchar temp;
void delay_ms(void)
{
uint i;
for(i=1;i<(uint)(xtal*143-2);i++);
}
void delay_nms(uint k)
{
uint i=0;
while(i<k)
{
delay_ms();
i++;
}
}
void port_init(void)
{
DDRA=0xff;
PORTA=0xff;
DDRB=0xb0;
PORTB=0x10;
DDRC=0xff;
PORTC=0xff;
}
void spi_masterinit(void)
{
SPCR=0x51;
}
void spi_mastertransmit(uchar data)
{
SPDR=data;
while(!(SPSR&(1<<SPIF)));
CLR_BIT(SPSR,SPIF);
}
uchar spi_slavereceive(void)
{
while(!(SPSR&(1<<SPIF)));
return SPDR;
CLR_BIT(SPSR,SPIF);
}
void main(void)
{
delay_nms(100);
port_init();
spi_masterinit();
while(1)
{
CLR_BIT(PORTB,SS);
spi_mastertransmit(txbuffer);
SET_BIT(PORTB,SS);
PORTC=0xff;
PORTA=seg[txbuffer];
PORTC=0xfe;
delay_nms(500);
if(++i>9)i=0;
}
}
从机
#include<iom16v.h>
#include<macros.h>
#define uint unsigned int
#define uchar unsigned char
#define CLR_BIT(x,y) (x&=~(1<<y))
#define xtal 8
uchar seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar rxbuffer[10];
uchar i=0;
void delay_ms(void)
{
uint i;
for(i=1;i<(uint)(xtal*143-2);i++);
}
void delay_nms(uint k)
{
uint i=0;
while(i<k)
{
delay_ms();
i++;
}
}
void port_init(void)
{
DDRA=0xff;
PORTA=0x00;
DDRB=0x40;
PORTB=0x10;
DDRC=0xff;
PORTC=0xff;
}
void spi_slaveinit(void)
{
SPCR=0x41;
}
uchar spi_slavereceive()
{
while(!(SPSR&(1<<SPIF)));
return SPDR;
CLR_BIT(SPSR,SPIF);
}
void main(void)
{
//delay_nms(50);
port_init();
spi_slaveinit();
SPDR=0x55;
while(1)
{
rxbuffer=spi_slavereceive();
SPDR=0x55;
PORTA=seg[rxbuffer];
PORTC=0xfe;
if(++i>9)i=0;
}
}
你在protues里仿真一下吧!数码管用的是共阳极,晶振8M |
|