⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isd4004.c

📁 ISD4004的一些基本的程序
💻 C
字号:
ISD4004基本程序

/********************************************************************
                ISD4004 基本程序               AVR meag16
    Pafone                         SPI 端口 1M内部晶振
                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
//*******************************延时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);//设置MOSI,SCK,SS 为OUTPUT,其它为INPUT
 SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|BIT(SPR1)|BIT(DORD);//SPI使能,主机方式,设置SCK为fosc/128,上升沿,LSB First
}
//****************************数据传送函数**********************************
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();//为保证那个500ns
 SpiTransmit(Addr);          //传地址低位
 SpiTransmit(Addr>>8);  //传地址高字节
 SpiTransmit(cmd);   //传命令
 PORTB = PORTB|(1<<DD_SS);//变高SS
 NOP();//为保证那个500ns
}
//*************************放音函数**********************
void play(unsigned int addrs)
{
 cmdSend(0x0000,0x20);//Power up
 delay100ms();//上电延时
 cmdSend(addrs,0xe0);//发地址值为addr的Setplay命令
 cmdSend(0x0000,0xf0);//发Play命令
}
//************录音函数*******************************
void rec(unsigned int addrs)
{
 cmdSend(0x0000,0x20);// 发POWER UP命令;
 delay100ms();// 等待TPUD(上电延时);
 cmdSend(0x0000,0x20);// 发POWER UP命令
 cmdSend(addrs,0xa0);// 发地址值为00的SETREC命令;
 cmdSend(0x0000,0xb0);// 发REC命令。
}
//**************停止当前操作函数*****************************
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);//这个没用的?控制不了---在SPI下?
 SPI_MasterInit();
 delay(255);
 rec(0);
 PORTA = 0xff;//开始录音,灯亮
 for(;j<100;j++)
 {
  delay(255);
 }
 stop();
 delay(255);
 PORTA = 0x00;//停止录音,灯灭
 play(0);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -