⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8-isd4004.c

📁 “单片机程序”中包含了各章实例中的最后“程序设计”中的程序源代码。每一章中包含的程序如下。 需要注意的是
💻 C
字号:
#include <reg51.h>

sbit   SS=P1^0;            				//片选
sbit   SCLK=P1^1;            			//ISD4004时钟
sbit   MOSI=P1^2;            			//数据输入
sbit   MISO=P1^3;            			//数据输出
sbit   LED=P1^7;            			//指示灯
sbit   AN=P1^6;            			//执行
sbit   STOP=P1^5;            			//复位
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;        			//延时参数
    unsigned char isdl,isdh;    			//ISD高低位
    unsigned char n1;
	
    SP=0x10;
    P0=0xFF;
    P1=0xFF;
    P2=0xFF;
    P3=0xFF;
    EA=0;
lab1:
    LED=1;                       			//关指示灯
    DSTOP();                     			//ISD掉电
    delay=200;
    while(AN);                   			//等按AN键
    while(delay--);              			//延时
    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;                    		//关指示灯
STOPP();                  		//停止当前操作
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芯片驱动*/
/********************************50mS延时*********************************/
void  YS50()
{
TMOD=1;
TH0=0x3C;                			//50mS延时初值置入
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;                    			//时钟SCLK=0
j=d;
for(i=0;i<8;i++)
{
if(j&0x01)               			//数据写 MOSI
MOSI=1;
else
MOSI=0;
SCLK=1;                  			//时钟SCLK=1
j=j>>1;
SCLK=0;                  			//时钟SCLK=0
}
}

/*ISD上电*/
void  UP()
{
ISDX(20);                 			//发00100XXXXXXXXXXX
SS=1;                     			//关片选
YS50();                   			//50mS延时
YS50();                   			//50mS延时
}

/*停止当前操作*/
void  STOPP()
{
ISDX(30);                 			//发 0X110XXX
SS=1;                     			//关片选
YS50();                   			//50mS延时
YS50();                   			//50mS延时
}

/*停止当前操作掉电*/
void  DSTOP()
{
ISDX(10);                 			//发0X010XXXXXXXXXX
SS=1;                     			//关片选
YS50();                   			//50mS延时
YS50();                   			//50mS延时
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -