单片机课程设计简易电子琴设计_第1页
单片机课程设计简易电子琴设计_第2页
单片机课程设计简易电子琴设计_第3页
单片机课程设计简易电子琴设计_第4页
单片机课程设计简易电子琴设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、1 任务及要求设计一个51单片机系统,实现简易电子琴操作的电路。要求:1.设计51单片机最小系统; 2.设置至少10个按键,能发出do re mi fa sol la si do; 能播放示范曲; 3.能够调节低音、高音和中音。2设计方案1.定时/计数器的设计和状态字定义:若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将p1.0反相,然后重复计时再反相。就可在p1.0引脚上得到此频率的脉冲。利用at89c51的内部定时器使其工作计数器模式(mode1)下,改变计数值th0及tl0以产生不同频率的方法产生不同音

2、阶,例如,频率为523hz,其周期t1/5231912s,因此只要令计数器计时956s/1s956,每计数956次时将i/o反相,就可得到中音do(523hz)。计数脉冲值与频率的关系式是:nfi2fr,式中,n是计数值;fi是机器频率(晶体振荡器为12mhz时,其频率为1mhz);fr是想要产生的频率。其计数初值t的求法如下:t65536n65536fi2fr例如:设k65536,fi1mhz,求中音do(261hz)。t65536n65536fi2fr6553610000002fr65536500000/fr,中音do的t65536500000/52364580。单片机12mhz晶振,中音

3、符与计数t0相关的计数值如表所示:音符频率(hz)简谱码(t值)音符频率(hz)简谱码(t值)低1do26263628# 4 fa#74064860#1do#27763731中 5 so78464898低2re29463835# 5 so#83164934#2 re#31163928中 6 la88064968低 3 m33064021# 693264994低 4 fa34964103中 7 si98865030# 4 fa#37064185高 1 do104665058低 5 so39264260# 1 do#110965085# 5 so#41564331高 2 re117565110低

4、6 la44064400# 2 re#124565134# 646664463高 3 m131865157低 7 si49464524高 4 fa139765178中 1 do52364580# 4 fa#148065198# 1 do#55464633高 5 so156865217中 2 re58764684# 5 so#166165235# 2 re#62264732高 6 la176065252中 3 m65964777# 6186565268中 4 fa69864820高 7 si196765283采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应

5、的数据:低音019之间,中音在2039之间,高音在4059之间用单片机播放音乐,或者弹奏电子琴,实际上是按照特定的频率,输出一连串的方波。为了输出合适的方波,首先应该知道音符与频率的关系。2.音名从常见的电子琴的键盘谈起。主要分成低音、中音和高音三个区域,每个区域都有12个琴键。其中的白键,简谱音符标为1、2、3、4、5、6、7,大家一般都读成哆、来、咪、发、嗦、拉、西。按键1345678音符134567i频率值52466069878488098810483.音调数据表单片机发出不同频率的方波,人听起来,就是不同的音调。上表中的频率数值,有些过多,去掉不常用的黑键频率,只是把白键对应的数据存放

6、在单片机中,即可满足绝大部分的应用需求。定义音调数据表的程序如下: dw 63628,63835,64021,64103,64260,64400,64524 ;64580,低音区:1 2 3 4 5 6 7 dw 64580,64671,64777,64820,64898,64968,65030 65058中音区:1 2 3 4 5 6 7 dw 65058,65110,65157,65178,65217,65252,65283 65312高音区:1 2 3 4 5 6 7把这个数据表,放在程序中,需要播音的时候,就从表中取出一个数据送到定时器,当定时器溢出中断的时候,再对输出引脚取反,那么,

7、在扬声器中,即可听到上表中频率的声音。音乐的音拍,一个节拍为单位(c调)曲调值delay 曲调值delay调4/4125ms 调4/462ms调3/4187ms 调3/494ms调2/4250ms 调2/4125ms三设计电路图1.晶振部分本次采用12mhz晶振,机器周期为1us,连接两个30pf的电容,连接到的xatl1,上面,连接电路图如下:音频输出本次只是简单的使用一个蜂鸣器连接到at89c51的p1.0口上3.高。中。低及音乐播放键:检测高中低是否按下,来跳转到音阶键上输出不同频率的音阶音,检测播放是否按下,跳转到示范曲目播放4. at89c51 at89c51是一种带4k字节闪烁可编

