yyh1910 发表于 2010-11-21 11:10:00

有玩过isd4003的高手吗??求教!!

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char

//定义命令:ids4003为5位控制码和11位地址码//
/*++++++++此为5位控制码++++++++*/
#define powerup 0x20//上电{00100+000}         
#define stop 0x30    //停止当前操作{0X110+000}      /---5位控制码加3位“0”
#define powerstop 0x10//停止当前操作并掉电{0X01X+000}      /---构成8位控制码
#define playset 0xe0//从指定地址开始放音,后跟PLAY指令{11100+000}/---   其中“rec”指令为6位
#define play 0xf0//从当前地址开始放音(直到EOM或OVF){11110+000}   /---    只需加2位“0”构成
#define recset 0xb0//从指定地址开始录音,后跟REC指令{10110+000}    /---8位控制码
#define rec 0xd8   //从当前地址开始录音{110110+00}

//定义引脚//
sbit cs=P0^6;
sbit mosi=P0^5;
sbit miso=P0^4;
sbit sclk=P0^7;
sbit rac=P0^2;
sbit intt=P0^3;
sbit k1=P2^0;
sbit k2=P2^1;
sbit k3=P2^2;


/************************
函数名:delay()
函数功能:延时1ms
调用函数:无
全局变量:无
输入:uchar i
返回:无
*************************/
void delay(uchar i)
{ uchar j;
while(i--)
{
for(j=120;j<0;j--);
}
}


/******************************
函数名:luyin()
函数功能:芯片开始录音
调用函数:无
全局变量:无
输入:
返回:无
******************************/

void playit(uint addr)
{
uint y;
cs=0;
mosi=0;
sclk=0;
for(y=0;y<8;y++)
{ sclk=0;
if((powerup>>y)&0x01)//0x20上电命令//
mosi=1;
else
mosi=0;
_nop_();
_nop_();
_nop_();
sclk=1;
_nop_();
_nop_();
_nop_();
}
cs=1;
delay(50);
cs=0;
mosi=0;
sclk=0;
for(y=0;y<16;y++)    //发送16位地址//
{ sclk=0;
if((addr>>y)&0x01)
mosi=1;
else
mosi=0;
_nop_();
_nop_();
_nop_();
sclk=1;
_nop_();
_nop_();
_nop_();

}

   //设定放音//
mosi=0;
sclk=0;
for(y=0;y<8;y++)
{ sclk=0;
if((playset>>y)&0x01)
mosi=1;
else
mosi=0;
_nop_();
_nop_();
_nop_();
sclk=1;
_nop_();
_nop_();
_nop_();
}

//放音//
cs=1;
cs=0;
mosi=0;
sclk=0;
for(y=0;y<8;y++)
{ sclk=0;
if((play>>y)&0x01)
   mosi=1;
else
   mosi=0;

_nop_();
_nop_();
_nop_();
sclk=1;
_nop_();
_nop_();
_nop_();
}
cs=1;
}

void stopit()
{
uint y;
cs=1;
cs=0;
mosi=0;
sclk=0;
for(y=0;y<8;y++)
{
sclk=0;
if((stop>>y)&0x01)
mosi=1;
else
mosi=0;
_nop_();
_nop_();
_nop_();
sclk=1;
_nop_();
_nop_();
_nop_();
}
cs=1;
}

void main()
{ uint addr;
P0=0xff;
P1=0xff;
P2=0xff;
while(1)
{
if(k1==0)
{
   _nop_();
   _nop_();
   _nop_();
   if(k1==0)
   {
    while(k1==0);
    addr=0x00;
    playit(addr);
    addr+=0x40;    /*******(1)********/
    P2=0xff;
   }
}

if(k3==0)
{
   _nop_();
   _nop_();
   _nop_();
   if(k3==0)
   {
    while(k3==0);
    stopit();
    P2=0xff;
   }
}
}
}




这段程序是isd4004的,我现在用isd4003应该有很多不同,为什么在(1)处要加0x40,4003 存储地址具体是怎么样的????

weibode01 发表于 2010-11-22 10:59:20

是四十个存储单元为一组PLAYIT函数的调用吧???

yyh1910 发表于 2010-11-29 09:58:34

谢谢,我明白了是以40地址为存储单元
页: [1]
查看完整版本: 有玩过isd4003的高手吗??求教!!