1、目录1、设计名称-22、设计任务指标-23、设计主要说明-24、实验仪器设备-25、主要原件功能-26、设计主要原理-47、设计的主要流程-5 (1)软件总体方案及设计流程-5(2)程序简易流程图-5(3)电路设计原理图-8(4)电路PCB板图-9(5)设计程序 -98、设计总结-16一、 设计名称电子琴的简易制作二、(1)设计指标:1)设计一个(44)的键盘,并将16个键设计成16个音;2)可弹奏想要表达的音乐;3)该电子琴包含1首示例音乐,接通电源可播放示例音乐。(2)、设计要求:1)按设计指标进行电路设计;2)列出音阶与单片机定时器输出频率关系表格;3)制作符合设计指标的硬件电路。三、设
2、计说明:电子琴是高科技在音乐领域的一个代表,它是古典文化与现代文明的一个浓缩体。它不但可以帮助我们的音乐教师进行传统音乐文化的教育教学工作,而且由于它又具备现代音乐,特别是电子音乐、电脑音乐的基本结构、特征,因而使我们的教师在进行现代音乐、电子音乐、电脑音乐的教学时,更直接、更简便。单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。它的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演
3、着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89C51单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个弹奏按键、1个播放键和扬声器。四、设计仪器、设备和材料清单主要仪器设备:个人计算机和相关的软件主要元器件: 独立按键18个单片机芯片AT80C51一片12MHz晶振一个2N3906三极管一个不同阻值电阻数个开关一个USB电源插口一个喇叭一个不同数值电容数个电路板一块五、主要原件功能(1)AT89C51单片机及其引脚说明AT89C51是
4、一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51主要特性:8031 CPU与MCS-51 兼容 4K字节可编程FLASH存储器(寿命:1000写/擦循环) 全静态工作:0Hz-24KH 三级程序存储器保密锁定 128*8位内部RAM 32条可编程I/O线 两个16位定时器/计数器
5、6个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路(2)、4X4行列式键盘识别及显示组成键盘的按键有机械式、电容式、导电橡胶式、薄膜式多种,但不管什么形式,其作用都是一个使电路接通与断开的开关。目前微机系统中使用的键盘按其功能不同,通常可分为编码键盘和非编码键盘两种基本类型。 编码键盘:键盘本身带有实现接口主要功能所需的硬件电路。不仅能自动检测被按下的键,并完成去抖动、防串键等功能,而且能提供与被按键功能对应的键码(如ASCII码)送往CPU。所以,编码键盘接口简单、使用方便。但由于硬件电路较复杂,因而价格较贵。 非编码键盘:键盘只简单地提供按键开关的行列矩阵。有关按键的
6、识别、键码的确定与输入、去抖动等功能均由软件完成。目前微机系统中,一般为了降低成本大多数采用非编码键盘。 键盘接口必须具有去抖动、防串键、按键识别和键码产生4个基本功能。 (1)去抖动:每个按键在按下或松开时,都会产生短时间的抖动。抖动的持续时间与键的质量相关,一般为520mm。所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。去抖问1 题可通过软件延时或硬件电路解决。 (2)防串键:防串键是为了解决多个键同时按下或者前一按键没有释放又有新的按键按下时产生的问题。常用的方法有双键锁定和N键轮回两种方法。双键锁定,是当有两个或两个以上的按键按下时,只
7、把最后释放的键当作有效键并产生相应的键码。N键轮回,是当检测到有多个键被按下时,能根据发现它们的顺序依次产生相应键的键码。 (3)被按键识别:如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。常用的方法有行扫描法和线反转法两种。行扫描法的基本思想是,由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方法在微机系统中被广泛使用。线反转法的基本思想是通过行列颠倒两次扫描来识别闭合键,为此需要提供两个可编程的双向输入/输出端口。 (4)键码产生:为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通过查表获得被按键的
8、键码。2 用AT89S51的并行口P0接44矩阵键盘,以P0.0P0.3作输入线,以P0.4P0.7作输出线;在数码管上显示每个按键的“0F”序号。六、设计简单原理介绍一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重
9、复计时再反相。就可在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,fi1M
10、Hz,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
11、.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,652
12、17,65252,65283,0,0 DW 0,65085,65134,0,65198,65235,65268,0,0,0 DW 0 在这个程序中,弹奏音乐的程序是用定时/计数器T0来完成的,播放音乐程序则是用定时/计数器T1来完成的。七、设计的主要流程(1)软件总体方案及设计流程1)键盘扫描程序:检测是否有键按下,有键按下则记录按下键的键值,并跳转至功能转移程序;无键按下,则返回键盘扫描程序继续检测 2)功能转移程序:对检测到得按键值进行判断,是琴键则跳转至琴键处理程序,是功能键则跳转至相应的功能程序,我们设计的功能程序有两种,即音色调节功能和自动播放乐曲功能3)琴键处理程序:根据检测到得按
13、键值,查询音律表,给计时器赋值,使发出相应频率的声音4)自动播放歌曲程序:检测到按键按下的是自动播放歌曲功能键后执行该程序,电子琴会自动播放事先已经存放好的歌曲,歌曲播放完毕之后自动返回至键盘扫描程序,继续等待是否有键按下(2)程序简易流程图1)主程序:开始键盘扫描程序T0初始化并开中断允许T0中断T1初始化并开中断允许T1中断有键按下否 否延时去抖动识别按键功能 是是否弹奏键播放键 否 是取相应的音符码装入T1根据按键功能装入相应音符值到T0启动T1启动T0按键释放成功否按键释放成功否停止T0工作停止T1工作 2)弹奏程序流程图:弹奏子程序开中断并允许中断设定定时器工作方式取键值根据键值查音
14、律表给定时器T0赋值开始计时进入中断CPL P3.0 P3.0退出中断延时返回键盘扫描程序3)自动播放歌曲程序流程图:自动播放音乐程序A 0,DPTR歌谱地址开中断,设定定时器T1工作模式取简谱码取该音符的节拍码STOPA=0 Y N休止符返回键盘扫描A=0FFH Y N查音律表,给定时器赋值 INC DPTR开始计时进入中断CPL3.0退出中断延时(3)电路设计原理图如下:(4)、PCB电路图如下:(5)、设计源程序PORT1 EQU P1PORT2 EQU P2SCK BIT P3.0SDA BIT P3.1 ORG 0H SJMP MAIN ORG 0BH LJMP TIME0 ORG
15、1BH LJMP TIME1 ORG 30HMAIN: CLR TR0 CLR TR1 MOV SP,#4FH MOV R0,#100 CLR P3.4 LCALL DELAY5 MOV 9H,#0 MOV 0AH,#0 MOV 0BH,#0 MOV 0CH,#0 MOV TMOD,#11H MOV IE,#8AH MOV 0DH,#88HXIAN: JB P3.2,QT1 ;没按下放歌建跳qt1 SETB P3.4 ;按下放歌建LED发光 LCALL DELAY1 LCALL DELAY1 JNB P3.2,$ ;放歌建没释放原地等待 LCALL DELAY1 LCALL DELAY1Q1:
16、 LCALL SAO CJNE R0,#0,Q11 SJMP Q1Q11: LCALL TRANF JZ MAIN MOV 0DH,A ;0DH=按键值 LJMP SING0QT1: JB P3.3,QT4 ;没按弹奏建跳QT3 SETB P3.4 LCALL DELAY1 LCALL DELAY1 JNB P3.3,$ ;弹奏键没释放原地等待 LCALL DELAY1 LCALL DELAY1QT2: LCALL SAO CJNE R0,#0,QT3 SJMP QT2QT3: LCALL TRANF CJNE A,#0BH,QT11 ;若按键值=11转(B键)MAIN;!=11键转QT11
17、LJMP MAINQT11: JC MAIN ;若按键值11继续 CJNE A,#0CH,M4 ;若按键值!=12转M1;=12(C键)继续 ;即C键没按下转M1 MOV PORT1,#11101111B JNB P1.3,$ ;若C键没释放原地等待 MOV 0BH,#0 LJMP LOOP ;输入乐曲存储并演奏M4: LCALL DELAY1 LCALL DELAY1 LCALL RWX80 ;擦写内存数据;全部为1 LJMP MAINQT4: LJMP XIAN ;返回重新扫描放歌和弹奏建RWX80: CJNE A,#0DH,MM2 ;A!=13(D键)转M2;若为D键继续;D键没按下转M
18、2 MOV 0EH,#0A2H ;0EH=162=10100010B;0EH为24c16页地址 SJMP MMMM2: CJNE A,#0EH,MM3 ;A!=14(E键)转M3;E键没按下转M3 MOV 0EH,#0A4H ;0EH=164=10100100B SJMP MMMM3: MOV 0EH,#0A6H ;F键按下;0EH=166=10100110BMM: MOV 0BH,#0 MOV 0CH,#0HRWX801: LCALL RKX02 LCALL WKX02 INC 0BH INC 0BH INC 0BH INC 0BH MOV A,0BH CJNE A,#0FFH,MM4 MO
19、V 0BH,#0MM4: INC 0CH INC 0CH INC 0CH INC 0CH CJNE A,#0H,RWX801 RET; RKX02: LCALL START MOV A,#0A0H ;24C16寻址10100000写 LCALL WRBYT LCALL TACK MOV A,0BH ;发送24c16子地址 LCALL WRBYT LCALL TACK LCALL START MOV A,#0A1H ;24C16寻址10100001读 LCALL WRBYT LCALL TACK ;LCALL WRBYT ;LCALL TACK MOV 10H,R6 LCALL RDBYT LC
20、ALL NOTACK ;LCALL WRBYT ;LCALL TACK MOV 11H,R6 LCALL RDBYT LCALL NOTACK ;LCALL WRBYT ;LCALL TACK MOV 12H,R6 LCALL RDBYT LCALL TACK MOV 13H,R6 LCALL NOTACK LCALL STOP RET; WKX02: MOV R1,#10H LCALL START MOV A,#0A0H LCALL WRBYT LCALL TACK MOV A,0BH LCALL WRBYT LCALL TACK MOV A,0CH LCALL WRBYT LCALL TA
21、CK MOV R0,#4WKX021: MOV A,R1 LCALL WRBYT LCALL TACK INC R1 DJNZ R0,WKX021 LCALL STOP LCALL DELAY5 LCALL DELAY5 RET; LOOP: CLR TR0 CLR TR1AAA: JB P3.3,LOOP4 ;弹奏键按下 向下执行存储乐曲并演奏 否则转LOOP4继续输入乐曲 LCALL DELAY1 LCALL DELAY1 MOV 0CH,#0 LCALL WBAY ;存00结束乐谱 LCALL DELAY1 MOV 0DH,#12 LJMP SING0 ;播放弹奏的乐曲LOOP4: LC
22、ALL SAO CJNE R0,#0,KEYIN LJMP LOOPKEYIN: LCALL TRANF SWAP A MOV 09H,A SWAP A CJNE A,#0,ZZZ ;非0键转ZZZ CLR TR1 CLR TR0 LJMP ZZZZ ;0键转ZZZZZZZ: DEC A ;A为按键值;因从1键值音调序号对应TABLE频率表0位置;故减1 MOV 22H,A ;22H存修正后(A=A-1)的按键值 CLR C RLC A ;A*2因TABLE一个单元为2字节(1字),指向该单元的第1个字节 MOV DPTR,#TABLE MOVC A,A+DPTR MOV TH1,A ;TH1
23、赋初值 MOV 21H,A ;TH1初值存21H MOV A,22H CLR C RLC A ;A*2因TABLE一个单元为2字节(1字) INC A ;指向该单元的第2个字节 MOVC A,A+DPTR MOV TL1,A ;TL1赋初值 MOV 20H,A ;TL1初值存20H MOV TH0,#0C2H MOV TL0,#0F6H SETB TR0 SETB TR1ZZZZ: MOV A,PORT1 ORL A,#0F0H CJNE A,#0FFH,ZZZZ CLR TR0 CLR TR1 MOV A,0AH ;弹奏乐谱频率延迟值赋A CLR C RRC A CLR C RRC A CL
24、R C RRC A ;弹奏乐谱频率延迟值/8 CJNE A,#0FH,NODE SJMP DDDNODE: JC DDD MOV A,#0FH ;弹奏乐谱频率延迟值/8后;若15则=15DDD: ORL 09H,A ; MOV 0AH,#0WWW: MOV A,09H MOV 0CH,A LCALL WBAY LCALL DELAY5 INC 0BH LJMP LOOP;频率延时DELAY: MOV R7,#125DLY2: MOV R4,#02DLY3: MOV R3,#248 DJNZ R3,$ DJNZ R4,DLY3 DJNZ R7,DLY2 DJNZ R5,DELAY RETDELA
25、Y1: MOV R7,#30 MOV R6,#0S1: DJNZ R6,$ DJNZ R7,S1 RETDELAY5: MOV R7,#10 MOV R6,#0S5: DJNZ R6,$ DJNZ R7,S5 RETSAO: MOV R0,#4 MOV R3,#11101111B MOV R2,#11111111BNLINE1: MOV A,R3 MOV PORT1,A MOV A,PORT1 ORL A,#0F0H CJNE A,#0FFH,KEYIN1 MOV A,R3 RL A MOV R3,A DJNZ R0,NLINE1 RETKEYIN1: LCALL DELAY1 LCALL D
26、ELAY1 LCALL DELAY1 LCALL NOPEN RET NOPEN: MOV A,PORT1 MOV R2,A ORL A,#0F0H CJNE A,#0FFH,NOPEN1 SJMP NOPENNOPEN1: LCALL DELAY1 LCALL DELAY1 RETTRANF: MOV B,#0 MOV A,R2C1: RRC A JNC C2 ;C=0跳C2 INC B INC B INC B INC B ;B=B+4 LJMP C1C2: MOV A,R2 RR A RR A RR A RR AC3: RRC A JNC C4 INC B LJMP C3C4: MOV A
27、,B ;B为按键值 RETSING0: MOV 30H,#00H ;30H为TABLE111地址计数器NEXT: MOV A,0DH CJNE A,#1,NN1 MOV DPTR,#TABLE1 LJMP WWNN1: CJNE A,#2,NN2 MOV DPTR,#TABLE2 LJMP WWNN2: CJNE A,#3,NN3 MOV DPTR,#TABLE3 LJMP WWNN3: CJNE A,#4,NN4 MOV DPTR,#TABLE4 LJMP WWNN4: CJNE A,#5,NN5 MOV DPTR,#TABLE5 LJMP WWNN5: CJNE A,#6,NN6 MOV
28、DPTR,#TABLE6 LJMP WWNN6: CJNE A,#7,NN7 MOV DPTR,#TABLE7 LJMP WWNN7: CJNE A,#8,NN8 MOV DPTR,#TABLE8 LJMP WWNN8: CJNE A,#9,NN9 MOV DPTR,#TABLE9 LJMP WWNN9: CJNE A,#10,NN10 MOV DPTR,#TABLE10 LJMP WWNN10: CJNE A,#11,NN11 MOV DPTR,#TABLE11 LJMP WWNN11: CJNE A,#12,NN12 MOV 0EH,#0A1H MOV 0BH,#0 LJMP NNNN12
29、: CJNE A,#13,NN13 ;MOV 0EH,#0A3H ;MOV 0BH,#0H LJMP MAINNN13: CJNE A,#14,NN14 ;MOV 0EH,#0A5H ;MOV 0BH,#0H LJMP MAINNN14: CJNE A,#15,NN ;MOV 0EH,#0A7H ;MOV 0BH,#00H LJMP MAINNN: LCALL RBAY ;读内存NNT: MOV A,R6 ;R6为从内存中读到的数据 LJMP IICWW: MOV A,30H JZ WW0 MOVC A,A+DPTR SJMP IICWW0: MOVC A,A+DPTR MOV 30H,#1
30、MOV 31H,A SJMP WWIIC: MOV R2,A JZ ENDF ;A=00 结束标志跳ENDF程序重新开始 ANL A,#0FH ;低4位为延时值 MOV R5,A ;R5延时值;频率延时(DELAY)程序用 MOV A,R2 SWAP A ANL A,#0FH ;高4位为音调序号若 JNZ SING ;为0则 CLR TR1 ;为休止符 SJMP DLY1SING: DEC A ;频率表从0位置开始,音调序号表从1位置开始,0位置数据是解密数据 PUSH ACC MOV A,0DH CJNE A,#11,BD ;若11(B)键,即为CF键转BD0;若=11(B)键转DE,音调序
31、号+31H POP ACC SJMP DEBD: POP ACC JNC BD0DE: ADD A,31HBD0: MOV 22H,A RL A MOV DPTR,#TABLE MOVC A,A+DPTR MOV TH1,A MOV 21H,A MOV A,22H RL A INC A MOVC A,A+DPTR MOV TL1,A MOV 20H,A SETB TR1DLY1: INC R5 ACALL DELAY INC 30H INC 0BH MOV A,0DH ;取按键值;判断是读内存键还是读乐谱序号键 CJNE A,#0BH,NNBD ;若按键值11取下1个乐谱;若按键值为1215(
32、CF)转NNBD读内存NEXT1: LJMP NEXTNNBD: JC NEXT1 LJMP NN ;读内存;程序重新开始ENDF: CLR TR1 LJMP MAIN; T0中断服务弹奏频率延迟时间TIME0: INC 0AH ;弹奏乐谱频率延迟值 MOV TH0,#0C2H MOV TL0,#0F6H ;定时初值 =49910 计数次数为 216(65536)-49910=15626=16ms RETITIME1: PUSH ACC PUSH PSW MOV TL1,20H MOV TH1,21H CPL P3.7 POP PSW POP ACC RETIRBAY: LCALL START
33、 MOV A,#0A0H LCALL WRBYT LCALL TACK MOV A,0BH LCALL WRBYT LCALL TACK LCALL START MOV A,0EH LCALL WRBYT LCALL TACK LCALL RDBYT LCALL NOTACK LCALL STOP RETWBAY: LCALL START MOV A,#0A0H LCALL WRBYT LCALL TACK MOV A,0BH LCALL WRBYT LCALL TACK MOV A,0CH LCALL WRBYT LCALL TACK LCALL STOP RET ;WKX03: MOV R
34、1,#10H ;LCALL START ;MOV A,#0A2H ;LCALL WRBYT ;LCALL TACK ;MOV A,0CH ;LCALL WRBYT ;LCALL TACK ;MOV R0,#4;WKX031: MOV A,R1 ;LCALL WRBYT ;LCALL TACK ;INC R1 ;DJNZ R0,WKX031 ;LCALL STOP ;LCALL DELAY1 ;LCALL DELAY1 ;RETSTART: SETB SDA NOP NOP NOP NOP SETB SCK NOP NOP NOP NOP CLR SDA NOP NOP NOP NOP CLR
35、SCK NOP NOP NOP NOP RETSTOP: CLR SDA NOP NOP NOP NOP SETB SCK NOP NOP NOP NOP SETB SDA NOP NOP NOP NOP ;CLR SCK ;NOP ;NOP ;NOP ;NOP RETTACK: SETB SDA ;CLR SDA NOP NOP NOP NOP SETB SCK NOP NOP NOP NOP CLR SCK NOP NOP NOP NOP ;SETB SDA ;NOP ;NOP ;NOP ;NOP RET;-CHACK: SETB SDA NOP NOP NOP NOP SETB SCK NOP NOP NOP NOP MOV C,SDA CLR
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922