资源描述:
《微机原理 音乐播放程序设计.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验报告(2016/2017学年第二学期)课程名称微机原理与接口技术实验名称音乐播放程序设计实验时间2017年6月13日学院电子信息学院指导教师严华学生姓名学号学院(系)电子信息学院专业光电信息科学与工程1、实验目的通过编写程序控制8253和8255A芯片,实现一个简单的音乐播放程序。2、实验原理我们在这次课设选择了音乐程序设计,音乐程序设计可以实现至少两首歌的可选择播放。对于歌曲的播放我们采用的是计数器/定时器8253芯片,而对于选择哪首歌播放则是利用可编程并行接口8255A芯片来实现的。基于8253定时计数接口芯片的工作原理,本次
2、课设实现了音乐演奏系统程序设计。当运行程序时,扬声器便发出优美的音乐。首先要解决发声并发出相应音符声音的问题,由8253计数器0在初始化时用来产生一定频率的方波来使扬声器发声,再根据不同音符对应的频率写入计数初值发出相应的音符声。对8255芯片PA0和PA1口的置0和1来控制扬声器的开关。其次实现唱歌功能即实现歌曲的节拍通过调用延时子程序控制音符发音的长短,实现连续发声把[SI]是否为0作为循环的条件在每一次扬声器发出一个相应音符之后做无条件转移,从而使扬声器连续发声。3、实验内容A.实验环境搭建B.编程由于选取的乐曲音符音调幅度较大
3、,故利用表格,算出其初值计数初值=1193180(8253输入频率)/音符频率以下为程序代码#include#include#defineINIT_T20xb6#definePORT_T20x42#defineCTRL_T0x43#definePORT_PB0x61#defineDDO4554#defineDRUI4058#defineDMI3616#defineDFA3419#defineDSO3044#defineDLA2712#defineDXI2415#defineDO2281#defineRU
4、I2033#defineMI1811#defineFA1709#defineSO1522#defineLA1356#defineXI1208#defineGDO1140#defineGRUI1015#defineGMI905#defineGFA854#defineGSO761#defineGLA678#defineGXI604voidsing(unsignedintfrq,unsignedintms){unsignedcharvalue;union{unsignedintdivisor;unsignedchard[2];}tone;i
5、f(frq!=0){tone.divisor=frq;outportb(CTRL_T,INIT_T2);outportb(PORT_T2,tone.d[0]);outportb(PORT_T2,tone.d[1]);value=inportb(PORT_PB);outportb(PORT_PB,(value
6、0x03));}delay(ms);outportb(PORT_PB,(value
7、0xfc));}voidmain(){sing(DSO,400);sing(DLA,400);sing(DO,400);sing(RUI,400)
8、;sing(MI,600);sing(RUI,200);sing(RUI,400);sing(DO,400);sing(DLA,1600);sing(0,1600);sing(DSO,400);sing(DLA,400);sing(DO,400);sing(RUI,400);sing(MI,400);sing(SO,800);sing(RUI,2000);sing(0,2000);sing(RUI,800);sing(DSO,400);sing(RUI,400);sing(RUI,400);sing(MI,400);sing(RUI,
9、400);sing(DO,1600);sing(0,2000);sing(RUI,400);sing(RUI,400);sing(RUI,400);sing(DSO,400);sing(DLA,400);sing(DO,400);sing(DLA,2000);sing(0,2000);sing(FA,800);sing(FA,400);sing(MI,400);sing(RUI,400);sing(DO,400);sing(RUI,2000);sing(0,2000);sing(RUI,400);sing(RUI,400);sing(
10、RUI,400);sing(RUI,400);sing(DSO,400);sing(DLA,400);sing(DO,400);sing(DLA,2000);sing(0,2000);sing(SO,400);sing(