?? msin.c
字號:
//=================================================
//創建者:蔡星 QQ:364444296
//創建日期:2006年11月12日
//項目:ISD4004語音芯片的錄放
//=================================================
#include<reg51.h>
#include<intrins.h>
#include<head.h>
#define uchar unsigned char
#define uint unsigned int
//uint count;
uint count=0;
sbit sclk_4004=P3^5;
sbit rac_4004=P3^3;
sbit _int_4004=P3^4;
sbit ss_4004=P3^0;
sbit sda_4004=P3^1;
//sbit sda_4004_=P3^1;
sbit stop_4004=P1^0;//這是51板上的按鍵
sbit Luyin_4004=P1^1;
sbit play_4004=P1^2;
sbit hang_4004=P1^3;//
void delay_ISD4004(int i)
{
while(--i);
}
void stop()
{
uchar number,i;
number=0x30;
ss_4004=1;
sclk_4004=0;
ss_4004=0;
for(i=0;i<8;i++)
{
if(number&0x01) sda_4004=1;
else sda_4004=0;
sclk_4004=0;
sclk_4004=1;
number=number>>1;
//number>>=1;
}
ss_4004=1;
}
void power_down()
{
uchar num,i;
num=0x10;
ss_4004=1;
sclk_4004=0;
ss_4004=0;
for(i=0;i<8;i++)
{
if(num&0x01) sda_4004=1;
else sda_4004=0;
sclk_4004=0;
sclk_4004=1;
num=num>>1;
}
ss_4004=1;
}
void power_up()
{
uchar bult,_data_,i;
bult=0x20;
ss_4004=1;
sclk_4004=0;
ss_4004=0;
_data_=bult;
for(i=0;i<8;i++)
{
if(_data_&0x01) sda_4004=1;
else sda_4004=0;
sclk_4004=0;
sclk_4004=1;
//bult=bult>>1;
_data_>>=1;
}
ss_4004=1;
}
void record_4004(uint address)//address:0-2400
{
uchar data_4004,numb,i;
uint data_mode=0;
numb=0xa0;
power_up();
delay_ISD4004(5200);//大于25ms
power_up();
delay_ISD4004(10400);//是上面延時的兩倍
ss_4004=1;
sclk_4004=0;
ss_4004=0;
data_mode=address;
for(i=0;i<16;i++)//16位地址控制位
{
if(data_mode&0x01) sda_4004=1;
else sda_4004=0;
sclk_4004=0;
sclk_4004=1;
//address=address>>1;
data_mode>>=1;
}
data_4004=numb;
for(i=0;i<8;i++)
{
if(data_4004&0x01) sda_4004=1;
else sda_4004=0;
sclk_4004=0;
sclk_4004=1;
//numb=numb>>1;
data_4004>>=1;
}
numb=0xb0;
ss_4004=1;
sclk_4004=0;
ss_4004=0;
for(i=0;i<8;i++)
{
if(numb&0x01) sda_4004=1;
else sda_4004=0;
sclk_4004=0;
sclk_4004=1;
//numb=numb>>1;
numb>>=1;
}
ss_4004=1;
P3=0xff;
data_mode=0;
while(_int_4004==1) //存儲地址換行標志
{
if(rac_4004)
{
delay_ISD4004(20000);
data_mode++; //記錄本次錄音所占的行數 就是本次錄音有多大
}
if(stop_4004==0){stop();return;}
}
}
void audio_out_4004(uint address)
{
uchar _data_4004,_numb,i;
uint _data_mode;
_numb=0xe0;
power_up();
delay_ISD4004(5200);
ss_4004=1;
sclk_4004=0;
ss_4004=0;
_data_mode=address;
for(i=0;i<16;i++)//16位地址控制位
{
sclk_4004=0;
if(_data_mode&0x01) sda_4004=1;
else sda_4004=0;
//sclk_4004=0;
sclk_4004=1;
//address=address>>1;
_data_mode>>=1;
}
_data_4004=_numb;
for(i=0;i<8;i++)
{
sclk_4004=0;
if(_data_4004&0x01) sda_4004=1;
else sda_4004=0;
//sclk_4004=0;
sclk_4004=1;
//_numb=_numb>>1;
_data_4004>>=1;
}
_numb=0xfe;
ss_4004=1;
sclk_4004=0;
ss_4004=0;
_data_4004=_numb;
for(i=0;i<8;i++)
{
sclk_4004=0;
if(_data_4004&0x01) sda_4004=1;
else sda_4004=0;
//sclk_4004=0;
sclk_4004=1;
//_numb=_numb>>1;
_data_4004>>=1;
}
ss_4004=1;
P3=0xff;
while(_int_4004==1)
{
if(stop_4004==0){stop();return;}
}
}
main()
{
//uint count=0;
//delay_ISD4004(100000);
while(1)
{
/*if(Luyin_4004==0)
{
P2=0x0f;
delay_ISD4004(10000);
record_4004(0);
P2=0xfd;
delay_ISD4004(10000);
}
if(play_4004==0)
{
P2=0xf0;
delay_ISD4004(10000);
audio_out_4004(0);
P2=0xdf;
delay_ISD4004(10000);
}*/
if(hang_4004==0)
{
//while(hang_4004==0) delay_ISD4004(100);
//delay_ISD4004(500);
count=count++;
display(count);
//while(hang_4004);
//delay_ISD4004(1000); co
if(count>5)
{
count=0;
display(count);
//delay_ISD4004(1000);
}
//while(stop_4004);
}
if((Luyin_4004==0)&&(count==0))
{
display(count);delay_ISD4004(1000);record_4004(0);
}
if((play_4004==0)&&(count==0))
{
display(count);delay_ISD4004(1000);audio_out_4004(0);
}
if((Luyin_4004==400)&&(count==1))
{
display(count);delay_ISD4004(1000);record_4004(0);
}
if((play_4004==400)&&(count==1))
{
display(count);delay_ISD4004(1000);audio_out_4004(0);
}
if((Luyin_4004==800)&&(count==2))
{
display(count);delay_ISD4004(1000);record_4004(0);
}
if((play_4004==800)&&(count==2))
{
display(count);delay_ISD4004(1000);audio_out_4004(0);
}
if((Luyin_4004==1200)&&(count==3))
{
display(count);delay_ISD4004(1000);record_4004(0);
}
if((play_4004==1200)&&(count==3))
{
display(count);delay_ISD4004(1000);audio_out_4004(0);
}
if((Luyin_4004==1600)&&(count==4))
{
display(count);delay_ISD4004(1000);record_4004(0);
}
if((play_4004==1600)&&(count==4))
{
display(count);delay_ISD4004(1000);audio_out_4004(0);
}
if((Luyin_4004==2000)&&(count==5))
{
display(count);delay_ISD4004(1000);record_4004(0);
}
if((play_4004==2000)&&(count==5))
{
display(count);delay_ISD4004(1000);audio_out_4004(0);
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -