spi._c
来自「ISD1720芯片实现录音,定点录音,播放,定点播放等.」· _C 代码 · 共 72 行
_C
72 行
#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 + =
减小字号Ctrl + -
显示快捷键?