因仑“3+1”工程特种兵精英论坛

标题: ids4004上位机语音报时 [打印本页]

作者: 脑经急转弯    时间: 2016-6-20 19:55
标题: ids4004上位机语音报时
小弟刚学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();

}





欢迎光临 因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4