有玩过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 存储地址具体是怎么样的???? 是四十个存储单元为一组PLAYIT函数的调用吧??? 谢谢,我明白了是以40地址为存储单元
页:
[1]