8、程可擦除只读存储器(fperomfalsh programmable and erasable read only memory)的低电压,高性能cmos8位微处理器,俗称单片机。at89c2051是一种带2k字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用atmel高密度非易失存储器制造技术制造,与工业标准的mcs-51指令集和输出管脚相兼容。由于将多功能8位cpu和闪烁存储器组合在单个芯片中,atmel的at89c51是一种高效微控制器,。at89c单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 1主要特性:与mcs-51 兼容

9、 4k字节可编程闪烁存储器 寿命:1000写/擦循环数据保留时间:10年全静态工作:0hz-24hz三级程序存储器锁定128*8位内部ram32可编程i/o线两个16位定时器/计数器5个中断源 可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路 5.音阶键部分6.设计电路总体图样 4、 设计流程图1.音阶键识别5、程序清单keybuf equ 30h sth0 equ 31h stl0 equ 32h dely equ 33h num equ 34h org 0000h ajmp main ;跳转到主函数 org 000bh ljmp int_t0 ;音乐输出口 org 0040hmai

10、n: mov tmod,#01h ;写出计时器控制字,t0方式计时 setb ea ;开中断总开关 setb et0 ;允许t0中断 mov num,#01h;;num置1 mov r1,#00htest: ;低音检测 anl th0,#00h ;高位清零 anl tl0,#00h ;低位清零 mov a,p2 ;p2进入 cjne a,#0feh,test1 ;检测p2.0口低音键是否按下 mov dptr,#table1 ;低音键按下,进入低音表地址 ajmp wait ;跳转到音阶检测test1: ;中音检测 cjne a,#0fdh,test2 ;检测p2.0中音键是否按下 mov d

11、ptr,#table2 ;中音键按下,进入中音表地址 ajmp wait test2: ;高音检测 cjne a,#0fbh,test3 ;检测p2.0口高音键是否按下 mov dptr,#table3 ;高音键按下,进入高音表地址 ajmp wait test3: ;音乐播放检测 cjne a,#0f7h,test4 ;检测音乐播放键是否按下 若有按下则转至exit lcall delay10ms ;软件延时消抖 mov a,p2 cjne a,#0f7h,test4 ;检测播放键是否再次按下 mov a,num cjne a,#01h,exit ;检测高低中是否再次按下 mov num,#

12、00h mov dptr,#table4 ;进入音乐播放表 ajmp wait1 ;跳转至音乐播放入口 exit:clr tr0 ;计数器停止,音乐播放结束 mov r1,#00h ;清零 mov num,#01htest4: mov a,numcjne a,#01h,wait2 ljmp test ;跳转至test重新检测wait2:ljmp wait1 ;跳转至音乐播放入口wait: clr tr0 mov num,#01hscan1:mov p3,#0f0h;音阶按键检测程序入口clr tr0mov a,p3;anl a,#0f0hcjne a,#0f0h,tee1ajmp test ;

13、跳转至test重新检测tee1:lcall delay10ms ;软件延时消抖cjne a,#0f0h,tee2ajmp testtee2:mov a,#0fehscan2:mov p3,amov a,p3mov b,aanl a,#0f0hcjne a,#0f0h,carrymov a,brl acjne a,#0bfh,scan2ljmp scan1carry: anl b,#0fh ;键值处理orl a,bcjne a,#0eeh,key1 ;检测音符键1是否按下mov keybuf,#00h ;赋予键值ljmp wai ;调至按键处理程序key1:cjne a,#0edh,key2 ;

14、检测音符键2是否按下mov keybuf,#02h ;赋予键值 ljmp wai ;调至按键处理程序 key2: cjne a,#0ebh,key3 ;检测音符键3是否按下mov keybuf,#04h ;赋予键值ljmp wai ;调至按键处理程序 key3: cjne a,#0e7h,key4 ;检测音符键4是否按下mov keybuf,#06h ;赋予键值ljmp wai ;调至按键处理程序key4:cjne a,#0deh,key5 ;检测音符键5是否按下mov keybuf,#08h ;赋予键值ljmp wai ;调至按键处理程序key5:cjne a,#0ddh,key6 ;检测音

