单片机音乐中音调和节拍的确定方法(5)

2019-03-10 19:22

uchar ljsz; uchar jpm; uchar yfm; uchar t0 =0; uint i=0;

sbit Speaker =P1^0; uint k;

void Delay1() {

for ( k=0;k<20000;k++); } void Lignt( ) { uchar t;

for(t=0;t<10;t++) { P2=0xff; Delay1(); P2=0x00; Delay1(); } }

void Lignt1( ) {

P2=0xaa; Delay1(); P2=0x55; Delay1(); }

void Delay(uchar t0)//延时 {

while(t0--) //决定节拍 Lignt1(); }

void Delay2(uchar w0)//延时 {

while(w0--) //决定节拍 Lignt(); }

void T0Int() interrupt 1//TIMER0 {

TL0 = ljsz; TH0 = hjsz; Speaker=!Speaker; }

void ExtInt0() interrupt 0//INT0 {

if(t0>10) t0=0; i=0;

switch(t0++)

{

case 0 : TABLE=SONG;break; //选择第1首 case 1 : TABLE=SONG1;break;//选择第2首 case 2 : TABLE=SONG2;break;//选择第3首 case 3 : TABLE=SONG3;break;//选择第4首 case 4 : TABLE=SONG4;break;//选择第5首 case 5 : TABLE=SONG5;break;//选择第6首 case 6 : TABLE=SONG6;break;//选择第7首 case 7 : TABLE=SONG7;break;//选择第8首 case 8 : TABLE=SONG8;break;//选择第9首 case 9 : TABLE=SONG9;break;//选择第10首 }

}

void songsing()//发音程序 { i=0; while(TABLE[i]) {

jpm=TABLE[i]&0x0f; //节拍值

yfm=(TABLE[i]>>0x04)&0x0f;//简谱值

if(yfm) //简谱为1,取计数值 {

yfm=yfm-1;

hjsz=(uchar)(TABLE1[yfm]>>0x08);//取计数值高字节 TH0 = hjsz;

ljsz=(uchar)(TABLE1[yfm]); //取计数值低字节 TL0 = ljsz;

TR0 = 1; //启动TIMER0 }

else TR0 = 0; //简谱为0,不发音 Delay(jpm); //节拍延时 i++; } }

void main(void)

{

TMOD =0X01;//设TIMER0在MODE1 TCON =0X01;//外部中断INT0,下降沿触发 IE =0x83;//开中断(INT0,TIMER0) IP =0x00;//设置中断优先级 TABLE=SONG0; while(1)

{ Lignt( );

songsing();//调用发音程序 TR0 = 0;//停止TIMER0 Delay2(1); TABLE=SONG0; songsing(); } }


单片机音乐中音调和节拍的确定方法(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:全国2012年10月高等教育自学考试软件开发工具试题和答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: