www.pudn.com > PROC.rar > Voice.c, change:2005-11-16,size:1830b


/*****************************************/ 
/* Copyright (c) 2005, 通信工程学院      */ 
/* All rights reserved.                  */ 
/* 作    者:戴 佳		        		 */ 
/*****************************************/ 
 
#include "voice.h" 
 
/* 延时t毫秒 */ 
void delay(uint t) 
{ 
	uint i; 
	while(t--) 
	{ 
		/* 对于11.0592M时钟,约延时1ms */ 
		for (i=0;i<125;i++) 
		{} 
	} 
} 
 
/* 外部中断0服务子程序 */ 
void out_int0() interrupt 0 using 1 
{ 
  	EX0 = 0;						// 关外部中断0  
  	 
	PD = 1;							// 进入节电状态	 
 
	if(count<2) 					// 再重播2次,共3次放音 
	{ 
		count++; 
		delay(500); 				// 延时500ms 
		P2 = P2&0xFC;				// A8=A9=0 
		P0 = P0&0x00;				// 起始地址为0 
		playback();					// 从地址0处播放 
		EX0 = 1;					// 开外部中断0		 
	}   
	else  
	{ 
		IdleFlag = 1;				// 变为空闲状态,可以再次按开始键 
		count = 0; 
	} 
}	 
 
/* 主程序 */ 
void main() 
{  
	EA = 1;							// 开CPU中断 
 
  	count = 0; 
	StartFlag = 0; 
	IdleFlag = 1; 
 
	while(IdleFlag==1) 
	{ 
		if (START) 
		{ 
			delay(10);				// 延时去抖动 
			if (START) 				 
				StartFlag = 1;		// 开始键按下标志 
		} 
		if (StartFlag == 1) 
		{ 
			do  
			{ 
				P2 = P2&0xFC;		// A8=A9=0 
				P0 = P0&0x00;		// 起始地址为0 
				record();			// 录音开始,存放在地址0处 
			} 
			while (START);			// 开始键松开 
 
			StartFlag = 0; 
 
			PR = 1;					// 结束录音 
			PD = 1;					// 进入节电状态 
 
			delay(500);				// 延时500ms再播放录音 
 
			EX0 = 1;				// 开外部中断0  
 
			P2 = P2&0xFC;			// A8=A9=0 
			P0 = P0&0x00;			// 起始地址为0 
			playback();				// 从地址0处进行第一次播放 
			IdleFlag = 0;			// 当前不空闲,按开始键无效			 
		} 
 
	} 
}		 
 
/* 录音函数 */ 
void record(void) 
{ 
	CE = 0; 
	PD = 0; 
	PR = 0;	 
 
} 
 
/* 放音函数 */  			 
void playback(void) 
{ 
	CE = 0; 
	PD = 0; 
	PR = 1;	 
}