www.pudn.com > isd4004.rar > main.c, change:2012-02-16,size:7296b


#include<msp430x44x.h> 
 
#define CPU_F ((double)1048576)    //软件精确延时 
#define delay_us(x)__delay_cycles((long)(CPU_F*(double)x/1000000.0))  //微秒级 
#define delay_ms(x)__delay_cycles((long)(CPU_F*(double)x/1000.0))    //毫秒级 
 
#define uint unsigned int 
#define uchar unsigned char 
 
//定义端口 
#define  SCLK0   P1OUT &=~BIT2         //ISD4004时钟 
#define  SCLK1   P1OUT |= BIT2 
#define  SS0     P1OUT&=~BIT3          //片选端子 
#define  SS1     P1OUT|=BIT3 
#define  MOSI0   P1OUT &=~BIT4         //数据输入 
#define  MOSI1   P1OUT |=BIT4          //数据输入 
 
//以下是声光报警端口宏定义 
#define Led1_ON    P3OUT |=BIT0 
#define Led1_OFF   P3OUT &=~BIT0 
 
#define Led2_ON    P3OUT |=BIT1 
#define Led2_OFF   P3OUT &=~BIT1 
 
#define Buzzer_OFF    P3OUT |=BIT6 
#define Buzzer_ON   P3OUT &=~BIT6 
 
 
/*********************************/ 
void    delay_ISD(unsigned int time)   //延迟n微秒 
{ 
while(time) 
{ 
time-- ; 
} 
} 
 
/***********************************/ 
 
void delays_ISD(int a)                 //延时a/2秒 
{ 
int i; 
for(i=a;i>0;i--) 
{delay_ISD(50000);} 
} 
 
 
//************************************ 
//ISD4004 模拟spi串行发送子程序,一次8位数据从低位到高位 
//************************************ 
void spi_send(unsigned char isdx) 
{    
unsigned char isx_counter; 
SS0;                                          //ss=0,打开spi通信端 
SCLK0; 
for(isx_counter=0;isx_counter<8;isx_counter++) //先发低位再发高位,依次发送。 
{  
if ((isdx&0x01)==1) 
MOSI1; 
else 
MOSI0; 
isdx=isdx>>1; 
SCLK1; 
delay_ISD(4); 
SCLK0; 
delay_ISD(2); 
} 
} 
 
 
//******************************* 
//发送stop指令 
//******************************* 
void isd_stop() 
{    
delay_ISD(10);spi_send(0x30);SS1;delay_ISD(3000); 
} 
 
 
//******************************* 
//发送stop并掉电指令 
//******************************* 
void isd_stop_pd() 
{    
delay_ISD(10);spi_send(0xF1);SS1;delay_ISD(5000); 
} 
 
//******************************* 
//发送上电指令,并延迟30ms 
//******************************* 
void isd_pu() 
{   
delay_ISD(10);SS0;spi_send(0x20);SS1;delay_ISD(3000); 
} 
 
 
//******************************* 
//发送掉电指令,并延迟30ms 
//******************************* 
void isd_pd()  //停止当前操作,进入暂停模式 
{  
SS0;spi_send(0x10);SS1;delay_ISD(3000); 
} 
 
 
 
//******************************* 
//发送play指令 
//******************************* 
void isd_play() 
{ 
SS0;spi_send(0xF0);SS1; 
} 
 
 
//******************************* 
//发送rec指令 
//******************************* 
void isd_rec() 
{ 
SS0;spi_send(0xB0);SS1; 
} 
 
 
//******************************* 
//发送setplay指令 
//******************************* 
void isd_setplay(unsigned char adl,unsigned char adh) 
{ 
delay_ISD(100); 
spi_send(adl);    //发送放音起始地址低位 
delay_ISD(2); 
spi_send(adh);   //发送放音起始地址高位 
delay_ISD(2); 
spi_send(0XE0); 
SS1; 
} 
 
 
//******************************* 
//发送setrec指令 
//******************************* 
void isd_setrec(unsigned char adl,unsigned char adh) 
{ 
delay_ISD(100); 
spi_send(adl);    //发送放音起始地址低位 
delay_ISD(2); 
spi_send(adh);    //发送放音起始地址高位 
delay_ISD(2); 
spi_send(0xA0); 
SS1; 
} 
 
 
//************************************************************************ 
// 录音程序,数字  
//************************************************************************ 
void rec_number1() 
{ 
isd_pu(); 
delay_ms(25); 
isd_pu(); 
delay_ms(50); 
isd_setrec(0X87,0X00);   //指定地址0录音 
isd_rec(); 
Led1_ON; 
delay_ms(3000); 
isd_stop(); 
Led1_OFF; 
 isd_pd(); 
} 
 
 
//************************************************************************ 
// 放音:密码正确 欢迎进入 
//************************************************************************ 
 
void play1() 
{ 
  isd_pu();  
  delay_ms(25);//ISD上电并延迟30ms 
  isd_setplay(0X00,0X00);  //测试第0段录音 
  isd_play(); 
  Led2_ON; 
  delay_ms(3000); 
  isd_stop(); 
  Led2_OFF; 
    
} 
 
//************************************************************************ 
// 放音:密码错误 请重新输入 
//************************************************************************ 
 
void play2() 
{ 
  isd_pu();  
  delay_ms(25);//ISD上电并延迟30ms 
  isd_setplay(0X0f,0X00);  //测试第0段录音 
  isd_play(); 
  Led2_ON; 
  delay_ms(3000); 
  isd_stop(); 
  Led2_OFF; 
 
 
} 
//************************************************************************ 
// 放音:您还有最后一次输入机会 
//************************************************************************ 
void play3() 
{ 
  isd_pu();  
  delay_ms(25);//ISD上电并延迟30ms 
  isd_setplay(0X1e,0X00);  //测试第0段录音 
  isd_play(); 
  Led2_ON; 
  delay_ms(3200); 
  isd_stop(); 
  Led2_OFF; 
   
 
} 
//************************************************************************ 
// 放音  警报已启动 
//************************************************************************ 
void play4() 
{ 
  isd_pu();  
  delay_ms(25);//ISD上电并延迟30ms 
  isd_setplay(0X2d,0X00);  //测试第0段录音 
  isd_play(); 
  Led2_ON; 
  delay_ms(1600); 
  isd_stop(); 
  Led2_OFF; 
  
 
} 
// 放音:请锁门 
//************************************************************************ 
 
void play5() 
{ 
  isd_pu();  
  delay_ms(25);//ISD上电并延迟30ms 
  isd_setplay(0X3c,0X00);  //测试第0段录音 
  isd_play(); 
  Led2_ON; 
  delay_ms(3000); 
  isd_stop(); 
  Led2_OFF; 
   
 
} 
 
 
 
// 放音:密码张确 欢迎进入 
//************************************************************************ 
 
void play6() 
{ 
  isd_pu();  
  delay_ms(25);//ISD上电并延迟30ms 
  isd_setplay(0X4b,0X00);  //测试第0段录音 
  isd_play(); 
  Led2_ON; 
  delay_ms(3000); 
  isd_stop(); 
  Led2_OFF; 
   
 
} 
// 放音:为了您和室友的财产安全 
//************************************************************************ 
void play7() 
{ 
  isd_pu();  
  delay_ms(25);//ISD上电并延迟30ms 
  isd_setplay(0X5a,0X00);  //测试第0段录音 
  isd_play(); 
  Led2_ON; 
  delay_ms(3000); 
  isd_stop(); 
  Led2_OFF; 
} 
 
 
// 放音:请锁门 
//************************************************************************ 
void play8() 
{ 
  isd_pu();  
  delay_ms(25);//ISD上电并延迟30ms 
  isd_setplay(0X69,0X00);  //测试第0段录音 
  isd_play(); 
  Led2_ON; 
  delay_ms(3000); 
  isd_stop(); 
  Led2_OFF; 
} 
 
// 放音:请输入密码 
//************************************************************************ 
void play9() 
{ 
  isd_pu();  
  delay_ms(25);//ISD上电并延迟30ms 
  isd_setplay(0X78,0X00);  //测试第0段录音 
  isd_play(); 
  Led2_ON; 
  delay_ms(3000); 
  isd_stop(); 
  Led2_OFF; 
} 
 
// 放音:请输入密码 
//************************************************************************ 
void play10() 
{ 
  isd_pu();  
  delay_ms(25);//ISD上电并延迟30ms 
  isd_setplay(0X87,0X00);  //测试第0段录音 
  isd_play(); 
  Led2_ON; 
  delay_ms(3000); 
  isd_stop(); 
  Led2_OFF; 
} 
 
 
 
//**********************主程序************************/ 
 
void main() 
{ 
 WDTCTL=WDTPW+WDTHOLD; 
 P1DIR |=(BIT2+BIT3+BIT4);  
 P3DIR |= 0x03;   //led指示 
   
//rec_number1(); 
while(1) 
  {  
 play1(); 
 delay_ms(500); 
    play6(); 
  play2(); 
  delay_ms(500); 
  play3(); 
delay_ms(500); 
  play4(); 
  play5(); 
  play6(); 
  play7(); 
  play8(); 
  play9(); 
  play10(); 
 // play5(); 
    
 //  play7(); 
 //  play8(); 
  // play9(); 
   
   
  } 
}