?? isd4004.c
字號(hào):
ISD4004基本程序
/********************************************************************
ISD4004 基本程序 AVR meag16
Pafone SPI 端口 1M內(nèi)部晶振
13th April 2007 It took me about 3 days
********************************************************************/
#i nclude<iom16v.h>
#i nclude<macros.h>
#define uchar unsigned char
#define DDR_SPI DDRB
#define DD_MOSI 5
#define DD_SCK 7
#define DD_SS 4
//*******************************延時(shí)100ms*****************************
void delay100ms()
{
unsigned char i,j;
for(j = 0;j<316;j++)
for(i = 0;i<316;i++);//1MHz的晶振
}
//************************初始化SPI***********************************
void SPI_MasterInit()
{
DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_SS);//設(shè)置MOSI,SCK,SS 為OUTPUT,其它為INPUT
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|BIT(SPR1)|BIT(DORD);//SPI使能,主機(jī)方式,設(shè)置SCK為fosc/128,上升沿,LSB First
}
//****************************數(shù)據(jù)傳送函數(shù)**********************************
void SpiTransmit(unsigned char data)
{
SPDR = (unsigned char)data;
while(!(SPSR&(1<<SPIF)));//Wait for transmission finish
}
//****************cmdSend*********************************
void cmdSend(unsigned int Addr,unsigned char cmd)
{
PORTB = PORTB&(~(1<<DD_SS));//變低SS
NOP();//為保證那個(gè)500ns
SpiTransmit(Addr); //傳地址低位
SpiTransmit(Addr>>8); //傳地址高字節(jié)
SpiTransmit(cmd); //傳命令
PORTB = PORTB|(1<<DD_SS);//變高SS
NOP();//為保證那個(gè)500ns
}
//*************************放音函數(shù)**********************
void play(unsigned int addrs)
{
cmdSend(0x0000,0x20);//Power up
delay100ms();//上電延時(shí)
cmdSend(addrs,0xe0);//發(fā)地址值為addr的Setplay命令
cmdSend(0x0000,0xf0);//發(fā)Play命令
}
//************錄音函數(shù)*******************************
void rec(unsigned int addrs)
{
cmdSend(0x0000,0x20);// 發(fā)POWER UP命令;
delay100ms();// 等待TPUD(上電延時(shí));
cmdSend(0x0000,0x20);// 發(fā)POWER UP命令
cmdSend(addrs,0xa0);// 發(fā)地址值為00的SETREC命令;
cmdSend(0x0000,0xb0);// 發(fā)REC命令。
}
//**************停止當(dāng)前操作函數(shù)*****************************
void stop(void)
{
cmdSend(0x0000,0x30);
}
///////////////////////////
void delay(uchar k)
{
unsigned char a,b;
for(a = k;a>0;a--)
for(b = 1;b;b++);
}
////////////////////////
void main()
{unsigned int j = 0;
DDRA = 0xff;
PORTB = PORTB|(1<<DD_SS);//變高SS
// PORTB &= ~BIT(DD_MOSI);//這個(gè)沒(méi)用的?控制不了---在SPI下?
SPI_MasterInit();
delay(255);
rec(0);
PORTA = 0xff;//開(kāi)始錄音,燈亮
for(;j<100;j++)
{
delay(255);
}
stop();
delay(255);
PORTA = 0x00;//停止錄音,燈滅
play(0);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -