编辑: star薰衣草 2019-07-05

// 保存原中断向量 setvect(INTR, handler)装载新中断向量 outportb( 0x303, 0x90);

// 初始化8255 outportb( 0x303, 0x0c);

// 置pc6=0 禁止8253通道2的gate引脚 outportb( 0x303, 0x00);

// 置pc0=0 禁止7408 outportb( 0x307, 0xb6);

// 初始化8253 pFreq = pf;

取歌曲的第一个音频 pTimeDelay = pt;

// 取歌曲的第一个时延 while ( *pFreq &

&

!kbhit()) { outportb( 0x306, (unsigned char)(CLK / *pFreq % 256));

// 先送低字节 outportb( 0x306, (unsigned char)(CLK / *pFreq / 256));

// 再送高字节 // 以上置8253通道2 的计数初值 outportb( 0x303, 0x01);

outportb( 0x303, 0x0d);

// 开扬声器 *pr = ~*pr;

outportb(0x301,*pr);

//printf( %x , ~*pr);

while ( *pTimeDelay){};

//等待延时到 outportb(0x301,0xff);

outportb( 0x303, 0x0c);

outportb( 0x303, 0x00);

// 关闭扬声器 pFreq+获取下一个音频 pTimeDelay++;

// 获取下一个延时 pr+获取下一个音频灯闪烁的数目 } // 歌曲结束或按了任意键 outportb( 0x303, 0x0c);

outportb( 0x303, 0x00);

// 再次关闭扬声器 setvect(INTR,oldhandler);

// 恢复原中断向量 return 0;

} 在Playing函数里面,首先做的是保存原中断向量,转载新的中断向量.然后是就是初始化8255和8253,在通过一个while循环,把歌曲中的每个音符相应的频率取出来放到8253的计数器2中计数.然后开扬声器播放音乐,在播放音乐的时候,把从文件中读到的音符的闪烁频率送到8255的PB口中.实现闪烁效果.直到音乐结束,灯全灭.最后关闭扬声器,恢复中段向量. 在main函数中,我们编写了一个界面, void main(void) { char c;

char s[20];

printf( now play music!\n );

printf( strike ESC to exit\n );

printf( music menu:\n );

printf( meijiujiakafei-1\n );

printf( yifenqian-2\n );

printf( xiangshuiyoudu-3\n );

printf( tianheihei-4\n );

printf( exit-5\n );

printf( please choose the song you want to sing\n );

while(c!='

5'

){ c = getchar();

if(c=='

1'

){ s[] = d:\\temp.txt ;

pr = read(s);

pf = nFreq1;

pt = nTimeDelay1;

Playing();

} else if(c=='

2'

){ s[] = d:\\temp1.txt ;

pr = read(s);

pf = nFreq2;

pt = nTimeDelay2;

Playing();

} else if(c=='

3'

){ s[] = d:\\temp2.txt ;

pr = read(s);

pf = nFreq3;

pt = nTimeDelay3;

Playing();

} else if(c=='

4'

){ s[] = d:\\temp3.txt ;

pr = read(s);

pf = nFreq4;

pt = nTimeDelay4;

Playing();

} }} 按照输出来的提示信息,输入相应的歌曲的代号来收听你想听的音乐.比如输入一你就会听到动听的美酒加咖啡的美妙旋律,当你按下ESC键时,就是结束当前所听的歌曲,当按下5时则推出程序 4.3具体代码实现 #include getvect();

setvect();

#include //kbhit();

#include //exit(0);

#include //printf();

#ifdef __cplusplus #define __CPPARGS ... #else #define __CPPARGS #endif short int nFreq1[] = { //声明歌曲 美酒加咖啡 的音乐频率 196,165,196,220,262,294,330,392,392,440,330,294,262,330,294,294,330,392,330,294,262,220,262,196,220,262,220,196,165,196,220,262,196,196,165,196,220,262,294,330,294,262,294,330,294,330,392,440,392,330,294,262,294,294,330,392,330,294,262,220,196,220,262,294,330,392,294,196,330,294,262,262,294,330,392,294,196,330,294,262,0};

short int nTimeDelay1[] = { //声明歌曲 美酒加咖啡 的音乐延时 12,4,4,4,4,4,32,8,4,4,4,4,4,4,32,12,4,8,8,4,4,2,2,4,16,8,4,4,4,4,4,4,32,8,4,4,8,8,4,2,2,4,4,16,4,4,4,4,4,4,4,4,32,12,4,8,8,4,4,4,4,16,4,4,4,4,4,4,4,4,32,4,4,4, 4,4,4,4,4,32 };

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题