微机原理 音乐播放程序设计.docx
实验报告(2016/2017学年第二学期)课程名称微机原理与接口技术试验名称音乐播放程序设计试验时间2017年6月13日学院电子信息学院指导老师产军学生姓名学号学院(系)电子信息学庞专业光电信息科学与工程1、试验目的通过编写程序限制8253和8255A芯片,实现一个筒洁的音乐播放程序。2、试验原理我们在这次课设选择了音乐程序设计,音乐程序设计可以实现至少两首歌的可选择播放.对于歌IIIJ的播放我们采纳的是计数器/定时器8253芯片,而对于选择哪首歌播放则是利用可编程并行接口8255芯片来实现的。基于8253定时计数接口芯片的工作原理,本次课设实现了音乐演奏系统程序设计。当运行程序时,扬声器便发出美丽的音乐。首先要解决发声并发出相应音符声音的问我,由8253计数器。在初始化时用来产生肯定频率的方波来使扬声器发声,再依据不同音符对应的频率写入计数初值发出相应的音符声。对8255芯片PAO和PA1.口的置0和1来限制扬声器的开关。其次实现唱歌功能即实现歌曲的节拍通过调用延时子程序限制音符发音的长短,实现连续发声把S1是否为0作为循环的条件在每一次扬声器发出一个相应音符之后做无条件转移,从而使扬声器连续发声.3、试验内容A.试验环境搭建图1WMHWUb”MEZZZS,J<j113X>ISIMC*三r1*i'9aHEO-I1.O;曲Kf1.>X!g*k*三£00?W9enrMIt2mcB-,地始阴士H于*8与4口沿owm”SZg3d23“,*用用元?JO-ZOOf血2节gCBXOaHtf>W10S*>-zoo?MUWm俘豺OW8>OWIP11OSitooy总务gyt,、EO-ITOC勃XjNO)WOT曲二O7TX>p>x11a“NOB,冲若,YfuTHnr牌BBTP守雌。3-44SAr$a.<x11opfg八okoq9FP2Aimb/«»*户=FJnrW5t5CWtvwewiBU三HB1*三1由YBFrr/WzocrFO1.WW.gt2<S<FWtw碗加Berp<Mmf>ciVrxMftwI*-1<SOK1.B(3EtviZmceIFIOS«>9m<mmcr2WotMtr"ms2cWt>r,WBWtR“2WK_«F<!WziartrrjAwoc1.<WxwfTtvteIn4WruttMWerrnMw(11rme11SMWCZ或二33-M><>Tn0NvnfTMtmOJrt*><xT3X1.;IUMiU4MSM0Wai*始£图旧/内牌寒组ZmS咨H谢昭D旅顺力牌”即M错KftH»1王SsB"32ff-V?1<ti百-rs§Sst*SsSS80.SRwSBtSoa-IM?WSaS58fS3ru<3t1.ruSISQiS1.Ss£08s1.2St*4HQtOTC2§ssSaXsfSsfw*wHmO二MO1.MOYE38*Ja=Ir1X3AiSMSQ3a>QV*S5O1JUUU3S1.300-WtxN13*s-EB幺3aWWM.St<良ff1.9955asfis"Mwa?<s«、K¢P距忌£快Hy6&M父生«£»>需点,mW'SK一Sss§Rfts*UKs>sSW34支OfWC耳50Rs5-ss%0RMZ-WE久二WR爸2Rkue次幺9cit11Cw-Wr4主HAZUZS955K113RCWIS3.i3REN!三EMt5WJ.SM«KSS图6如图6所示tc的集成开发环境由以下四个区域组成II菜单M(1)、焉我J).MWU(3).(4).J!包括Fi1.e.Edit.Run.Compi1.e.ProJecI.Options.Debug.BreakZvatch编用来编辑文件,输入程序的.f:,g窗口,在调试和率详程序的时候会出现相关的信息.状':为用户梃供坛本的帮助信息以及当前键盘的状态.注意,在TC集成开发环埴中.只能使用逛fit.鼠标用不TC中的常用快捷健ESC:退网到主菜单A1.t÷X:退出TC集成开发环境Fn+F10(不同的电脑可能有一些差别):回到主菜单区5.由过路径选项<1)切换到Options子菜单.ii择Directories选项(2)进入DireetOrieS如图7所示(3)如图所示,有四个选项需要我们修改(散回年键后方可修改).如图7所示Inc1.udedirectories:TCINC1.UE1.ibrarydirectories:C:TC1.IBOitputdirectory;C:TCTurbocCdirectory:C:TC解杼:InCIUdedireCtorieS是买文件目录.1.ibrarydirCC1.oriCS是链接库目录tputdirectory是输出目录存放编译成功的可执行文件.TurbocCdirectory是安装turboc2的目录.JDoSBo,0.72.CpuCyc1.es0.Program:TC图Z.6保存选项也置进入Option>Saveoptionsii项.保存目录埴为CTCTCC0NF6TC敲I可车如图8所示(2)弹出对话框如图9所示输入Y如图9所示图97 .打开源程序,进行编译(1)进入Fi1.e菜单F.选界1.Oadi1.攻.如图10所示.(2)敲网乍.编辑区会区示TC目录下的所有后缀名为.C的文件,如图11所示.选择要我入的C源程序文件(对应力要3.图4),我要编译MUSiCC就选杼MUSIC.C.(3)进入COmMe菜单.选界MakeEXEFiIe选项,生成可执行文件.如图12所示.(4)如果编译成功,会显示SUCCeSs,如图13所示.p8o7H1.eUitCovpi1.ctoOBJC:MUSC.OBJMakeEXEfi1.eCXiSICEXE1.inkEXEfi1.eBuiMa1.1.rimaryCfi1.e:GetinfoC:MJS1.CCctip.tihund"1.3000,FramnAip0.ProgramTCFrojcxtOptionsDCbUgBreakzuatch1.ine3Co1.f1.(NttIme0Ime1gcttirac(tiMcp);tiatiH11p.ti.dotic1.=tIMcp.ti.hour36tincpif(tiae1.<tiae6)Min>>6tiMcp.ti.scctiap.ti.hund)utHe(tiMe1.-tiMe<ms1.1.);MessageCompi1.ingC:TCMUSIC.C:ErrorErrorErrorErrorC:TCMKCUJDEXSTDIO.HC:、TC、IMe1.UDESTDI0.HCz11XINC1.UDESTD!O.HC:TC1NC1.UDESTD1O.H19:t>ecIarattonsyntaxerror119:Dec1.aration1Z6:Dec1.aration136:Dec1.arationWArningC:TCMtBIC.C3:CodeImsnoeffectsyntaxerror3nnta×errorsyntaxerrorinfunctionu.de1.ayErrorC:TCrtJSIC.C3:StateMEntmissing;infunctionu.d1.ayF1.-He1.PF5-io5-SwitchIV-TreceFB-SUp>-tfakcF1.tMfcrni图12DOSBox0.72.CPUCWeQ竹?sr4p_TCIoCoMP1.1.ero,_OPttont呢ugBreakzwatCh|1.ine3Co1.1InsertIndEtTabFi1.1.UnindentC:NJS1C.Cf1.oattir,fieri:gettia(AtiMrp):tiatip.ti-hour366*tiaep.ti.Min*6*tianp.ti_sec*tinp.ti_hund«1.do(gcttine(Attimc1.-tiI(t1.n1.<<tiw1.)>uhi1.e(t1.-t1.IIIKII1.yEXEfi1.e:rtJSIC.EXE1.inking:1.IBS.1.IBTota1.1.ink1.inesCOa<>i1.cd:S53PASS2Uarnings:Fwma*oOA1_sec«tiMep.ti-hundCoMpiIingC:TC21ErrorC:TC1NC1.UErrorC:TOIIK1.UErrorC:TC1NCUJIAri1.abIcacoru:316KMj11gI23ErrorC:STC1NC1.UDESTDIO.H136:Dec1.arationsyntaxerrorWarningC:TCrt1.SIC.C3:Codehasnoeffectinfunctionu.dcUyErrorC:TCMJSIC.C3:StdteMentmissing:infunctionu_d匕IdV图138 .执行编译成功的可执行程序(D进入RUn菜堆.选择RI1.n选项,如图14所示.<2)如果PC机有喇叭.就会听到音乐声了.图149.将编译的可执行程序捣贝出来(这就是作业中要求打包提交的可执行程序,如图15所示Jj1.MtnaACi*I.rI99n卜e>M*-1MIMrEMM>Ta».IMQ(XMcrwcA_FiamcDATmmVB3oat1<»*三s»'MAO_1X1g*1.XEJ7K-*O4mwwM<M<vQ>,<wurrfmvim力a、5»。CgJ<Ut*5S0tRW2”日asstoixi<<om1.<WW1.2MOOfRRW»<XC*mMig22ca.叫FafADMtCOM>WVV1ss“OCKGVt.,“'rcjgIfMMJsJ*26201VkH2>27U<.KBmcc«IWWIIM<B1.tr.1Tccomwixi*nvxM160TCCt>AGTCJ01.»IIMI;OJIMMiC,tCMf1.P.rCWnm9JE加"CINSTOtn(wTt<1Jm则一*<XnwMa>xIKBCfHt1.FXOMS8以FM<B图15B.编程由于选取的乐曲音符音调幅度较大,故利用表格,算出其初(11计数初值=1193180(8253输入频率)/音符频率低音自符11234567顿案2622W33039392440494Wffi4554405836163419304427122415中自昌符1O34567城车523587659698784880988W®2281203318111709152213561208高官昌符顿率110472117531319413975156861760i1976初(B11401015905854761678604以下为程序代码#indudc<doh>*inch>dc<stdo.h>*dcHncINiTjn0xb6"definePORT_T?”一、#<kftneCTR1._T(H43*dcAcPORT_PB0x61*dcHncDDO4554VdcGncDRU1.405XMeftneDM1.36!6*<knurDFA5419MCfiMDSOMH4MdinCD1.A2712*defineDXI2415*ik(ineDO2281MCfinCRUI2033MdcHneMI1811#dcfincFAITW*dc11cSO1522机Hrh1.e1.A1356*dcfincXI1208MCnMGDO1140AdcfincGRUI1015“defineGMI905*kAeGhAX54*<knneGSO761#dCfinCG1.A678“改fineGXI604voidHiiigfuiuiKnedMtrq.usigdu1.ms)(unsignedcharva1.ue:union(UfvtignedIMdvM)r:unsignedcard2;)to;if(frq!=<)(toe.diviwr=frq;ouiponb(CTR1._T.INrr_T2);outportb<P<>RT_T2joDc.d0D;uu1.por1.b<R>RT2,1.uw.dIJ):vu1.uc=tnpo11bPORT.PB);outpo11b<PORT.PB.(vahc0x03):)dehy(ns):ouo11b<PORT-PB.<va1.ucOxfc):void11win(>(sing!DSO,4(X>Sing(D1.A.400);丽MDO4);sig(RU!.40()>:sing(M1.600):Stng1.RVUOO);xing(R1.400);而KDo.400):sing(D1.A.I60()>:sing(0.!600):Sing(DSo.400j;xing(DI.400);sig(1X4(IO);smg(RUI.400):sing!M1.400);sing(S0.8ff1.);SiEg(RIJUoooXXiIIS(0,2000):sig<RUISOO):Sing(DSo.400):sing(RU1.40();sug(RUI.4):Sing1.M1.400):sing(RUI.400);sing!DO,1600);xing(0,2<XM);sig(R1.!.40()>:sing(RUI.400):sing(R.400);而一DSOI400);Hug<D1.A,4):SingIDO.4()0):SinEDIA200(»;sug(0.2(XW);singFA.800);Sin-FA.400):sing(MI.4C0);SinR(RUIHM):疝喈(DOHIO):Sin判RU1.2000Singta2000):Sing(RU1.40(»;sug(R1.1.400);suSRUI.40();S曝IRUJ.400):Sing(DSO1-MX):m11r(DI.,4H);Suig(IX)J(K);sing!D1.A200();sing(02X)0):xing(SO.400);Sin-SoM0(»;而剖SO.40(»:SinS(S0.400):sing(S0.400):SiwSO.40(»;疝喊1.AM0):SinW(0.2000):Sing(1.A1-WO);Sing(1.A1-K)O);xi11S(1.,4(K);SEMGDo.400):Sing1.1.AJ(XJ);Sing(1.A.400);SinnSO,20()01;血8(0,2000):siSS0.4W)>si11g1.S0.400);sing(S0.400);sj(SO,400);xuS(1.A,4(K);sing(GDO.400):si11g1.1.A.2000);Sing(QsoQi;Sin期SOdO仍;Singi1.AJOOj;singGR1.400);SingtGM1.28001;SinmGRU1.32WI);而S(0,1600):sing(S0.400);Sing1.1.A1-WJOj:sinsGD0.400);Sinb(GR1.141X%SinsfGA”400):s>ng1.GR1.!,200>SinW(GRU1.4期;si11g(Gr×),400);s>S(1.A,32OO):sing(S0.400);Sing(1.A.MOj;SinE(GDOWOO);SinEGRC1.40(%而S(GM1.600):sing!GS0.600j.Sing(GR1./1.3600):XinKa400);SinS(GRU1.400);sing(GRCI.400):sing(SO.4(M);sing(GR1.,1.4001:smg1.GRCI.400>:Sing(GM1.400):sing(GRUI,4001;si11g(GDO320()>:Nig(0.4<X>);Sing(GRIn.400):sing(GRUI.400);sing(GR11.4(X);sig(S0.4>:而鼠1.A400):singiGD0.400):singH1.A.3600):sing(O,I6OO);疝塔(1.A.32OO):sing(0,4(X>);StngiGFA.W0);si11g(GF,4<X0;si11g(GFA,44X0;sing(GMI.40():sing<GR1.,400>:sing(GD0.400);xing(GM1.400);smg(GR1.IvIt100hsing<O,I(K)O):sing<0,4(X);sing<GFA,4(X>);si11gGF,4<X0;SintG1.A.400):sing<GS0.4CO);sing!GFA.4C0);sing(GMI,400);sug(GR1.I.2(XK);smgfO.KXMJ);smg(GRUI.400);Sing(GRUU(W;M11g(S0.40();疝IMGR1.1.J必;sing<GR1.1.4(X»sing<GMI.400):'R1.,4fX>sing(GX160();sing1.O.KXX):sing<GRUI,400>:stng(GRUI.400);sing(GRUI.4(X)>sug(S0.4(X)>sing<1.A.4(K);sing<GD0.400):si11g(1.J600);运行结果如FIo1.三JDoSB。冥StafU=WindCw4、试验中遇到的问题起先程序中的#defineDDO4554语句为#defineIDO4554,程序运行时显示编译出错,我意识到IDO有可能不符合宏名定义要求,通过查阅有关资料后发觉,标识符只能是字母(AZ,az)、数字(0-9)、下划线()组成的字符串,并且其第一个字符必需是字母或卜划线,随后修改了程序。5、总结体会通过本试哙的学习,我对8253和8255A芯片有了进一步的相识和理解,并能编写程序限制这两种芯片,实现简洁的音乐播放程序。在这次试验中,发觉了拥有扎实基础功的重要性,以及在试验过程中发觉了自己的不足之处,深刻理解了实践与理论相结合的重要性。附件(乐曲简谱)1=E蓝莲花许姨词曲编分HahEyrte3?(许巍演唱)5612*221I§-OOI5_65fT-OO三没有什么能够阻挡你对自由的向往02522-2I1-00022561fTe-OO|天马行空的生涯你的心了无牵挂0¾43212-000¾6542T2-00|穿过做暗的岁月也W盛到彷徨025222|1-00022256166-00当你低头的瞬间才发觉脚下的路05555551.6000666i6T-00|心中那自由的世界如此的涧漱高远0555566|6-056I233|2|盛开密永不凋零黄莲花00Ihz(5612*221|6|56¾2*55H三a-»2I022522210225616|rTI6|年00:|6I1.6一as.|:owUi2-oo1.o¾4541-00I啦啦啜啦啦啦啜啦啦啦啦啦啦啦啦0225222I1-000222561:|啦啦城啦啜啦啦哦哦啦啦啦啦啦