📄 isd4003play.txt
字号:
//简单的ISD4003放音控制程序
//基于ATmega16,编程工具为winAVR,实验通过
//IO口设置
#define SS_low() PORTB&=~(1<<PB4)//ISD片选
#define SS_high() PORTB|=1<<PB4
#define MOSI_0() PORTB&=~(1<<PB5)//输出位0
#define MOSI_1() PORTB|=(1<<PB5)//输出位1
#define SPI_SCK1() PORTB|=(1<<PB7)//时钟1
#define SPI_SCK0() PORTB&=~(1<<PB7)//时钟0
//以下为控制字
#define POWERUP 0x2000 //使ISD4003上电
#define SETPLAY 0xe000 //设定播放地址
#define PLAY 0xf000 //从当前地址播放
#define STOP 0x3000 //停止ISD4003
#define STOPPWRDN 0x1000//停止并使ISD4003掉电
#define RINT 0x3000
unsigned int SPI_write_word(unsigned int word)
{
unsigned int i=0;
unsigned int j;
SPI_SCK0();
SS_low();
for(j=0x0001;j;j<<=1)
{
if(j&word)MOSI_1();
else MOSI_0();
SPI_SCK1();
SPI_SCK1();
SPI_SCK0();
if(PINB&1<<PB6)i|=j;
}
SS_high();
return(i);
}
void PlaySound(unsigned int addr)//从addr处进行播放
{
SPI_write_word(POWERUP);
delay(25);//等待,这个函数另加,不叙
SPI_write_word(SETPLAY+addr);
SPI_write_word(PLAY);
}
int main(void)
{
DDRB = 0xb0; //PB4为SPI控制脚,PB5,MOSI,PB6,MISO,PB7,SCK
PORTB = 0x08;
while(1)
{
PlaySound(0);//从地址0开始播放
delay(2000);//延时
SPI_write_word(STOP);//停止播放
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -