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

📄 main4.c

📁 ISD4004芯片的语音录放程序
💻 C
字号:

#include <reg51.h>
#include "main4.h"
#include "ISD4004.c"

uchar key_num = 0;
uchar ad_l ,ad_h ;

//普通延时函数
void commen_delay(uint k)
{
  uint i ,j ;
  for(i = 0 ; i < k ; i ++)
   for(j = 0 ; j < 121 ; j ++)
       ;
}

//初始化程序
//初始化单片机,并等待按键按下
void in_stc()
{

 
	P0 = P1 = P2 = P3 = 0xff;//初始化
 	isd_pu();//AN键按下,isd上电并延迟50ms
 	isd_pd();
 	isd_pu();
  
}

//按键扫描程序
//入口:无
//出口:按键值key_num
//功能:实现按键值的加减,让主函数对按键值做出不同的反应
void scan_key()
{
  if(up == 0)
   {
  	commen_delay(30);
	if(up == 0)
	 key_num ++;		//键值加
	 if(key_num > 11)
	 	key_num = 0 ;
	}
	if(down == 0)
   {
  	commen_delay(30);
	if(down == 0)
	 key_num --;		//键值减
	 if(key_num < 0)
	 	key_num = 0 ;
	}
	
	switch ( key_num )//根据键值key_num判定播放音的起始位置
    {
     case  0 : {ad_l = 0x00; ad_h = 0x00; break;}  //开机音乐
	 case  1 : {ad_l = 0x40; ad_h = 0x00; break;}  //工学院站
	 case  2 : {ad_l = 0x80; ad_h = 0x00; break;}  //东环路口站
	 case  3 : {ad_l = 0xc0; ad_h = 0x00; break;}   //雀山公园 
	 case  4 : {ad_l = 0x00; ad_h = 0x01; break;}  //柳州宾馆
	 case  5 : {ad_l = 0x40; ad_h = 0x01; break;}   //龙潭公园
	 case  6 : {ad_l = 0x80; ad_h = 0x01; break;}  //东风商场 
	 case  7 : {ad_l = 0xc0; ad_h = 0x01; break;}  //柳侯公园
	 case  8 : {ad_l = 0x00; ad_h = 0x02; break;} //华信国际东
	 default  : break ;
	}

/*
	switch ( key_num )//根据键值key_num判定播放音的起始位置
    {
     case  0 : {ad_l = 0x00; ad_h = 0x00; break;}  //开机音乐
	 case  1 : {ad_l = 0x10; ad_h = 0x00; break;}  //工学院站
	 case  2 : {ad_l = 0x20; ad_h = 0x00; break;}  //东环路口站
	 case  3 : {ad_l = 0x30; ad_h = 0x00; break;}   //雀山公园 
	 case  4 : {ad_l = 0x40; ad_h = 0x00; break;}  //柳州宾馆
	 case  5 : {ad_l = 0x50; ad_h = 0x00; break;}   //龙潭公园
	 case  6 : {ad_l = 0x60; ad_h = 0x00; break;}  //东风商场 
	 case  7 : {ad_l = 0x70; ad_h = 0x00; break;}  //柳侯公园
	 case  8 : {ad_l = 0x80; ad_h = 0x00; break;} //华信国际东
	 case  9 : {ad_l = 0x90; ad_h = 0x00; break;} 
	 case  10 : {ad_l = 0xa0; ad_h = 0x00; break;} 
	 case  11 : {ad_l = 0xb0; ad_h = 0x00; break;} 
	 default  : break ;
	}
	*/
}

//放录音模式选择及放音选段函数
void find_play()
{
if(PR == 1) //如果PR==1则转入录音部分
	 {	 		
		if(AN == 0 )   //录音键,录音时按住不放
	     {	 
		 // rec(0xb0,0x00); //开始从指定位置录音
		 rec(0x90,0x00); //开始从指定位置录音 
		  }
     }
  else //如果PR=0则转入放音部分
   {
 	  if(AN == 0)   //放音键,按下开始放音
	   { 	   
       	play(ad_l,ad_h);  //从指定位置开始放音
		key_num ++; //自动跳转到下一段

		if(key_num > 11)
 	      key_num = 0;
	   }
	   if(turn == 0) //转弯
	    {
		 	play(0x60,0x00);
		}
	   if(brige == 0)//过桥提示语
	     {
		   	play(0x90,0x00);
		 }
	   if (sit == 0)  //让座提示语
 	     {
		   play(0x90,0x00);
		 }
	 
      }
   isd_stop();
   isd_pd();
}



//**********************************************
//主程序
//功能:1.录音时,按住AN键,LED点亮开始录音,松开AN键即可停止录音
//再次按下AN键,LED点亮开始录音第二段,依次类推,直至芯片溢出
//按stop键芯片复位
//2.放音时,按下AN键,即可播放一段语音,按stop键芯片复位.
//***************************************************
void main(void)
{
 in_stc();//单片机初始化
 LED = 0 ;
 //play(0x20,0x00);
 //key_num++ ;
  while (1)
  {
    LED = 0 ;
	in_stc();//单片机初始化
	scan_key();	//按键扫描,得出键值
    find_play(); //找指定的放音位置
  }
}

⌨️ 快捷键说明

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