/*spi isd4004.h*/ #include "reg51.h" #include "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); }