访问电脑版页面

导航:老古开发网手机版51单片机51单片机Keil C51编程

[转载]ISD4004语音芯片驱动(C51源程序)

导读:
关键字:
/*spi isd4004.h*/
 #i nclude "reg51.h"
 #i nclude "intrins.h"

 sbit _cs  = p0^0;
 sbit _sclk= p0^3;
 sbit _mosi= p0^1;
 sbit _miso= p0^2;
 sbit _rac = p0^4;
 sbit _int = p0^5;


 void delay(unsigned int i)  //延时程序
 {
   while(i--);
 }

void stopmode()   //停止
{
   unsigned char m,i,j;
   _cs=1;
   _sclk=0;
   _cs=0;

   m=0x30;
   for(i=0;i<8;i++)
   {
      m=_cror_(m,1);
      j=m<<1;
      _mosi=cy;
      _sclk=0;
      _sclk=1;
   }
   _cs=1;
}
void powerdown()   //下电
{
    unsigned char m,i,j;
    _cs=1;
   _sclk=0;
   _cs=0;

   m=0x10;
   for(i=0;i<8;i++)
   {
      m=_cror_(m,1);
      j=m<<1;
      _mosi=cy;
      _sclk=0;
      _sclk=1;
   }
   _cs=1;
}

void powerup()   上电
{
   unsigned char m,i,j;
   _cs=1;
   _sclk=0;
   _cs=0;

   m=0x20;
   for(i=0;i<8;i++)
   {
      m=_cror_(m,1);
      j=m<<1;
      _mosi=cy;
      _sclk=0;
      _sclk=1;
   }
   _cs=1;
}
void record4004(unsigned int address)  录音  address--录音地址 0---2400
{
     unsigned char i,m,j;
     unsigned int datasoute=0;


      powerup();
      delay(5118);//上电延时
      powerup();
      delay(5118);//上电延时
      delay(5118);//上电延时
      _cs=1;
      _sclk=0;
      m=0xa0;
      _cs=0;
       for(i=0;i<16;i++)
     {
         address=_iror_(address,1);
         datasoute=address<<1;
         _mosi=cy;
         _sclk=0;
         _sclk=1;
     }
      for(i=0;i<8;i++)
     {
         m=_cror_(m,1);
         j=m<<1;
         _mosi=cy;
         _sclk=0;
         _sclk=1;
     }
     _cs=1;
     _sclk=0;
     m=0xb0;
     _cs=0;

     for(i=0;i<8;i++)
     {
        m=_cror_(m,1);
        j=m<<1;
        _mosi=cy;
        _sclk=0;
        _sclk=1;
     }
     _cs=1;
     p0=0xff;
     datasoute=0;
  while(_int==1)       //存储地址换行标志
  {
   if(_rac) {delay(20000); datasoute++; }  //记录本次录音所占的行数(也就是本次录音有多大)
   //
   //  在这里应该加上自己的程序,就是录音退出程序
  //
   }
  }//while end;

void audioout(unsigned int address)  //放音程序
{
    unsigned char i,m,j;
    unsigned int datasoute;


    powerup();
    _cs=1;
    _sclk=0;
    _cs=0;
    m=0xe0;
      for(i=0;i<16;i++)
    {
        address=_iror_(address,1);
        datasoute=address<<1;
        _sclk=0;
        _mosi=cy;
        _sclk=1;
    }
    for(i=0;i<8;i++)
    {
         m=_cror_(m,1);
         j=m<<1;
         _sclk=0;
         _mosi=cy;
         _sclk=1;
    }

    _cs=1;
     _sclk=0;
     m=0xf0;
    _cs=0;
    for(i=0;i<8;i++)
    {
       m=_cror_(m,1);
       j=m<<1;
       _sclk=0;
       _mosi=cy;
       _sclk=1;
    }
    _cs=1;

     p0=0xff;
    while(_int==1)
    {
    }//while end;
}

main()
{
  record4004(0);
   audioout(0);
   while(1);
}

来源:   作者:  2006/9/25 16:50:53
栏目: [ 51单片机Keil C51编程]

相关阅读

几种码制转换 BCD TO HEX,HEX TO BCD ,BIN TO HEX

让Ultra Edit和Keil结合的更紧密

在KEIL C51上仿真完了,怎样生成HEX文件去烧写??

在Keil c51调试中,如何查看外部存储器XDATA?

Keil C51中如何实现代码优化?

C51中 INT 转换为 2个CHAR?

Keil C51编译错误总结

proteus与keil的完美结合(没有开发板,让你也学的爽!)

[转载]C51中断处理过程

C51 的重入问题 WARNING L15: MULTIPLE CALL TO SEGMENT(转)

那位大虾能告诉我C51 的printf()函数有什么用?

keil 7.0编译出现:error C316: unterminated conditionals

51单片机CO2检测显示程序解析

Keil C51单片机中变量的使用方法解析

MCS51单片机程序设计时堆栈的计算方法解析

在Keil c51调试中,如何查看特殊寄存器?

volatile的用法

SBUF=0x65,c=SBUF结果为c=0???

在Keil c51调试中,如何查看全部256bytes的内部RAM?

C51单片机的几种常用延时程序设计