欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

用單片機+PWM來解碼WAV真人聲樂

作者:佚名   來源:本站原創   點擊數:  更新時間:2012年07月25日   【字體:

本程序是51hei單片機開發板所提供一個列子,用單片機解碼wav真人聲音音樂,并用pwm的方法輸出,開發板的p2.2口是接的蜂鳴器,但蜂鳴器的效果實在是太差,在使用中直接把蜂鳴器去掉,接上一個2w的小喇叭效果更佳.wav.h是wav數據請從下面的壓縮包下載: http://www.raoushi.com/f/waefc.rar   下面是主程序部分:

#include<reg52.h>
#include "wav.h"

sbit dataOut = P2^2;
#define maxSize    2060

unsigned char pwmData=0;      
unsigned char pwmCycle=256;        //pwm的頻率 
unsigned int datIndex=0;

void TimerInit() {
 TMOD=0x22;
 TH0=(256-pwmData)%256; 
 TH1=(256-(pwmCycle-pwmData))%256;

 RCAP2H=0xfe; //1
 RCAP2L=0xc7; //199
  TH2=RCAP2H; 
 TL2=RCAP2L;
 
 PT2=0; //高中斷優先級 
   
    TR0=1; TR1=0; TR2=1;  //啟動/停止定時器
 ET0=1; ET1=1; ET2=1;  //打開中斷
 EA=1;
}
                                                                          
///////////////////定時器0中斷//////////////////////
Timer0() interrupt 1 {
 TR0=0;              //turn off Timer0
 dataOut=0; 
 TR1=1;              //turn on Timer1
  

///////////////////定時器1中斷///////////////////////
Timer1() interrupt 3 {
 TR1=0;              //turn off Timer1
 dataOut=1;
 TH0=(256-pwmData)%256;
 TH1=(256-(pwmCycle-pwmData))%256;
 TR0=1;              //turn on Timer0 
}

///////////////////定時器2中斷///////////////////////
Timer2() interrupt 5 {
 TF2=0;
 pwmData=wavdata1[datIndex];
 if(++datIndex==maxSize) {
  datIndex=0; 
 }
}

main(){
 TimerInit();
 while(1);
 { }
}

關閉窗口

相關文章