集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1654|回复: 2

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

[复制链接]
yyh1910 发表于 2010-11-21 11:10:00 | 显示全部楼层 |阅读模式
#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 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-5-23 17:32 , Processed in 0.067855 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表