找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3367|回复: 0
收起左侧

ISD4004录音程序

[复制链接]
ID:93384 发表于 2015-10-25 22:34 | 显示全部楼层 |阅读模式
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned  char
#define uint  unsigned  int
sbit SS=P1^0;    //片选      
sbit MOSI=P1^1;  //数据输入
sbit MISO=P1^2;  //数据输出
sbit SCLK=P1^3;  //SID4004时钟
//sbit ISD_INT=P3^1;  //中断
sbit K1=P3^2;
sbit K2=P3^3;
sbit AN=P3^4;   //执行
//sbit STOP=P1^5;  //复位
//sbit PR=P1^6;   //PR=1录音,PR=0放音  
sbit LED=P0^0;  //指示灯
void delayms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
uint  addr;////全局变量////  放音地址  
////////////////放音部分子程序,放音地址由ADDR决定////
void play()
{  uint y;
SS=0;
MOSI=0;//发送开始
SCLK=0;
for(y=0;y<8;y++)
{
  SCLK=0;
  if((0x20>>y)&0x01)MOSI=1;
  else MOSI=0;
  _nop_();
  _nop_();
  _nop_();
  SCLK=1;
  _nop_();
  _nop_();
  _nop_();
}//发送结束
SS=1;//上电结束
delayms(50);
SS=0;
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_();
}//发送地址结束
MOSI=0;//从指定地址开始放音
SCLK=0;
for(y=0;y<8;y++)
{
  SCLK=0;
  if((0xe0>>y)&0x01)MOSI=1;
  else MOSI=0;
  _nop_();
  _nop_();
  _nop_();
  SCLK=1;
  _nop_();
  _nop_();
  _nop_();
}
SS=1;
SS=0;
MOSI=0;//放音
SCLK=0;
for(y=0;y<8;y++)
{
  SCLK=0;
  if((0xf0>>y)&0x01)MOSI=1;
  else MOSI=0;
  _nop_();
  _nop_();
  _nop_();
  SCLK=1;
  _nop_();
  _nop_();
  _nop_();
}
SS=1;   }
//////////////////////////录音部分子程序,地址由ADDR决定/////////////////////////
void rec()               
{  uint y;
SS=0;
MOSI=0;//发送开始
SCLK=0;
for(y=0;y<8;y++)
{
  SCLK=0;
  if((0x20>>y)&0x01)MOSI=1;
  else MOSI=0;
  _nop_();
  _nop_();
  _nop_();
  SCLK=1;
  _nop_();
  _nop_();
  _nop_();
}//发送结束
SS=1;//上电结束
delayms(50);
SS=0;
MOSI=0;//发送开始
SCLK=0;
for(y=0;y<8;y++)
{
  SCLK=0;
  if((0x20>>y)&0x01)MOSI=1;
  else MOSI=0;
  _nop_();
  _nop_();
  _nop_();
  SCLK=1;
  _nop_();
  _nop_();
  _nop_();
}//发送结束
SS=1;//上电结束
delayms(50);
delayms(50);
SS=0;
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_();
}//发送地址结束
MOSI=0;
SCLK=0;
for(y=0;y<8;y++)
{
  SCLK=0;
  if((0xa0>>y)&0x01)MOSI=1;
  else MOSI=0;
  _nop_();
  _nop_();
  _nop_();
  SCLK=1;
  _nop_();
  _nop_();
  _nop_();
}
SS=1;
SS=0;
MOSI=0;
SCLK=0;
for(y=0;y<8;y++)
{
  SCLK=0;
  if((0xb0>>y)&0x01)MOSI=1;
  else MOSI=0;
  _nop_();
  _nop_();
  _nop_();
  SCLK=1;
  _nop_();
  _nop_();
  _nop_();
}
SS=1;   
}
////////////////////////////////////
////////////////////////////////
void stop()
{
    uchar y;
SS=1;
SS=0;
MOSI=0;//放音
SCLK=0;
for(y=0;y<8;y++)
{
  SCLK=0;
  if((0x30>>y)&0x01)MOSI=1;
  else MOSI=0;
  _nop_();
  _nop_();
  _nop_();
  SCLK=1;
  _nop_();
  _nop_();
  _nop_();
}
SS=1;
}
////////////////////////////////////void press_key()
void main()
{  P1=0xff;
   P0=0XFF;
   LED=0;
while(1)
   {
      if(K1==0)
      {delayms(10);
       while(K1==0); ///松手判断
      LED=1;
       addr=0X00;/////从0X00单元开始
       rec();
    P1=0XFF;
    }
   if(K2==0)
      {
     delayms(10);
       while(K2==0);
       LED=1;
       addr=0X00;
       play();
    P1=0XFF;
      }
   if(AN==0)
      {delayms(10);
       while(AN==0);
    LED=0;
        stop();
       P1=0XFF;
      }
     }
}

评分

参与人数 1黑币 +45 收起 理由
admin + 45 共享资料的积分奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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