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

📄 main.c

📁 凌阳61A 录音程序光盘自带 可以实现录音
💻 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.
//========================================================

//============================================================
//  工程名称:	61_Record
//  功能描述:	61板程序示例--简易复读机
//				使用61板上的三个按键控制录放音,约可录制20秒的声音
//					Key1 - 录音
//					Key2 - 播放录音
//					Key3 - 停止录/放音
//  涉及的库:	CMacro1016.lib
//            	SacmV26e.lib
//  组成文件:	main.c
//				Flash.asm, hardware.asm, ISR.asm, Key.asm, sram.asm
//				Flash.h, DVR.h, Key.h, SPCE061A.h, DVR.inc, Key.inc, SPCE061A.inc
//	硬件连接:	61板自带的三个按键已经连接在IOA0~IOA2上
//	维护记录:	2006-8-30 v1.0
//===============================================

//======================================================
// 文件名称:	main.c
// 功能描述:	主程序以及录音、放音子程序
// 维护记录:	2006-08-30	v1.0
//======================================================

#include "spce061a.h"
#include "Flash.h"
#include "DVR.h"
#include "Key.h"

#define START_ADDR	0xA000								// 定义录音起始地址
#define END_ADDR	0xFBFF								// 定义录音结束地址

//=============================================================
// 语法格式:	void PlayRecord(void);
// 实现功能:	播放录音
// 参数:		无
// 返回值:		无
//=============================================================
void PlayRecord()
{
	unsigned long Addr,EndAddr;
	unsigned int Ret;

	SACM_DVR_Initial(0);								// 初始化放音			
	SACM_DVR_InitQueue();								// 初始化解码队列
	SACM_DVR_InitDecoder(3);							// 初始化解码算法,声音由DAC1和DAC2输出

	Addr = START_ADDR + 1;
	EndAddr = Flash_ReadWord(START_ADDR);				// 从录音首地址中读出录音结束地址
	
	while(1)
	{
		*P_Watchdog_Clear = 0x01;						// 清看门狗
		while(SACM_DVR_TestQueue()!=1)					// 如果解码队列未满
		{
			Ret = Flash_ReadWord(Addr);					// 取录音数据
			SACM_DVR_FillQueue(Ret);					// 填充入解码队列
    		Addr++;
			if(Addr > EndAddr) break;
    	}
		if((SACM_DVR_Status()&0x01)==0 || Key_Get()==KEY_3)	// 如果播放完毕或Key3键按下则停止
		{
        	SACM_DVR_Stop();							// 停止播放
        	break;
		}
        else
        	SACM_DVR_Decoder();							// 数据解码
	}
}

//=============================================================
// 语法格式:	void Record(void);
// 实现功能:	录制声音
// 参数:		无
// 返回值:		无
//=============================================================
void Record(void)
{
	unsigned int Addr;
	unsigned int Ret;
	
	for(Addr=START_ADDR;Addr<=END_ADDR;Addr+=0x0100)
	{
		Flash_Erase(Addr);								// 擦除录音所需Flash空间
		*P_Watchdog_Clear = 0x01;
	}
	
	SACM_DVR_Initial(0);								// 初始化录放音
	SACM_DVR_InitQueue();								// 初始化编码队列
	SACM_DVR_InitEncoder(0,0);							// 初始化编码算法
	
	Addr = START_ADDR + 1;								// 第一个单元用于保存录音结束地址
	while(1)											// 录音循环
	{
		*P_Watchdog_Clear = 0x01;						// 清看门狗
		SACM_DVR_Encoder();								// 对AD采集到的数据编码
		if(SACM_DVR_TestQueue()!=2)						// 如果编码队列不为空
		{	
			Ret = SACM_DVR_FetchQueue();				// 从编码队列中取数据
			Flash_WriteWord(Addr, Ret);					// 将数据写入flash 
			Addr += 1;
			if(Addr>END_ADDR || Key_Get()==KEY_3)		// 如果到达尾地址或Key3键按下则结束录音
			{
				Flash_WriteWord(START_ADDR, Addr-1);	// 录音结束地址保存在[START_ADDR]中
				SACM_DVR_Stop();						// 停止录音
				break;
			}
		}
	}
	if(Addr > END_ADDR)									// 如果是空间被录满导致的录音结束则播放录音
		PlayRecord();
}

//=============================================================
// 语法格式:	int main(void);
// 实现功能:	主函数
// 参数:		无
// 返回值:		无
//=============================================================
int main()
{
	unsigned int KeyCode;

	Key_Init();											// 初始化按键扫描程序
	while(1)
	{
		KeyCode = Key_Get();
		switch(KeyCode)
		{
			case KEY_1:									// Key1键按下则录音
				Record();
				break;
			case KEY_2:									// Key2键按下则放音
				PlayRecord();
				break;
			default:
				break;
		}
		*P_Watchdog_Clear = 0x01;
	}
}

⌨️ 快捷键说明

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