15、符键5是否按下mov keybuf,#0ah ;赋予键值ljmp wai ;调至按键处理程序key6: cjne a,#0dbh,key7 ;检测音符键6是否按下mov keybuf,#0ch ;赋予键值ljmp wai ;调至按键处理程序key7:cjne a,#0d7h,scan1 mov keybuf,#0eh ;赋予键值 ljmp wai ;调至按键处理程序 wai:mov a,keybuf ;按键处理程序入口movc a,a+dptrmov sth0 , ainc keybufmov a,keybufmovc a,a+dptrmov stl0, amov th0,sth0mov tl

16、0,stl0setb tr0lcall delay100msljmp scan1wait1:cjne r1,#00h,loop ;播放音乐程序入口loop:mov a,r1 movc a,a+dptr mov sth0,a inc r1 mov a,r1 movc a,a+dptr cjne a,#0feh,next1 mov r1,#00h ljmp loopnext1:mov stl0,ainc r1 mov a,r1 movc a,a+dptr mov dely,a mov th0,sth0 mov tl0,stl0 setb tr0 next2: ljmp delay187ms ;节拍

17、延时控制next3: djnz dely,next2 inc r1 ljmp testnokey:ljmp test ;重新检测delay10ms: mov r6,#10 ;10ms延时 d1:mov r7,#248 djnz r7,$ djnz r6,d1 ret ;子程序返回delay100ms: mov r5,#06eh;100ms延时 dl0:mov r4,#0cfh djnz r4,$ djnz r5,dl0 ret;子程序返回delay187ms: mov r3,#187 ;187ms延时 ,用于节拍控制 dl1:mov r2,#248 djnz r2,$ djnz r3,dl1

18、ljmp next3int_t0:mov th0,sth0;高8为输入 mov tl0,stl0;低8位输入 cpl p1.0;音乐输出口启用 reti;中断返回table1:db 0f8h,094h, 0f9h,05ch, 0fah,01ah, 0fah,06ah;低音调表值 db 0fbh,00h, 0fbh,08ch, 0fch,0eh, 0fch,044h; table2:db 0fch,04ah, 0fch,0aeh, 0fdh,008h, 0fdh,030h;中音调表值 db 0fdh,080h, 0fdh,0c6h, 0feh,02h, 0feh,022h; table3:db

19、0feh,02ah, 0feh,05ch, 0feh,084h, 0feh,098h;高音调表值 db 0feh,0c0h, 0feh,0e8h, 0ffh,006h, 0ffh,029h;table4:db 0fdh,80h,03h, 0fdh,80h,01h;生日快乐歌 db 0fdh,0c6h,04h, 0fdh,80h,04h db 0feh,2ah,04h, 0feh,02h,04h db 00h,00h,04h db 0fdh,80h,03h, 0fdh,80h,01h db 0fdh,0c6h,04h, 0fdh,80h,04h db 0feh,5ch,04h, 0feh,2ah

20、,04h db 00h,00h,04h db 0fdh,80h,03h, 0fdh,80h,01h; db 0feh,0c0h,04h, 0feh,84h,04h; db 0fdh,0c6h,04h, 0feh,80h,04h db 0fdh,0c6h,04h db 0feh,98h,03h, 0feh,98h,01h db 0feh,84h,04h, 0feh,2ah,04h db 0feh,5ch,04h, 0feh,2ah,04h db 00h,00h,04h db 0feh,0feh en6、 心得体会本次单片机课程设计,本身题目并没有多大难度,但对初学者得我来说还是有些小困难,但经过理论知识的进一步学习,查阅了大量资料之后,了解了设计思路,在参考了网上的一些程序及类似作品之后,仍将它安老师要求做了出来,中间花费了很大功夫,对程序及电路图做了多次修改,终于,一份还算令自己满意的完成品诞生了!本次简易单片机设计,要求是能发出八个音阶声

温馨提示

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

评论

0/150

提交评论