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

📄 main.c

📁 凌阳单片机以SCAM_2000语音格式播放程序的编写方法
💻 C
字号:
//========================================================
//	The information contained herein is the exclusive property of
//	Sunnnorth Technology Co. And shall not be distributed, reproduced,
//	or disclosed in whole in part without prior written permission.
//	(C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.
//	ALL RIGHTS RESERVED
//	The entire notice above must be reproduced on all authorized copies.
//========================================================

//========================================================
//	工程名称:	ex1_A2000_Auto
//	功能描述:	《实验指导书》语音部分第一个实验
//				通过自动、手动两种方式播放两段语音资源
//	涉及的库:	CMacro1016.lib
//				sacmv26e.lib
//	组成文件:	main.c
//				hardware.asm,isr.asm
//				hardware.inc,a2000.inc
//				a2000.h,hardware.h
//	硬件连接:	DAC音频跳线短接
//	维护记录:	2005-09-12	v1.0
//
//========================================================

//========================================================
//	文件名称:	main.c
//	功能描述:	通过自动方式播放两段语音资源
//	维护记录:	2005-09-12	v1.0
//========================================================

#include "a2000.h"
#include "hardware.h"
#define P_Watchdog_Clear		(volatile unsigned int *)0x7012
#define	P_IOA_Data 				(volatile unsigned int *)0x7000   
#define	P_IOA_Buffer			(volatile unsigned int *)0x7001   
#define P_IOA_Dir 				(volatile unsigned int *)0x7002
#define P_IOA_Attrib 			(volatile unsigned int *)0x7003
#define	P_IOB_Data 				(volatile unsigned int *)0x7005   
#define	P_IOB_Buffer			(volatile unsigned int *)0x7006   
#define P_IOB_Dir 				(volatile unsigned int *)0x7007
#define P_IOB_Attrib 			(volatile unsigned int *)0x7008
#define P_Watchdog_Clear		(volatile unsigned int *)0x7012

void Delay(void);
void prog1(void);
void prog2(void);
void prog3(void);
void prog4(void);
int keycode;
int oldkey=0;
int flag;
void PlaySnd_Auto(unsigned int uiSndIndex,unsigned int uiDAC_Channel);

//========================================================
//	语法格式:	int main(void)
//	实现功能:	调用语音播放函数,通过自动方式播放两段语音资源
//	参数:		无
//	返回值:	无
//========================================================

int main(void)
{
 
   *P_IOA_Dir = 0x0000;			//设置IOA口为
	*P_IOA_Attrib = 0x0000;
	*P_IOA_Data = 0x00FF;

	*P_IOB_Dir = 0xffff;			//设置IOB口为同相低电平输出
	*P_IOB_Attrib = 0xffff;
	*P_IOB_Data = 0x0000;
	
	 	
  	while(1) 
	{
		//int flag=0;
	
	    *P_Watchdog_Clear = 0x0001;  // 清看门狗
	    
	 
	    keycode=*P_IOA_Data; 
	   
	    if(keycode!=0xff)
	    {
	     flag=1;
	    }
	    else
	      {flag=0;}
	    if(flag==1)
	    { 
	    	keycode=*P_IOA_Data;
	    }	
	    else 
	    {
	    	keycode=oldkey;
	    }
	     
	                 
	    switch(keycode)
	    {
	    	case 0xfe:											// K0
	    		prog1();
	    		oldkey=keycode;				
	    		break;
	    	case 0xfd:											// K1
	    	    prog2();
	    	   	oldkey=keycode;		
	    		break;
	       case 0xfb:											// K2
	    	    prog3();
	    	   	oldkey=keycode;		
	    		break;
	        case 0xf7:											// K3
	    	   prog4();
	    	   	oldkey=keycode;		
	    		break;
	    	default:
	    		
	    		break;
        }
	      
	    *P_Watchdog_Clear = 0x0001;                             // 清看门狗
    }
retur:	return 0;
}

//========================================================
//	语法格式:	void PlaySnd_Auto(unsigned int uiSndIndex,unsigned int uiDAC_Channel)
//	实现功能:	通过自动方式播放语音资源
//	参数:		1.uiSndIndex:语音资源序号 2.uiDAC_Channel:语音播放通道
//	返回值:	无
//========================================================

void PlaySnd_Auto(unsigned int uiSndIndex,unsigned int uiDAC_Channel)
{
	SACM_A2000_Initial(1);							//初始化语音播放,自动方式
	SACM_A2000_Play(uiSndIndex,uiDAC_Channel,3);	//播放语音
	while((SACM_A2000_Status() & 0x0001) != 0)		//判断当前是否在播放?返回最低位为1则表示当前在播放
	{
		SACM_A2000_ServiceLoop();					//服务程序
		*P_Watchdog_Clear = 0x0001;			
	}
	SACM_A2000_Stop();								//停止
}




void Delay(void)
{
	unsigned int uiCount;
	for(uiCount = 0;uiCount < 32767; uiCount++)
	{
		*P_Watchdog_Clear = 0x0001;//清看门狗操作
	}
}

void prog1(void)
{	                    //定义输出数据变量 

	{
	

		PlaySnd_Auto(0,1);				//调用播放程序,播放第0段语音,采用DAC1播放
			Delay();					//延时
		*P_Watchdog_Clear = 0x0001;	//清看门狗操作
	}
}
void prog2(void)
{	                    //定义输出数据变量 

	{
	

		PlaySnd_Auto(1,1);				//调用播放程序,播放第0段语音,采用DAC1播放
			Delay();					//延时
		*P_Watchdog_Clear = 0x0001;	//清看门狗操作
	}
}
void prog3(void)
{	                    //定义输出数据变量 

	{
	

		PlaySnd_Auto(2,1);				//调用播放程序,播放第0段语音,采用DAC1播放
			Delay();					//延时
		*P_Watchdog_Clear = 0x0001;	//清看门狗操作
	}
}
void prog4(void)
{	                    //定义输出数据变量 

	{
	

		PlaySnd_Auto(3,1);				//调用播放程序,播放第0段语音,采用DAC1播放
			Delay();					//延时
		*P_Watchdog_Clear = 0x0001;	//清看门狗操作
	}
}

⌨️ 快捷键说明

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