?? 8-isd4004.c
字號(hào):
#include <reg51.h>
sbit SS=P1^0; //片選
sbit SCLK=P1^1; //ISD4004時(shí)鐘
sbit MOSI=P1^2; //數(shù)據(jù)輸入
sbit MISO=P1^3; //數(shù)據(jù)輸出
sbit LED=P1^7; //指示燈
sbit AN=P1^6; //執(zhí)行
sbit STOP=P1^5; //復(fù)位
sbit PR=P1^4; //PR=1錄音,PR=0放音
sbit INT=P3^4; //中斷
void YS50();
void ISDX(unsigned char d);
void UP();
void STOPP();
void DSTOP();
main()
{
unsigned char delay; //延時(shí)參數(shù)
unsigned char isdl,isdh; //ISD高低位
unsigned char n1;
SP=0x10;
P0=0xFF;
P1=0xFF;
P2=0xFF;
P3=0xFF;
EA=0;
lab1:
LED=1; //關(guān)指示燈
DSTOP(); //ISD掉電
delay=200;
while(AN); //等按AN鍵
while(delay--); //延時(shí)
UP(); //ISD上電
isdl=isdh=0; //ISD高低位地址置0
if(PR) //PR=1 錄音
{
ISDX(isdl);
ISDX(isdl);
ISDX(isdh);
SS=1;
b1:
n1=10;
while(n1--)
YS50();
LED=0;
ISDX(0xB0);
SS=1;
if(INT)
{
while(!AN);
n1=200;
while(n1--);
LED=1; //關(guān)指示燈
STOPP(); //停止當(dāng)前操作
if(STOP)
{
while(!AN);
STOPP();
goto b1;
}
}
else
{
b2:
LED=1;
n1=15;
while(!AN)
{
while(!n1--)
YS50();
LED=0;
n1=15;
while(!AN)
{
while(!n1--)
YS50();
goto b2;
}
}
}
}
else //PR=0 放音
{
while(!AN);
ISDX(isdl);
ISDX((isdh|0xE0)&0xE7);
SS=1;
b3:
LED=0;
ISDX(0xF0);
SS=1;
if(STOP)
{
while(INT);
LED=1;
STOPP();
SS=0;
SCLK=0;
SCLK=1;
if(!MISO)
{
SCLK=0;
SS=1;
STOPP();
if(STOP)
{
while(!AN);
goto b3;
}
}
}
}
SCLK=0;
SS=1;
STOPP();
goto lab1;
}
/*ISD4004芯片驅(qū)動(dòng)*/
/********************************50mS延時(shí)*********************************/
void YS50()
{
TMOD=1;
TH0=0x3C; //50mS延時(shí)初值置入
TL0=0xB0;
TR0=1;
while(!TF0);
TF0=0;
TR0=0;
}
/*ISD3300.4003 SPI寫入程序*/
void ISDX(unsigned char d)
{
unsigned char i,j;
SS=0; //開片選
SCLK=0; //時(shí)鐘SCLK=0
j=d;
for(i=0;i<8;i++)
{
if(j&0x01) //數(shù)據(jù)寫 MOSI
MOSI=1;
else
MOSI=0;
SCLK=1; //時(shí)鐘SCLK=1
j=j>>1;
SCLK=0; //時(shí)鐘SCLK=0
}
}
/*ISD上電*/
void UP()
{
ISDX(20); //發(fā)00100XXXXXXXXXXX
SS=1; //關(guān)片選
YS50(); //50mS延時(shí)
YS50(); //50mS延時(shí)
}
/*停止當(dāng)前操作*/
void STOPP()
{
ISDX(30); //發(fā) 0X110XXX
SS=1; //關(guān)片選
YS50(); //50mS延時(shí)
YS50(); //50mS延時(shí)
}
/*停止當(dāng)前操作掉電*/
void DSTOP()
{
ISDX(10); //發(fā)0X010XXXXXXXXXX
SS=1; //關(guān)片選
YS50(); //50mS延時(shí)
YS50(); //50mS延時(shí)
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -