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

📄 text1.c

📁 ISD4004 录放音c51程序(c语言)
💻 C
字号:
#include<reg52.h>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int
#define hi 0x3c
#define lo 0xb0

sbit P37=P3^7;	
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
sbit P10=P1^0;

sbit ISD4004_SS=P1^2;          //语音
sbit ISD4004_MOSI=P1^1;
sbit ISD4004_SCLK=P1^3;

code unsigned char table1[]={0,1,2,3,4,5,6,7,8,9,10,11}	 ;
unsigned char key_flag, key_count,t0_count,mask=0xee,key;
code unsigned char table[]={0x00,0x00,0x00,0x65,           //语音地址表
                       0x00,0xc9,0x01,0x2d,
                       0x01,0x91,0x01,0xf5,
                       0x02,0x59,0x02,0xbd,
                       0x03,0x21,0x03,0x85,
                       0x03,0xb7,0x03,0xe8,
					   0x04,0x1a,0x04,0x4c,
                       0x04,0x7e,0x04,0xb0,
					   0x04,0xe2,0x05,0x14,
                       0x05,0x46,0x05,0x78,
					   0x05,0xaa,0x05,0xdc,
					   0x06,0x0e,0x06,0x40,
					   0x06,0x72,0x06,0xa4,
					   0x06,0xd6,0x07,0x08,
					   0x07,0x3a,0x07,0x6c
					   }; 


void t1() interrupt 1 //定时中断2 函数:防键抖动
{TH0=hi;TL0=lo;key_count++;t0_count++;
if(t0_count==20)t0_count=0;
if(key_count>10)key_count=10;
}
//============================================================
//函数名称:void delay25ms()
//函数功能:延迟25ms
//日期:2007.03.31
//============================================================
void delay25ms()
{
    unsigned int i;
    for(i=0;i<=5000;i++);
}  


//===========================================================
//函数名称:void ISD4004_ISD4004_Send(unsigned char m)
//函数功能:给ISD4004送命令
//日期:2007.03.31
//===========================================================
void ISD4004_Send(unsigned char m)
{
    unsigned char i,j;
    for(i=0;i<8;i++)
    {
        ISD4004_SCLK = 0;
		for(j=0;j<5;j++);
        if(m&0x01)
            ISD4004_MOSI=1;
        else
            ISD4004_MOSI=0;
		ISD4004_SCLK=1;
        for(j=0;j<5;j++);
        m=m>>1;
    }
}



//===========================================================
//函数名称:void ISD4004_Powerup()
//函数功能:ISD4004上电
//日期:2007.03.31
//===========================================================
void ISD4004_Powerup()
{
    ISD4004_SS=0;                        //开片选
    ISD4004_Send(0x20);
    delay25ms();
    ISD4004_SS=1;                        //关片选
}


//============================================================
//函数名称:void ISD4004_Stop()
//函数功能:ISD4004停止
//日期:2007.03.31
//============================================================
void ISD4004_Stop()
{
    ISD4004_SS=0;
    ISD4004_Send(0x30);
    ISD4004_SS=1;
}


//===========================================================
//函数名称:void ISD4004_Powerdown()
//函数功能:下电  停止并掉电
//日期:2007.03.31
//===========================================================
void ISD4004_Powerdown()
{
    ISD4004_SS=0;
    ISD4004_Send(0x10);
    ISD4004_SS=1;
}


//==========================================================
//函数名称:void ISD4004_Play(unsigned char addr_h,unsigned char addr_l)
//函数功能:放音
//日期:2007.03.31
//==========================================================
void ISD4004_Play(unsigned char addr_h,unsigned char addr_l)
{
    
    ISD4004_SS=0;
    ISD4004_Send(addr_l);
    ISD4004_Send(addr_h);
    ISD4004_Send(0xe0);
    ISD4004_SS=1;
	
    ISD4004_SS=0;
    ISD4004_Send(0xf0);
    ISD4004_SS=1;
}

//================================================================
void ISD4004_Rec(unsigned char addr_h,unsigned char addr_l)
{
    ISD4004_SS=0;
    ISD4004_Send(addr_l);
    ISD4004_Send(addr_h);
    ISD4004_Send(0xa0);
    ISD4004_SS=1;

    ISD4004_SS=0;
    ISD4004_Send(0xb0);
    ISD4004_SS=1;
}


//================================================================
//函数名称:void fangyin()
//函数功能:语音 addr为地址
//日期:2007.03.31
//================================================================
void fangyin(uchar addr)
{ 
    uchar a;
    ISD4004_Powerup();
    delay25ms();
    a = addr * 2;   
    ISD4004_Play(table[a],table[a+1]);     
}

//================================================================
//函数名称:void luyin()
//函数功能:语音 addr为地址
//日期:2007.03.31
//================================================================
void luyin(uchar addr)
{ 
    uchar a;
    ISD4004_Powerup();
    delay25ms();
	delay25ms();
    a = addr * 2;   
    ISD4004_Rec(table[a],table[a+1]);     
}


unsigned char get_char(void)
{unsigned char	key_code;
  static unsigned char column=0;
  if (P37==0 && key_flag==1){key_code=column;key_flag=0;key_count=0;}
     else key_code=0xff;
  mask=_crol_(mask,1);
  P24=mask&0x10;P25=mask&0x20;P26=mask&0x40;P27=mask&0x80;
  column++;
  if(column>3)column=0; 
  return(key_code);}

void key_func(key)
 {switch (key)
   {case 0:  ISD4004_Powerup();delay25ms();luyin(0);break;
				 
    case 1:  delay25ms();fangyin(0);break;
             
    case 2:  break;
             
	case 3: ISD4004_Stop();ISD4004_Powerdown();break;
	               
    default: break;               }  }
			 
void main()
{  
  TMOD=0x11;TH0=hi;TL0=lo;EA=1;ET0=1;ET1=1;TR0=1;
  TH0=hi;TL0=lo;
  P10=0;
    
/****************** 语音模块************************/
  while(1)
	  {  
        key=get_char( );key_func(key);
        if(key_flag==0 && key_count>=10)key_flag=1;
      }
}

⌨️ 快捷键说明

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