/*********************************************************************************************程序名: 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;a ADH2){//判断光线是变弱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
音频数据制作与音频播放_附welcome.c音频数据
时间:2024-05-04 22:37:09