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

📄 main.c

📁 spce061单片机的一些程序!C语言和汇编语言都有
💻 C
字号:
//======================================================================================
//
//        The information contained herein is the exclusive property of
//      Sunplus Technology Co. And shall not be distributed, reproduced,
//      or disclosed in whole in part without prior written permission.
//
//            (C) COPYRIGHT 2001   SUNPLUS TECHNOLOGY CO.
//                           ALL RIGHTS RESERVED
//
//    The entire notice above must be reproduced on all authorized copies.
//
//========================================================================================
//  工程名称: DVR.spj
//  功能描述:  利用SPCE061A的IO口扩展一块HM628128A,完成录、放音功能
//				
//  文件来源: 《SPCE061单片机原理及应用技术》第八章 凌阳单片机应用及开发技术,第334页
//  IDE环境:  	SUNPLUS u'nSPTM  IDE 1.8.0(or later)
//
//  涉及的库:	CMacro.lib/sacmv26e.lib
//
//  组成文件:	main.c
//    	 		isr.asm/key.asm/sram.asm/hardware.asm
//	            DVR.h/hardware.inc    	
//  日期:       2002-6-12
//===========================================================================================
// 程序名称:    main.c
// 功能:       利用SPCE061A的IO口扩展一块HM628128A,完成录、放音功能
// 库函数:     sacmv26e.lib库
// 日期:        2003/05/20
//===========================================================================

#include "dvr.h"

#define	SRAM_Size		0x1ffff-4    //HM628128A容量

#define	Stop			0
#define	Record			1
#define Play			2	

#define	Full			1			
#define	Empty			2

#define	DAC1			1			// DAC output
#define DAC2			2

#define	RceMonitorOff	0
#define	RceMonitorOn	1

#define Manual			0
#define	Auto			1

unsigned int Ret;
unsigned int Key, Mode, Status;
unsigned long int  Addr, Addr_Save;
unsigned long int  Addr_Long;

unsigned long int  yxh=0;


int main()
{
	Mode = Manual;       			//手工方式				
    System_Initial();
    
  	SACM_DVR_Initial(Mode);   		//DVR初始化
	Status = Stop;  
    
    while(1)
	{
		Key=KeyScan();
		if(Key>0)
		{	
			switch(Key)
			{  
				case 0x00:
					break;
				case 0x01:         // 录音键
				     Status = Record;
					 Addr = 0;	
	                 SP_InitWriteSRAM();     //写初始化
	                 SACM_DVR_InitQueue();
	                 SACM_DVR_InitEncoder(RceMonitorOn);	
				 	 break;
					  
				case 0x02:         //停止键
					switch(Status)
					{
						case Record:
							SACM_DVR_Stop();
							while(SACM_DVR_TestQueue() != Empty)
							{
								Ret = SACM_DVR_FetchQueue();
								SP_WriteSRAM(Addr,Ret);	//将队列中的数据写入HM628128A
								Addr += 2;
							}
							SP_WriteSRAM(Addr,0xFFFF);	//写结束标志----连续三字节FF
							Addr += 2;					
							SP_WriteSRAM(Addr,0x00FF);	
							break;
						case Play:
							SACM_DVR_Stop();
							break;
					}		
					Status = Stop;
					break;
				
				case 0x04:              //播放键
					SACM_DVR_Stop();
					if(Status == Record)//如果处于录音状态,执行关闭录音处理
					{
						while(SACM_DVR_TestQueue() != Empty)
						{
							Ret = SACM_DVR_FetchQueue();	
							SP_WriteSRAM(Addr,Ret);			
							Addr += 2;
						}
						SP_WriteSRAM(Addr,0xFFFF);			
						Addr += 2;							
						SP_WriteSRAM(Addr,0x00FF);		
					}
					Status = Play;        //置为播放模式
					Addr = 0;
					SP_InitReadSRAM();   //读初始化
					SACM_DVR_InitQueue();
			
					while(SACM_DVR_TestQueue() != Full)   
					{	
						Ret = SP_ReadSRAM(Addr);			
						SACM_DVR_FillQueue(Ret);			
						Addr += 2;							 
					}
					SACM_DVR_InitDecoder(DAC1+DAC2);										
					break;
					
				default:
					break;
			} // end of switch(Key)
		}// end if(key>0)
					
		switch(Status)
		{	
			case Record:
				if(Addr < SRAM_Size)
				{						
					SACM_DVR_Encode();				   
					if(SACM_DVR_TestQueue() != Empty)  
					{	
						Ret = SACM_DVR_FetchQueue();	 
						SP_WriteSRAM(Addr,Ret);			  
						Addr += 2;
					}
				}
				break;
			case Play:
				if(SACM_DVR_Status() & 0x01)
				{
					if(SACM_DVR_TestQueue() != Full)
					{
						Ret = SP_ReadSRAM(Addr);		 
						SACM_DVR_FillQueue(Ret);		
						Addr += 2;
					}
				}
				else
				{
					if(SACM_DVR_TestQueue() == Empty)
					{ 
						SACM_DVR_Stop();
						Status = Stop;	
					}	
				}	
				SACM_DVR_Decode();	
				break;
			case Stop:
				break;	
					
		}// end of switch(Status)	
	}// end of while(1)
  return 0;
}

⌨️ 快捷键说明

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