




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机课程设计一、设计指标:(1)设计一个(44)的键盘,并将16个键设计成16个音;(2)可弹奏想要表达的音乐;(3)该电子琴包含1首示例音乐,接通电源可播放示例音乐。二、设计要求:(1)按设计指标进行电路设计;(2)列出音阶与单片机定时器输出频率关系表格;(3)制作符合设计指标的硬件电路。三、设计说明:电子琴是高科技在音乐领域的一个代表,它是古典文化与现代文明的一个浓缩体。它不但可以帮助我们的音乐教师进行传统音乐文化的教育教学工作,而且由于它又具备现代音乐,特别是电子音乐、电脑音乐的基本结构、特征,因而使我们的教师在进行现代音乐、电子音乐、电脑音乐的教学时,更直接、更简便。单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。它的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用at89c51单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个弹奏按键、1个播放键和扬声器。四、设计简单原理介绍一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器t0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将p1.0反相,然后重复计时再反相。就可在p1.0引脚上得到此频率的脉冲。 利用at89c51的内部定时器使其工作计数器模式(mode1)下,改变计数值th0及tl0以产生不同频率的方法产生不同音阶,例如,频率为523hz,其周期t1/5231912s,因此只要令计数器计时956s/1s956,每计数956次时将i/o反相,就可得到中音do(523hz)。 计数脉冲值与频率的关系式(如式3-1所示)是: nfi2fr 3-1式中,n是计数值;fi是机器频率(晶体振荡器为12mhz时,其频率为1mhz);fr是想要产生的频率。其计数初值t的求法如下: t65536n65536fi2fr 例如:设k65536,fi1mhz,do(523hz)的计数值。 t65536n65536fi2fr6553610000002fr65536500000/f do的t65536500000/52364580 单片机12mhz晶振,高中低音符与计数t0相关的计数值如表4-2所示 表3-2 音符频率表低音音符频率hz中音音符频率hz高音音符频率hz1261.631523.2511045.52293.672587.3321174.663329.633659.4631318.514349.234698.4641396.925391.995738.9951567.986440.006880.0061760.007493.887987.7671975.52 我们要为这个音符建立一个表格,单片机通过查表的方式来获得相应的数据 低音019之间,中音在2039之间,高音在4059之间 table: dw 0,63628,63835,64021,64103,64260,64400,64524,0,0 dw 0,63731,63928,0,64185,64331,64463,0,0,0 dw 0,64580,64684,64777,64820,64898,64968,65030,0,0dw 0,64633,64732,0,64860,64934,64994,0,0,0 dw 0,65058,65110,65157,65178,65217,65252,65283,0,0 dw 0,65085,65134,0,65198,65235,65268,0,0,0 dw 0 在这个程序中,弹奏音乐的程序是用定时/计数器t0来完成的,播放音乐程序则是用定时/计数器t1来完成的。五、软件总体方案及设计流程(1)键盘扫描程序:检测是否有键按下,有键按下则记录按下键的键值,并跳转至功能转移程序;无键按下,则返回键盘扫描程序继续检测 (2)功能转移程序:对检测到得按键值进行判断,是琴键则跳转至琴键处理程序,是功能键则跳转至相应的功能程序,我们设计的功能程序有两种,即音色调节功能和自动播放乐曲功能(3)琴键处理程序:根据检测到得按键值,查询音律表,给计时器赋值,使发出相应频率的声音(4)自动播放歌曲程序:检测到按键按下的是自动播放歌曲功能键后执行该程序,电子琴会自动播放事先已经存放好的歌曲,歌曲播放完毕之后自动返回至键盘扫描程序,继续等待是否有键按下程序简易流程图开始键盘扫描程序t0初始化并开中断允许t0中断t1初始化并开中断允许t1中断有键按下否 否延时去抖动识别按键功能 是是否弹奏键播放键 否 是取相应的音符码装入t1根据按键功能装入相应音符值到t0启动t1启动t0按键释放成功否按键释放成功否停止t0工作停止t1工作弹奏程序流程图弹奏子程序开中断并允许中断设定定时器工作方式取键值根据键值查音律表给定时器t0赋值开始计时进入中断cpl p3.0 p3.0退出中断延时返回键盘扫描程序自动播放歌曲程序流程图自动播放音乐程序a 0,dptr歌谱地址开中断,设定定时器t1工作模式取简谱码取该音符的节拍码stopa=0 y n休止符返回键盘扫描a=0ffh y n查音律表,给定时器赋值 inc dptr开始计时进入中断cpl3.0退出中断延时六、硬件总体方案及说明51单片机p1口通过连接4*4的矩阵键盘,作为琴键键盘;p2.0接播放音乐键;p3.0口接喇叭,通过执行相应的功能程序使电子琴发出不同音色的声音。(一)芯片介绍:在本次电子琴设计中,我们组成员单片机芯片选用了at89c51芯片,而89c51系列的兼容性也比较好。p3口也可作为at89c51的一些特殊功能口,如下表所示:p3口引脚特殊功能p3.0rxd(串行输入口)p3.1txd(串行输出口)p3.2(外部中断0)p3.3(外部中断1)p3.4t0(定时器0外部输入)p3.5t1(定时器1外部输入)p3.6wr(外部数据存储器写选通)p3.7rd(外部数据存储器读先通)p3口同时为闪烁编程和编程校验接收一些控制信号。(二)硬件接线:(1)利用p1口为按键接入口,形成44组成16个按键矩阵,设计成16个音,下图所示:0123456789abcdef所对应的键码为: (2)p3.0口音频输出,接一个喇叭。(3)复位电路我们本来在方案选择的时候有两种选择的,上电复位和按扭复位,上电复位是利用电容充电来实现的,而按扭复位是电源对外节电容的充电使rst为高电平,复位松开后,电容通过下拉电阻放电,使rst恢复低电平。为了制作软件的方便我们还是选择用按扭复位,因为它比较直观。(4)电路设计图如下:七、设计仪器、设备和材料清单主要仪器设备:个人计算机和相关的软件主要元器件: 独立按键16个单片机芯片at80c51一片12mhz晶振一个s8550三极管一个不同阻值电阻数个开关一个usb电源插口一个喇叭一个10uf、30pf电容数个电路板一块电烙铁一个等八、设计源程序buff equ 30hsth0 equ 31hstl0 equ 32htemp equ 33h org 00h ljmp start org 0bh ljmp int_t0 org 001bh ljmp tim1start: mov tmod,#01h ;设置t0工作方式 setb et0 setb ea ;启动t0main: mov p1,#0ffh ;p1全置1 clr p1.4 ;开始扫描第一行 mov a,p1 anl a,#0fh ;屏蔽高四位 xrl a,#0fh ;低位 有”0”则有键按下,否则无 jz kkey1 ; 判断有无键按下,有则继续,没有则转移到kkey1 lcall dely10ms ;调用延时程序 mov a,p1 ;重新开始判断有无键按下 anl a,#0fh xrl a,#0fh jz kkey1 mov a,p1 anl a,#0fh ;求键值 cjne a,#0eh,ckk1 ;相等说明该行第一列有键按下,不等则转移 mov buff,#0 ;该键值为0 ljmp ndk1 ;跳到ndk1执行相应的功能程序ckk1: cjne a,#0dh,kk2;相等说明该行第二列有键按下,不等则转移 mov buff,#1;该键值为1 ljmp ndk1;跳到ndk1执行相应的功能程序kk2: cjne a,#0bh,kk3;相等说明该行第三列有键按下,不等则转移 mov buff,#2;该键值为2 ljmp ndk1;跳到ndk1执行相应的功能程序kk3: cjne a,#07h,kk4;相等说明该行第四列有键按下,不等则转移 mov buff,#3;该键值为2 ljmp ndk1;跳到ndk1执行相应的功能程序kk4: nopndk1: mov a,buff mov dptr,#table movc a,a+dptr mov p0,a mov a,buff mov b,#2 mul ab mov temp,a mov dptr,#table1 movc a,a+dptr mov sth0,a mov th0,a inc temp mov a,temp movc a,a+dptr mov stl0,a mov tl0,a setb tr0ndk1a: mov a,p1 anl a,#0fh xrl a,#0fh jnz ndk1a clr tr0kkey1: mov p1,#0ffh ;开始扫描第二行 clr p1.5 mov a,p1 anl a,#0fh xrl a,#0fh jz kkey2 lcall dely10ms mov a,p1 anl a,#0fh xrl a,#0fh jz kkey2 mov a,p1 anl a,#0fh cjne a,#0eh,kk5 mov buff,#4 ljmp ndk2kk5: cjne a,#0dh,kk6 mov buff,#5 ljmp ndk2kk6: cjne a,#0bh,kk7 mov buff,#6 ljmp ndk2kk7: cjne a,#07h,kk8 mov buff,#7 ljmp ndk2kk8: nopndk2: mov a,buff mov dptr,#table movc a,a+dptr mov p0,a mov a,buff mov b,#2 mul ab mov temp,a mov dptr,#table1 movc a,a+dptr mov sth0,a mov th0,a inc temp mov a,temp movc a,a+dptr mov stl0,a mov tl0,a setb tr0ndk2a: mov a,p1 anl a,#0fh xrl a,#0fh jnz ndk2a clr tr0kkey2: mov p1,#0ffh ;开始扫描第三行 clr p1.6 mov a,p1 anl a,#0fh xrl a,#0fh jz kkey3 lcall dely10ms mov a,p1 anl a,#0fh xrl a,#0fh jz kkey3 mov a,p1 anl a,#0fh cjne a,#0eh,kk9 mov buff,#8 ljmp ndk3kk9: cjne a,#0dh,kk10 mov buff,#9 ljmp ndk3kk10: cjne a,#0bh,kk11 mov buff,#10 ljmp ndk3kk11: cjne a,#07h,kk12 mov buff,#11 ljmp ndk3kk12: nopndk3: mov a,buff mov dptr,#table movc a,a+dptr mov p0,a mov a,buff mov b,#2 mul ab mov temp,a mov dptr,#table1 movc a,a+dptr mov sth0,a mov th0,a inc temp mov a,temp movc a,a+dptr mov stl0,a mov tl0,a setb tr0ndk3a: mov a,p1 anl a,#0fh xrl a,#0fh jnz ndk3a clr tr0kkey3: mov p1,#0ffh;开始扫描第四行 clr p1.7 mov a,p1 anl a,#0fh xrl a,#0fh jz kkey4 lcall dely10ms mov a,p1 anl a,#0fh xrl a,#0fh jz kkey4 mov a,p1 anl a,#0fh cjne a,#0eh,kk13 mov buff,#12 ljmp ndk4kk13: cjne a,#0dh,kk14 mov buff,#13 ljmp ndk4kk14: cjne a,#0bh,kk15 mov buff,#14 ljmp ndk4kk15: cjne a,#07h,kk16 mov buff,#15 ljmp ndk4kk16: nopndk4: mov a,buff mov dptr,#table movc a,a+dptr mov p0,a mov a,buff mov b,#2 mul ab mov temp,a mov dptr,#table1 movc a,a+dptr mov sth0,a mov th0,a inc temp mov a,temp movc a,a+dptr mov stl0,a mov tl0,a setb tr0ndk4a: mov a,p1 anl a,#0fh xrl a,#0fh jnz ndk4a clr tr0kkey4: mov a,#0ffhmov p2,a mov a,p2jb acc.0, kkey5lcall dely10msmov a,p2jb acc.0, kkey5mov buff,#16ljmp start22start22: mov a,buffcjne a,#16,kkey5ljmp start2kkey5: ljmp main start2: mov tmod,#10h ;设t1在m1 mov ie,#88h ;中断使能 start0: mov 30h,#00 ;取简谱码指针 next: mov a,30h ;简谱码指针载入a mov dptr,#tab ;至tab取简谱码 movc a,a+dptr ;mov r2,a ;渠道的简谱码暂存于r2 jz end0 ;是否渠道00(结束码) anl a,#0fh ;不是,则取低4位(节拍码) mov r5,a ;将节拍码存入r5 mov a,r2 ;将取到的简谱码再载入a swap a ;高低4位交换 anl a,#0fh ;取低4位(音符码) jnz sing ;取到的音符码是否为0? clr tr1 ;开始,则不发音 sjmp d1 ;跳至d1 sing: dec a ;取到的音符码减1(不含0) mov 22h,a ;存入(22h) rl a ;乘2 mov dptr,#tab1 ;至table1取相对的高位字节计数值 movc a,a+dptr ; mov th1,a ;取到的高位字节存入th0 mov 21h,a ;取到的高位字节存入(21h) mov a,22h ;在载入取到的音符码 rl a ;乘2 inc a ;加1 movc a,a+dptr ;至table1取相对的低位字节计数值 mov tl1,a ;取到的低位字节存入tl0 mov 20h,a ;取到的低位字节存入(20h) setb tr1 ;启动timer0d1: lcall delay ;其本单位时间1/4拍187毫秒 inc 30h ;取简谱码指针加1 jmp next ;取下一个简谱码 end0: clr tr1 ;停止timer0 ljmp main ;重复循环 tim1: push acc ;将a的值暂存于堆栈 push psw ;将psw的值暂存于堆栈 mov tl1,20h ;重设计数值 mov th1,21h ; cpl p3.0 ;将p1.0位反相,控制蜂鸣器发声 pop psw ;至堆栈取回psw的值 pop acc ;至堆栈取回a的值 reti delay:mov r7,#02 d2: mov r4,#187 d3: mov r3,#248 djnz r3,$ djnz r4,d3 djnz r7,d2 ret dely10ms: mov r6,#10d10: mov r7,#248 djnz r7,$ djnz r6,d10 retint_t0: mov th0,sth0 mov tl0,stl0 cpl p3.0 retitable: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h db 7fh,6fh,77h,7ch,39h,5eh,79h,71htable1: dw 64021,64103,64260,64400 dw 64524,64580,64684,64777 dw 64820,64898,64968,65030 dw 65058,65110,65157,65178 tab1: ;决定节拍 dw 64260,64400,64521,64580 dw 64684,64777,64820,64898 dw 64968,65030,65058,65110 dw 65157,65178,65217 tab: ;乐曲名称梁祝 db 02h,82h,62h,52h,48h,02h,52h,32h,22h,18h db 83h,91
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小导管注浆施工工艺流程图
- 2025年陶瓷分离膜及功能隔膜项目申请报告模板
- 《彩色的梦》课件 部编人教版二年级下册
- 《职业素养》课件 模块5-8 绿色技能 -职业发展素养
- 汽车传感器与检测技术电子教案:流量传感器工作原理
- 创伤性脊柱脊髓损伤康复治疗专家共识
- 商场员工关系管理制度
- 咖啡书屋公司管理制度
- 安徽省安庆、池州、铜陵三市2022-2023学年高二下学期化学期末检测试题(含答案)
- 仓库公司推广活动方案
- 万达集团管理制度汇编-项目管理制度
- 比较中国的单一制和美国的联邦制
- GB/T 4457.2-2003技术制图图样画法指引线和基准线的基本规定
- GB/T 28270-2012智能型阀门电动装置
- 医院搬迁方案
- “化危为安”线上讲堂第70期 加强化工过程安全管理 实现安全治理模式向预防转型
- 威索WM系列燃烧机调试步骤
- 软土地基处理新技术课件
- 幼儿园精选优质公开课:中班音乐游戏-快乐的小青蛙(第十届)
- 2022年天津市南开区小升初数学试卷
- (100+170+100)m变截面三向预应力连续刚构桥挂篮悬臂浇筑法施工方案49页
评论
0/150
提交评论