《单片机课程设计电子琴.doc》由会员分享,可在线阅读,更多相关《单片机课程设计电子琴.doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、长春工业大学课程设计说明书课程设计名称 单片机原理课程设计() 专 业 电气工程及其自动化 班 级 学 生 姓 名 指 导 教 师 2013年1月7日 课程设计任务书课程设计题目: 电子琴起止日期:2013.1 .7-2013.1.11设计地点:单片机原理实验室设计任务及日程安排: 着重提高学生在单片机应用方面的实践技能,树立严谨的科学作风,培养学生综合运用理论知识解决实际问题的能力。学生通过单片机和硬件和软件设计、安装、调试、整理资料等环节,初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。设计要求:1) 根据应用系统的要求,初步掌握总体结构设计的方法和构思,从中选
2、择一种最佳设计方案;2) 根据应用系统结构规模的要求,掌握单片机外部扩充系统硬件设计的基本过程; 3) 根据任务要求和硬件设计要求,首先画出程序的总体流程图,然后进行各控制模块的程序设计; 4) 掌握如何应用单片机仿真器来开发应用系统及仿真调试的过程。参考资料:1.单片机原理及应用 张毅刚等编,高等教育出版社,2004年1月。2.单片机原理课程设计实验指导书,林志奇,校内印刷,2012年12月。日程安排: 201317上午 动员/布置任务/分组/查资料。 201317下午201319 进行理论设计和形成设计报告。 20131102011110 进行实验和完成实验报告。 2013111 分组进行
3、考核。设计报告的总体要求: 每人独立完成设计内容,并提交一份课程设计报告。报告内容包括:设计题目/设计要求/设计方案/硬件电路/软件流程图/程序/工作原理阐述/系统性能分析和心得体会等。考核办法:1) 出勤20%;2) 实验结果30%;3) 报告20%;4) 答辩30%。1 设计内容:电子琴2 任务及要求: 设计一个51单片机系统,实现简易电子琴操作的电路。 要求: 1.设计51单片机最小系统; 2.设置至少10个按键,能发出do re mi fa sol la si do; 能播放示范曲; 3.能够调节低音、高音和中音。3 总体设计方案: 1)定时/计数器的设计和状态字定义: 若要产生音频脉
4、冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。就可在P1.0引脚上得到此频率的脉冲。利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T1/5231912s,因此只要令计数器计时956s/1s956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。计数脉冲值与频率的关系式是:Nfi2fr,式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr
5、是想要产生的频率。其计数初值T的求法如下:T65536N65536fi2fr例如:设K65536,fi1MHz,求中音DO(261Hz)。T65536N65536fi2fr655362fr65536/fr,中音DO的T65536/52364580。单片机12MHZ晶振,中音符与计数T0相关的计数值如表所示:音符频率(HZ)简谱码(T值)音符频率(HZ)简谱码(T值)低1DO26263628# 4 FA#74064860#1DO#27763731中 5 SO78464898低2RE29463835# 5 SO#83164934#2 RE#31163928中 6 LA88064968低 3 M33
6、064021# 693264994低 4 FA34964103中 7 SI98865030# 4 FA#37064185高 1 DO104665058低 5 SO39264260# 1 DO#110965085# 5 SO#41564331高 2 RE117565110低 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#
7、166165235# 2 RE#62264732高 6 LA176065252中 3 M65964777# 6186565268中 4 FA69864820高 7 SI196765283采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据:低音019之间,中音在2039之间,高音在4059之间,用单片机播放音乐,或者弹奏电子琴,实际上是按照特定的频率,输出一连串的方波。为了输出合适的方波,首先应该知道音符与频率的关系。2)音名主要分成低音、中音和高音三个区域,每个区域都有12个琴键。其中的白键,简谱音符标为1、2、3、4、5、6、7,大家一般都读成哆、
8、来、咪、发、嗦、拉、西。按键1234567音符1234567频率值52466069878488098810483)音调数据表 单片机发出不同频率的方波,人听起来,就是不同的音调。上表中的频率数值,有些过多,去掉不常用的黑键频率,只是把白键对应的数据存放在单片机中,即可满足绝大部分的应用需求。定义音调数据表的程序如下: 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
9、 65058,65110,65157,65178,65217,65252,65283 65312高音区:1 2 3 4 5 6 7把这个数据表,放在程序中,需要播音的时候,就从表中取出一个数据送到定时器,当定时器溢出中断的时候,再对输出引脚取反,那么,在扬声器中,即可听到上表中频率的声音。音乐的音拍,一个节拍为单位(C调)曲调值DELAY 曲调值DELAY调4/4125ms 调4/462ms调3/4187ms 调3/494ms调2/4250ms 调2/4125ms4、系统硬件设计:1)晶振部分本次采用12MHZ晶振,机器周期为1us,连接两个30pF的电容,连接到的XATL1,上面,连接电路图
10、如下:2)音频输出本次只是简单的使用一个蜂鸣器连接到AT89C51的p1.0口上3)高、中、低及音乐播放键:检测高中低是否按下,来跳转到音阶键上输出不同频率的音阶音,检测播放是否按下,跳转到示范曲目播放4)AT89C51 AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造
11、技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 1主要特性:与MCS-51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源 可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路 5)音阶键部分6) 设计电路总体图样5、 系统软件设计:1)音阶键识别将相应的freq附
12、值相应的灯亮Esm置0 TR1置0Esm置1 TR1置1Esm=1?相应的数值n加减do re mi fa sol la si TR0置1 TR1置0 执行T0中断节拍延时Esm=1?TR0置0检测是high ave low 键按下示范音按下?UP DOWN键按下?是do re mi fa sol la si do?是否有按键按下 开始 N Y Y N Y N Y N Y N Y N N Y 返回6、程序清单:KEYBUF EQU 30H STH0 EQU 31H STL0 EQU 32H DELY EQU 33H NUM EQU 34H ORG 0000H AJMP MAIN ;跳转到主函数
13、 ORG 000BH LJMP INT_T0 ;音乐输出口 ORG 0040HMAIN: 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: ;中音
14、检测 CJNE A,#0FDH,TEST2 ;检测P2.0中音键是否按下 MOV DPTR,#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,N
15、UM CJNE A,#01H,EXIT ;检测高低中是否再次按下 MOV NUM,#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,
16、P3;ANL A,#0F0HCJNE A,#0F0H,TEE1AJMP TEST ;跳转至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 ;赋予键值
17、LJMP WAI ;调至按键处理程序KEY1:CJNE A,#0EDH,KEY2 ;检测音符键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 ;赋予键值LJM
18、P WAI ;调至按键处理程序KEY5:CJNE A,#0DDH,KEY6 ;检测音符键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,KEYBUF
19、MOVC A,A+DPTRMOV STL0, AMOV TH0,STH0MOV TL0,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 TL
20、0,STL0 SETB TR0 NEXT2: LJMP DELAY187MS ;节拍延时控制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延时 ,用于节
21、拍控制 DL1:MOV R2,#248 DJNZ R2,$ DJNZ R3,DL1 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,
22、0FDH,0C6H, 0FEH,02H, 0FEH,022H; TABLE3:DB 0FEH,02AH, 0FEH,05CH, 0FEH,084H, 0FEH,098H;高音调表值 DB 0FEH,0C0H, 0FEH,0E8H, 0FFH,006H, 0FFH,029H; SONG1: ; 化蝶 .DB -3, 04H, -5, 03H, -6, 01H, 1, 03H, 2, 01H, -6, 01H, 1, 01H, -5, 02H .DB 5, 03H, +1, 01H, 6, 01H, 5, 01H, 3, 01H, 5, 01H, 2, 08H .DB 2, 02H, 2, 01H
23、, 3, 01H, -7, 02H, -6, 02H, -5, 03H, -6, 01H, 1, 02H, 2, 02H .DB -3, 02H, 1, 02H, -6, 01H, -5, 01H, -6, 01H, 1, 01H, -5, 08H .DB 3, 03H, 5, 01H, -7, 03H, 2, 01H, -6, 01H, 1, 01H, 5, 05H .DB -3, 02H, -5, 01H, -3, 01H, -5, 01H, -6, 01H, -7, 01H, 2, 01H, -6, 06H, -5, 01H, -6, 01H.DB 1, 03H, 2, 01H, 5,
24、02H, 3, 02H, 2, 02H, 3, 01H, 2, 01H, 1, 02H, -6, 7、 系统工作过程:采用16个键分别代表16个音,通过对按键的随意按键从而产生不同的音乐,主要是通过每个按键所产生的频率不同来使得发出的各个音不同,从而产生音乐,根据程序首先对低音,中音,高音进行检测;运用延时、循环、跳转等设计实验;然后通过对音符键的控制发出do re mi fa sol la si do8、 功能实现分析:这次设计的是一个游戏型的电子琴,通过对程序的改进和利用单片机的功能特性,最后通过仿真,我们实现了电子琴的功能,所以这个设计是可行的。9、 设计心得: 通过这次课程设计,系统而
25、比较全面地检查了我所学的专业知识,补充了我未学的专业知识,对一个产品的开发的步骤有一定的认识。“查漏补缺”的同时进一步巩固了专业知识,锻炼了自己,让我深刻的意识到理论学习和实践相结合的重要性,在这次课程设计中,查阅了大量的资料,并在此基础上加以了改进并进行了创新,同时对延时,循环等设计方法有了更深的了解。提高了我们学习分析和解决问题的能力,只要我们不因为困难而害怕困难,最后我们就能够取得最后的成功。最后,通过这次的自主完成单片机的应用系统设计,虽说不完全是自己完成,但是至少有一点,让我们学会了如何去完成一个设计报告,让我更进一步了解了单片机,也让我感受到做出一个设计的开心,喜悦与担心。相信这对以后的毕业设计也会有很大的帮助。