单片机设计-八音盒_第1页
单片机设计-八音盒_第2页
单片机设计-八音盒_第3页
单片机设计-八音盒_第4页
单片机设计-八音盒_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

8051八音盒课程设计任务书8051八音盒本设计利用8051单片机结合内部定时器LCD设计一个八音盒,按下单键可以演奏预先设置的歌曲旋律。本设计可以学习8051定时器程序设计,按键扫描及歌曲旋律简单直觉式输入法的设计方法。其基本功能为:1使用LCD显示器来显示目前演奏的歌曲编号;2具有16个按键操作来选择演奏哪一首歌曲;3内建10首歌曲旋律,按下单键可以演奏歌曲;4演奏时可以按键中断。程序执行后工作指示LED闪动,表示程序开始执行,按下单键0~9便可以演奏歌曲,歌曲演奏中,可以按键中断。设计项目简介设计思路:选择8051单片机,通过T0定时中断,并配合P3.0引脚输出音频频率。P3.0引脚输出接扬声器。通过P3.4引脚接入中断按键,进行中断通过P0接8155外扩端口。通过8155PA口接LCD驱动电路芯片,再接显示器。8155的PB,PC口接键盘,输入歌曲号。音符产生方法:不同的音调有不同的频率。频率不同,音调也就不同。利用定时器,使其工作在模式1,定时中断,然后控制P3.0引脚的输出每次取反,就可以在P3.0的引脚输出相应的方波频率。改变计数初值,就改变了频率。定时器的定时时间等于半个周期,定时时间到就输出脉冲取反,重复此过程,就可在P3.0引脚得到一音频的脉冲。如:中音1的频率=523HZ,周期T=1/523=1912us;定时器的定时时间为:T/2=1912/2us=956us;计算得TH0,TL0的计数初值THTL=64580下面是个音符计数初值音符THTL音符编码低音50F66FH1低音60F724H2低音70F81BH3中音10F88FH4中音20F95EH5中音30FA17H6中音40FA6BH7中音50FB08H8中音60FB92H9中音70FC0EHA高音10FC4BHB高音20FCAFHC高音30FD0CHD高音40FD36HE高音50FD84HF节拍产生方法:音乐中的节拍用延时时间产生。假设1/4拍执行一次延时程序,这1/2拍就执行两次延时程序,所以只要求出1/4延时时间,其余的节拍就是他的倍数。为方便记谱,将节拍数也进行编码,如下:节拍编码节拍11/421/233/441建立曲谱编码表:编谱用8位编码,高4位代表音符,低4位代表节拍。如56中音5,中音6,都是1/2拍,则编码为:82H92H电路原理图:系统功能简介:8051八音盒具有4乘4键盘,由于选歌旋律。有LCD显示,显示当前正在播放的旋律。有中断按键,在单片机播放旋律时可以按中断暂停,再选歌曲旋律。有LED指示,其随旋律的节拍而变化。程序框图:程序清单: ORG0000H SJMPMAIN ORG0100HMAIN:SETBEA SETBEX1 ;开外部中断int0 MOVDPTR,#8000H MOVA,#30H MOVX@DPTR,A ;令8155a,b为输出,c为输入 MOVR7,#0BH ACALLSCREEN ;显示器初始化为00DISPLAY:ACALLSCAN ;扫描键盘 ACALLSCREEN ;lcd显示 CJNER7,#0FFH,NEXT ;判断中断是否选中曲目 SJMPDISPLAY ;没选中,即无按键 NEXT:ACALLMUSIC ;选中曲目在r7中CLRR7 SJMPMAIN ;再次扫描 END ORG0200H ;scan子程序SCAN:MOVDPTR,#8002H ;dptr指向b口 MOVA,#00H MOVX@DPTR,A ;使b口输出低电平 MOVDPTR,#8003H ;dptr指向pc口 MOVXA,@DPTR ;读pc口状态 ANLA,#0FH ;屏蔽高4位 CJNEA,#0FH ;若有键按下,则keyscan SJMPEXIT ;无键按下,则exitKEYSCAN:ACALLDY12MS ;延时12ms去抖动 MOVR2,#0EH ;列扫描始值给r2 MOVR3,#04H ;列数4给r3 MOVR0,#00H ;列计算器清零KEYSM1:MOVA,R2 MOVDPTR,#8002H ;dptr指向pb口 MOVX@DPTR,A ;列扫描 RLA MOVR2,A ;列扫描左移一位 MOVDPTR,#8003H ;dptr指向pc口 MOVXA,@DPTR ;读pc口行值 ANLA,#0FH ;屏蔽高4位 CJNEA,#0FH,JSADD ;若按键在本列,则jsadd INCR0 ;不在本列,r0加1 DJNER3,KEYSM1 ;未扫描完一遍,扫描下一列EXIT:MOVA,#0FFH ;若无按键按下,则a未全1 MOVR7,A SJMPDONEJSADD:JBACC.0,JSADD1 ;按键不在l0行,则jsdaa1 MOVA,#00H ;按键在l0行,行首键号00h送a AJMPJSADD4JSADD1:JBACC.1,JSADD2 MOVA,#04H AJMPJSADD4JSADD2:JBACC.2,JSADD3 MOVA,#08H AJMPJSADD4JSADD3:JBACC.3,JSADD4 MOVA,#0CHJSADD4:ADDA,R0 ;行首键号+列值送a MOVDPTR,#KEYTAB ;dptr指向键值表 MOVCA,@A+DPTR ;查表得键值送a MOVR7,ADONE:RETKEYTAB:DB01H,02H,03H,04H DB05H,06H,07H,08HDB09H,0AH,0FFH,0FFHDB0FFH,0FFH,0FFH,0FFHDY12MS:MOVR5,#18HDY12MS1:MOVR6,#0FFHDY12MS2:DJNZR6,DY12MS2DJNZR7,DY12MS1 RET ORG0300H ;screen子程序SCREEN:CJNER7,#0FFH,GO SJMPOVERGO:DECR7 MOVA,R7 MOVDPTR,#GW ;个位显示首地址送dptr MOVCA,@A+DPTR ;查个位显示数值 MOVDPTR,#8001H ;dptr指向pa口 MOVXDPTR,A ;显示个位 ACALLTIME ;延时2ms MOVA,R7 MOVDPTR,#SW ;十位显示首地址送dptr MOVCA,@A+DPTR MOVDPTR,#8001H MOVXDPTR,A ACALLTIME INCR7OVER:RETGW:DB11H,21H,31H,41H,51HDB61H,71H,81H,91H,01H,01HSW:DB02H,02H,02H,02H,02HDB02H,02H,02H,02H,12H,02HTIME:MOVR5,#04HTM2:MOVR6,#0FFHTM1:DJNZR6,TM1 DJNZT5,TM2 RET ORG0400H ;music子程序MUSIC:MOVTMOD,#01H ;设t0工作方式1 MOVIE,#82H ;开t0中断 MOV30H,#00HNEXT0:CJNER7,#01H,Q2 ;判断r7的值,若不是此值,则r2 MOVDPTR,#MUSIC1 ;若是此值,将相应旋律首地址送dptr AJMPR11Q2:CJNER7,#02H,Q3 MOVDPTR,#MUSIC2 AJMPR11Q3:CJNER7,#03H,Q4 MOVDPTR,#MUSIC3 AJMPR11Q4:CJNER7,#04H,Q5 MOVDPTR,#MUSIC4 AJMPR11Q5:CJNER7,#05H,Q6 MOVDPTR,#MUSIC5 AJMPR11Q6:CJNER7,#06H,Q7 MOVDPTR,#MUSIC6 AJMPR11Q7:CJNER7,#07H,Q8 MOVDPTR,#MUSIC7 AJMPR11Q8:CJNER7,#08H,Q9 MOVDPTR,#MUSIC8 AJMPR11Q9:CJNER7,#09H,Q10 MOVDPTR,#MUSIC9 AJMPR11Q10:CJNER7,#010H,Q11 MOVDPTR,#MUSIC10Q11:MOVA,30H MOVCA,@A+DPTR ;取旋律编码 MOVR2,A CJNEA,#00H,NEXT1 CLRTR0 RETNEXT1:MOVA,R2 ANLA,#0FH ;取节拍(低4位) MOVR5,A ;取节拍时间存入r5 MOVA,R2 SWAPA ANLA,#0FH ;取音频值(高4位) JNZA,SING ;判断音频值是否是0,是0则不发音 CLRTR0 SJMPD1SING:DECA MOVDPTR,#TABLEH ;定时器初值高8位首地址送dptr MOVCA,@A+DPTR ;查高8位初值 MOV21H,A ;高8位初值存(21h) MOVTH0,A ;装高8位初值 MOVDPTR,#TABLEL ;定时器初值低8位首地址送dptr MOVCA,@A+DPTR MOV20H,A MOVTL0,A SETBET0 ;开定时器中断 SETBTR0 ;定时器开始计时D1:LCALLDELAY CLRTR0 INC30H ;取旋律简谱码指针加1 SJMPNEXT0DELAY:MOVR6,#03 ;延时程序D2:MOVR4,#250D3:MOVR3,#50HD30:DJNZR3,D30 DJNZR4,D3 DJNZR6,D2 DJNZR5,DELAY CPLP3.1 RET ORG000BH LJMPTOSEV ORG0500HTOSEV:PUSHACC ;保护现场 PUSHPSW CLRTR0 MOVTL0,20H ;重装计数初值 MOVTH0,21H CPLP3.0 ;将p3.0位取反输出,产生音频方波 POPPSW POPACC SETBTR0 RETITABLEH:DB0F6H,0F7H,0F8H,0F8HDB0F9H,0FAH,0FAH,0FBHDB0FBH,0FCH,0FCH,0FCHDB0FDH,0FDH,0FDHTABLEL:DB6FH,24H,1BH,8FHDB5EH,17H,6BH,08HDB92H,0EH,4BH,0AFHDB0CH,36H,84HMUSIC1:DB82H,01H,81H,94H,84H,0B4H,0A4H,04HDB82H,01H,81H,94H,84H,0C4H,0B4H,04HDB82H,0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论