锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

音频数据制作与音频播放_附welcome.c音频数据

时间:2024-05-04 22:37:09

 /*********************************************************************************************程序名:    SPEAKER32 编写人:    杜洋 编写时间:  2011年11月24日硬件支持:  STC12C5A32S2  12MHz接口说明:  ADC0输入8位的音频,用PWM0(P1.3)输出,P0接口音量显示  修改日志:    1-201101020129 技术可行性实验:实现了音频播放,采样8000,8位。2-201111242332 光敏控制及发声综合调试初步完成。3-201111270003 加入空闲模式,功耗从平时15mA降到9mA,调试完成。V14-201111301151 整理源程序并加入细致注释	/*********************************************************************************************说明:【功率测量】启动空闲模式后,平时:9mA,语音时:64mA只可以使用8位音频数据表文件。音频转换和处理的方法请参考《SPEAKER32音频数据生成方法》视频教程。/*********************************************************************************************///【自定义设置选项】#define SPEED 65 //语速(在12MHz时设置为70最佳,值越小语速越快)#define X2	2 //音频播放倍速(默认值2,增加/减少时音频速度整倍加/减)#define LMAX 2 //触发灵敏度(默认值5,值越小越灵敏)#define A_DA 7854 //音频数据字节的数量,即音频文件的行数。最大值不得大于65535//(如果有较长的音频需要播放可以分段处理,每段字节数不大于65535)//#define DL_F 500 //音频播放前的延时(单位:mS)。最大值不得大于65535#define DL_A 500 //音频播放后的延时(单位:mS)。最大值不得大于65535/*********************************************************************************************/#include //头文件#include 	//51基本运算(包括_nop_空函数)#include sbit AD_G  = P1 ^ 6;//光敏电阻接口(只适用ADC接口)sbit PWM  = P1 ^ 3;//音频输出接口(只适用PWM接口)sbit LED  = P3 ^ 6;//状态指示LED灯 正极sbit LEDG  = P3 ^ 7;//状态指示LED灯 负极unsigned char menu=0;//菜单值unsigned char code wav[];//音频数据表声明 /*********************************************************************************************/void DELAY_MS (unsigned int a){//毫秒级CPU延时函数unsigned int i;while( --a != 0){for(i = 0; i < 600; i++);}}  /*********************************************************************************************/void DELAY_NS (unsigned char a){//用于音频延时unsigned int i;while( --a != 0){for(i = 0; i < SPEED; i++);}}  /**********************************************************************************************/void PWM_init (void){//PWM初始化函数CMOD=0x02; //设置PCA定时器 	CL=0x00;  	CH=0x00;CCAPM0=0x42; //PWM0设置PCA工作方式为PWM方式(0100 0010) 	CCAP0L=0x00; //设置PWM0初始值与CCAP0H相同 	CCAP0H=0x00; // PWM0初始时为0 	CR=1; //启动PCA定时器}  /**********************************************************************************************/void PWM0_set (unsigned char a){//PWM0占空比设置函数CCAP0L= a; //设置值直接写入CCAP0L 	CCAP0H= a; //设置值直接写入CCAP0H}  /**********************************************************************************************/void Read_init (unsigned char CHA){//8位A/D转换初始化函数unsigned char AD_FIN=0; //存储A/D转换标志    CHA &= 0x07;            //选择ADC的8个接口中的一个(0000 0111 清0高5位)    ADC_CONTR = 0x40;	//ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)    _nop_();    ADC_CONTR |= CHA;       //选择A/D当前通道    _nop_();    ADC_CONTR |= 0x80;      //启动A/D电源    DELAY_MS(1);            //使输入电压达到稳定(1ms即可)}/**********************************************************************************************/void ADC_Read (void){//8位A/D转换函数unsigned char AD_FIN=0; //存储A/D转换标志    ADC_CONTR |= 0x08;      //启动A/D转换(0000 1000 令ADCS = 1)    _nop_();//空指令,用于延时    _nop_();    _nop_();    _nop_();    while (AD_FIN ==0){     //等待A/D转换结束        AD_FIN = (ADC_CONTR & 0x10); //0001 0000测试A/D转换结束否    }    ADC_CONTR &= 0xE7;      //1111 0111 清ADC_FLAG位, 关闭A/D转换, }/**********************************************************************************************/void T_C_init (void){//定时/计数器初始化函数TMOD = 0x11; //高4位控制T/C1 [ GATE,C/T,M1,M0,GATE,C/T,M1,M0 ]EA = 1;	//中断总开关TH0 = 0; //16位计数寄存器T0高8位TL0 = 0; //16位计数寄存器T0低8位ET0 = 1; //T/C0中断开关TR0 = 1; //T/C0启动开关}/**********************************************************************************************/void SP1 (void){//音频播放函数unsigned int a; 	CR=1; //启动PCA定时器LEDG = 0;//LED灯开PWM0_set(128);//设置PWM到中间值,即音频波形的基础电平。DELAY_MS (DL_F);//播放前延时for(a=0;aADH2){//判断光线是变弱ADH1=ADH1-ADH2;//计算光线变化的差值if(ADH1 > LMAX){//如果差值大于预设值SP1();//则启动语音播放}}else{//判断光线是变强ADH1=ADH2-ADH1;//计算光线变化的差值if(ADH1 > LMAX){//如果差值大于预设值SP1();//则启动语音播放}}	TR0 = 1; //T/C0启动开关PCON = 0x01;//进入空闲模式_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}}}  /**********************************************************************************************/void T_C0 (void) interrupt 1  using 1{ //定时/计数器0中断处理函数TH0 = 0; //16位计数寄存器T0高8位(重新写入初值)TL0 = 0; //16位计数寄存器T0低8位(0 = 65mS延时)menu++;//唤醒后,菜单间切换if(menu>6){//溢出后处理menu=0;//菜单归0}}/**********************************************************************************************//************************************************************** 杜洋工作室 www.DoYoung.net/*************************************************************//*welcom.c*/unsigned char code wav[] =  {            // ASCII 128,128,128,128,128,128,128,128,128,128,128,127,127,127,128,127,128,127,128,127,127,128,127,128,127,128,127,120,120,128,120,120,120,120,120,120,120,120,120,120,120,120,120,119,120,119,120,113,120,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,120,113,120,119,120,120,120,120,120,120,119,120,119,128,119,128,119,128,127,128,127,128,127,128,127,128,128,135,134,127,135,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,135,141,134,135,134,135,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,140,134,142,139,134,134,134,134,134,134,134,134,134,134,135,133,127,128,126,118,123,136,132,127,127,128,127,129,135,123,124,135,125,129,108,93 ,124,133,124,118,123,130,137,128,121,129,127,125,118,121,119,123,130,122,124,125,118,121,119,120,120,120,120,119,121,116,112,113,113,113,114,109,105,107,106,103,97 ,106,101,103,108,104,112,112,119,119,126,132,141,140,147,147,154,155,155,155,155,155,155,155,155,155,148,148,148,141,141,134,134,127,128,118,113,112,105,98 ,90 ,84 ,77 ,70 ,62 ,67 ,80 ,79 ,100,113,116,131,137,153,154,171,170,164,168,161,159,153,153,143,140,142,136,138,142,140,145,154,154,160,167,175,176,176,176,176,170,169,169,162,162,155,148,148,141,134,126,119,111,98 ,89 ,67 ,54 ,29 ,38 ,54 ,34 ,62 ,73 ,85 ,94 ,110,140,140,164,157,152,168,150,149,146,155,139
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章