小弟刚学51不久,希望大家不要见笑,
ids4004操作:
#include"ids4004.h"
#include<reg52.h>
#include"delay.h"
#define POWERUP 0X20
#define SET_PLAY 0XE0
#define SET_REC 0XA0
#define PLAY 0XF0
#define REC 0XB0
#define STOP 0X30
#define DROP 0X10
#define MC 0XF8
void writeIsd_byte(uchar Sdata) //ISD写操作,
{
uchar i;
SCL4004=0;
for(i=0;i<8;i++)
{
if(Sdata & 0x01)
{
MOSI=1;
}
else
MOSI=0;
SCL4004=1;
Sdata>>=1;
SCL4004=0;
}
}
/**************************************
设置开始录音、播放的地址,但是不能完成一个完整录放过程
***************************************/
void set_play_addr(uint addr) //从设置开始播放的地址
{
uchar addrH,addrL;
addrH=(uchar)(addr>>8);
addrL=(uchar)addr;
SS=0;
writeIsd_byte(addrL);
writeIsd_byte(addrH);
writeIsd_byte(SET_PLAY);
SS=1;
}
void set_rec_addr(uint addr) // 从设置开始录音的地址
{
uchar addrH,addrL;
addrH=(uchar)(addr>>8);
addrL=(uchar)addr;
SS=0;
writeIsd_byte(addrL);
writeIsd_byte(addrH);
writeIsd_byte(SET_REC);
SS=1;
}
/*******************************
发送停止、停止掉电、上电、录音和播放的指令
*********************************/
void stop()
{
SS=0;
writeIsd_byte(STOP);
SS=1;
}
void powerUp(void) //发送指令,给isd4004上电
{
SS=0;
writeIsd_byte(POWERUP);
SS=1;
}
void stop_power(void) //发送停止并掉电指令
{
SS=0;
writeIsd_byte(DROP);
SS=1;
}
void Send_play_com(void) //发送录音指令
{
SS=0;
writeIsd_byte(0xf0);
SS=1;
}
void Send_rec_com (void)//发送录音指令
{
SS=0;
writeIsd_byte(REC);
SS=1;
}
void fast(void) //发送指令,给isd4004快进
{
SS=0;
writeIsd_byte(MC);
SS=1;
}
/****************************
从指定的地址开始录音和播放,两者都为一个完整的操作
*******************************/
void rec4004(unsigned int addr)
{
powerUp();
delayXms(25);
powerUp();
delayXms(25);
delayXms(25);
set_rec_addr(addr);
Send_rec_com();
}
void play4004(unsigned int addr)//从已经录制好的地址开始播放
{
powerUp();
delayXms(25);
set_play_addr(addr);
Send_play_com();
}
|