有关录音和语音识别的小项目|采用51和32单片机和两个集成的板子

一、硬件部分

二、软件部分

1.iSD录音模块代码.c和.h文件如下

#include "delay.h"
#include <STC89C5xRC.H>
#include "ISD4004.h"
#include <intrins.h>

void delay(unsigned int time) //延迟n微秒
{
while(time--);
}
void spi_send(unsigned char isdx)
{ 
unsigned char y;
MOSI=0;
SCLK=0;
	for(y=0;y<8;y++)
	{
		SCLK=0;
		if((isdx>>y)&0x01)MOSI=1;
		else MOSI=0;
		_nop_();
		_nop_();
		_nop_();
		SCLK=1;
		_nop_();
		_nop_();
		_nop_();
         }
}


void spisend16(unsigned int addr)
{

	  char y;
	MOSI=0;//发送地址
	SCLK=0;
	for(y=0;y<16;y++)
	{
		SCLK=0;
		if((addr>>y)&0x01)MOSI=1;
		else MOSI=0;
		_nop_();
		_nop_();
		_nop_();
		SCLK=1;
		_nop_();
		_nop_();
		_nop_();
	}//发送地址结束

}

void SendCmd(unsigned char cmd,unsigned int addr)
{  
unsigned char ar;
SS=0; //ss=0,打开spi通信端
delay(5);
ar=(unsigned char)(addr);
spi_send(ar); //发送地址低位
ar=(unsigned char)(addr>>8);
spi_send(ar); //发送地址高位
spi_send(cmd);//发送命令
SS=1;
delay(5);
SCLK=0;
}



void autoplay(unsigned int addr)
{ 
	SS=0;  //发送开始
	MOSI=0;
	SCLK=0;	  
    spi_send(ISDPOWERUP);	// 上电
    SS=1;
    delayms(50);
	 
	SS=0;	  //发送发音地址
	MOSI=0;
	SCLK=0;
	spisend16(addr);
	MOSI=0;//放音  设置命令
	SCLK=0;
	spi_send(PLAYSET);
	SS=1;
	SS=0;
	MOSI=0;//放音  命令
	SCLK=0;
	spi_send(PLAYCUR);
	SS=1;	
}


	void autorecord(unsigned int addr)
{  

	SS=0;  //发送开始
	MOSI=0;
	SCLK=0;	  
    spi_send(ISDPOWERUP);	// 上电
    SS=1;
    delayms(50);

		SS=0;  //发送开始
	MOSI=0;
	SCLK=0;	  
    spi_send(ISDPOWERUP);	// 上电
    SS=1;
    delayms(50);

	 
	SS=0;	  //发送发音地址
	MOSI=0;
	SCLK=0;
	spisend16(addr);


	MOSI=0;//放音  设置命令
	SCLK=0;
	spi_send(RECSET);
	SS=1;

	SS=0;
	MOSI=0;//放音  命令
	SCLK=0;
	spi_send(RECCUR);
	SS=1;	


}




void  stop()
 {
    SS=1;
	SS=0;
	MOSI=0;//放音
	SCLK=0;
    spi_send(OPERSTOP);
  	SS=1;
}

	 void stoppd()
	 {  
	SS=1;
	SS=0;
	MOSI=0;//放音
	SCLK=0;
    spi_send(ISDPOWERUP);
  	SS=1;
	 }
void InitISD()
{ 
SS=1;
SCLK=1;
MOSI=1;
}
#ifndef _ISD4004_H_
#define _ISD4004_H_
#include <STC89C5xRC.H>
sbit SS = P1^3; //片选
sbit SCLK = P1^1; //ISD4003时钟
sbit MOSI = P1^0; //数据输入
sbit INT =	P1^4; //中断


#define ISDPOWERUP      0X20           //ISD4004上电
#define ISDSTOP         0X10           //ISD4004下电
#define OPERSTOP        0X30           //ISD4004停止当前操作
#define PLAYSET         0XE0           //ISD4004从指定地址开始放音
#define PLAYCUR         0XF0           //ISD4004从当前地址开始放音
#define RECSET          0XA0          //ISD4004从指定地址开始录音
#define RECCUR          0XB0     //ISD4004从当前地址开始录音

#define SetHigRes()  {P1=0x1b;}//设置为高阻态 0001 1011
#define SetNormalSt(){P1=0x10;}//设置为普通态  

extern  void autoplay(unsigned int addr);
extern 	void autorecord(unsigned int addr);
extern  void InitISD();
extern  void spi_send(unsigned char isdx);
extern void stop();
extern  void stoppd();
#endif 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值