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

📄 vioceplayv1.c

📁 单片机利用DA转换播放语音音乐的的源程序,程序虽然简单,但非常实用,在系统设计中可以非常方便的添加语音和音乐功能,另外将上载一个语言数据提取的程序供大家参考
💻 C
字号:
/***********************************************************************/
/*                                                                     */
/*  FILE        :VIOCEPLAYv1.c                                         */
/*  DATE        :Fri, Dec 19, 2008                                     */
/*  DESCRIPTION :main program file.                                    */
/*  CPU GROUP   :2A                                                    */
/*                                                                     */
/*  This file is generated by Renesas Project Generator (Ver.4.12).    */
/*                                                                     */
/***********************************************************************/
#include "voiceplay.h"
#include "sfr_r82b.h"
#include "voicewave.h"
void main(void)
{
//内部振荡器--高速	
	prc0=1;
	fra0=3;
	prc0=0;
	delayus(150);

/*
//振荡器
	prc0=1;
	cm03=1;
	cm1=0x28;
	cm05=0;
	delayus(150);
	ocd2=0;
	prc0=0;
*/
	nop();
	delayus(250);
main_1:
	ini_ram();	//RAM初始化,主要写入0外的数据
	ini_pp();	//端口及外围功能初始化


  	for(;;) 
  	{
		nop();
		emi_p();
main_6:
		clr_wdt(); // kicks the dog 
		com_tr_sub();
		if (jsq10ms<80) goto main_6;
		jsq10ms=0;
		run_ok_ct++;

		if (run_ok_ct>=50)	//正常运行指示
		{
			run_ok_ct=0;
			run_ok_kx^=1;
		}
	}

}



//----------------------------------------------------------------------//
//内部RAM初始化程序,														//
//从00~1ff全部清0
//----------------------------------------------------------------------//
void ini_ram(void)
{
	voice_lt_ct=0;
	voice_rt_ct=0;
}


//----------------------------------------------------------------------//
//内部外围功能初始化--为抗干扰, 再处理
//----------------------------------------------------------------------//
void emi_p(void)
{
	prc2=1;
	pd0=0x00;
	pd1=0xfE;
	pd2=0xff;
	pd3=0xbb;
	pd4=0xff;
	pd5=0xff;
	pd6=0xee;
	pd8=0xfe;
}

//----------------------------------------------------------------------//
//内部外围功能初始化   1:out  0:in
//IO口方向/初始值 
//P00:AN7 P01:AN6 ...... P07:AN0
//P10:AN8 P11:AN9 P12:AN10 P13:AN11 

//	D7     D6     D5     D4      D3      D2      D1      D0
//P0:   0/1    0/1    0/1    0/1     0/1     0/1     0/1     0/1	// 0x00/0xff
//P1:   1/1    1/1    RXD0   TXD0    1/1     1/1     1/1     0/1	// 0xfe/0xff
//P2:	1/1    1/1    1/1    1/1     1/1     1/1     1/1     1/1	// 0xff/0xff
//P3:	1/1    0/1    1/1    1/1     1/1     0/1     1/1     1/1	// 0xbb/0xff
//P4:	1/1    1/1    1/1    1/1     1/1     X       X       X		// 0xff/0xff
//P5:	X      X      X      1/1     1/1     1/1     1/1     1/1	// 0xff/0xff
//P6:	RXD1   TXD1   1/1    RXD2    TXD2    1/1     1/1     0/1	// 0xee/0xff
//P8:	X      1/1    1/1    1/1     1/1     1/1     1/1     0/1	// 0xfe/0xff

//----------------------------------------------------------------------//
void ini_pp(void)
{
//端口
	p0=0xff;
	p1=0xff;
	p2=0xff;
	p3=0xff;
	p4=0xff;
	p5=0xff;
	p6=0xff;
	p8=0xff;

	emi_p();
//定时器--125微秒
	tracr   = 0;	//Timer RA Control Register
	traioc  = 0;	//Timer RA I/O Control Register
	traic   = 0x01;	//Timer RA Interrupt Control Register(Level 1)
	tramr   = 0; 	//Timer RA Mode Register(timer mode;count source select f1) 
	trapre  = 20;	//Timer RA Prescaler Register
	tra		= 125;	//Timer RA Register
	tracr   = 0x01;	//start counter
/*

	// UART2初始化	UART2速度=8000000Hz/16/52=9600bps
	//UART2速度=20000000Hz/16/130=9600bps
	u2mr=0x05;
	u2brg 		= 130 - 1; // UART2预分频 = 52
	u2c0=0x00;
	u2c1=0x07;
	s2ric		= 0x01;	//接收中断 1 级
*/

//DAC
	da0=0;
	da1=0;
	dacon=0x03;

//其他
	start_wdt();
	enable_mint();
}



//----------------------------------------------------------------------//
//----------------------------------------------------------------------//
void start_wdt(void)
{
	prc1 =1;
	pm12 = 1;			//  watchdog timer reset
	prc1 =0;
	wdc7 = 1;			// Prescaler select bit: divide by 128
	cspro = 0;			// Disable count source protect mode
	wdts = 1;			// Set Wathcdog Timer Start Register
}

//----------------------------------------------------------------------//
//----------------------------------------------------------------------//
void clr_wdt(void)
{
	wdtr = 0;
	wdtr = 0xFF;
}



//----------------------------------------------------------------------//
//----------------------------------------------------------------------//
void com_tr_sub(void)
{
}



void delay10nop(void)
{
	nop();
	nop();
	nop();
	nop();
	nop();
	nop();
	nop();
	nop();
	nop();
	nop();
}

//----------------------------------------------------------------------//
//延时程序
//----------------------------------------------------------------------//
void delayus(uchar dlt)
{
uchar i;
delayt_1:
	if (dlt==0) 
	{nop();
	return;}
	dlt--;
	for (i=0;i<8;i++)
	{
		nop();
	}
	goto delayt_1;
	nop();
}


//20M时,正好1毫秒
//----------------------------------------------------------------
void delayms(uchar dlt)
{
uchar i,j;
delayt_1:
	if (dlt==0) 
	{
		nop();
		return;
	}
	clr_wdt();
	dlt--;
	for (i=0;i<100;i++)
	{
		delay10nop();
		delay10nop();
		nop();
		nop();
	}
	goto delayt_1;
	nop();
}




//----------------------------------------------------------------
//----------------------------------------------------------------
void pPIT_ISR_P (void)
{
	uchar ls1,ls2;
	uint ls3;
	ir_traic=0;
	
	jsq10ms++;
/*
	ls1=voice_wlt[voice_lt_ct];
	ls1+=0x80;
	
	ls1>>=2;
	voice_left_out=ls1;
	voice_right_out=ls1;
	voice_lt_ct++;
	if (voice_lt_ct>=29377) voice_lt_ct=0;
*/

	ls1=voice_wrt[voice_rt_ct];
	ls1+=0x80;
	ls1>>=2;
	voice_right_out=ls1;
	voice_left_out=ls1;
	voice_rt_ct++;
	if (voice_rt_ct>=25986) voice_rt_ct=0;

	nop();
}


//----------------------------------------------------------------
//----------------------------------------------------------------
void com_recv_bdrf_isrp(void)
{
}


⌨️ 快捷键说明

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