📄 spi._c
字号:
#include "1602显示.c"
#include "4X4键盘.c"
void spi_sent_init(void)
{ PORTB |= (1<<PB4)|(1<<PB5)|(1<<PB6)|(1<<PB7);
DDRB |= (1<<DDB5)|(1<<DDB7)|(1<<DDB4); //设置MOSI,SCK和SS为输出
SPCR = (1<<SPE)|(1<<DORD)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);//设置为主机,LSB先发送
SPSR = 0x00; //预分频为128
}
unsigned char SPI_sent(unsigned int Data)
{
unsigned char sign;
PORTB &=~ (1<<PB4); //强制接收方进入从模式
SPCR |= (1<<MSTR); // MSTR有时会被清零,这里强制进入主机模式
SPDR = Data; //启动数据传输
while(!(SPSR&(1<<SPIF))); //等待传输结束
PORTB |= (1<<PB4);
sign=SPSR;
sign=SPDR;
return sign;
}
/**********************************************************
注意下面接到的数据是发的两位,原因可能是多接收了一位
/************************************************************/
void SPI_receive_int(void)
{
/* 设置MISO为输出,其他为输入 */
DDRB=0x02;
PORTB|=BIT(4);
}
unsigned char SPI_receive()
{
unsigned char receive;
SPCR = (1<<SPE)|(1<<DORD);/* 使能 SPI */
while(!(SPSR & (1<<SPIF)));/* 等待接收结束 */
receive=SPSR;
receive=SPDR;
return receive;/* 返回数据 */
}
void main(void)
{
unsigned char F_data=1,j=0;
// /*
LCD_init();
while(1)
{
if(!(PINB&0x08))
{
SPI_receive_int();
F_data=SPI_receive();
LCD_write_chang_data(0,0,F_data);
}
}
// */
/*
spi_sent_init();
while(1)
{
DDRD=0xFF;
if(key_press())
{
F_data=key_scan();
//PORTB&=0xF7;
j=SPI_sent(F_data);
LCD_init();
LCD_write_chang_data(0,0,F_data);
}
}
// */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -