1、 单片机课程设计目录第 1 章 概 述 .11.1 设计的目的 1第 2 章 系统设计 .22.1 简易电子琴设计方案 22.2 系统总框图 22.3 系统工作原理 3第 3 章 硬件电路的设计 .4第 4 章 软件的设计 .54.1 程序流程图 .54.2 程序设计说明 64.2.1 对声音的控制 64.2.2 对演奏的控制 .6第 5 章 总结 .7参考文献 .8附录 1 系统电路图 9附录 2 源代码.101第 1章 概 述我们生活在一个信息时代,各种电子产品层出不穷,作为一个计算机专业的学生,了解这些电子产品的基本组成和设计原理是十分必要的,我们学习的是计算机组成的理论知识,而课程设计
2、正是对我们学习的理论的实践与巩固。本设计主要介绍的是一个用超高速硬件描述语言 VHDL 设计的一个具有若干功能的简易电子琴,其理论基础来源于计算机组成原理的时钟分频器。1.1设计目的(1)能够对电子电路、电子元器件、印制电路板等方面的知识有进一步的认识,独立对其进行测试与检查。(2)熟悉 8051 单片机的内部结构和功能,合理使用其内部寄存器,能够完成相关软件编程设计工作。(3)为实现预期功能,能够对系统进行快速的调试,并能够对出现的功能故障进行分析,及时修改相关软硬件。(4)对软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。2第 2章 系统设计2.1简易电子
3、琴设计方案设计一简易电子琴,要求能够发出 1、2、3、4、5、6、7 等七个音符。使用元件:AT89C51、LM324,喇叭,按键等1.能够实现基本的琴键功能即每按下一个琴键,单片机能够检测到键盘的按键,并根据按键的位置通过程序来控制,使蜂鸣器发著不同频率的声音,声音延迟延迟一段时间,等到按键放开后,声音停止。然后再继续扫描,看是否有键按下,如此循环下去,即实现基本的琴键功能。2.能够实现调节电子琴银色功能在键盘上设置功能键,通过按键选择不同的因素。3.能够实现通过按键自动播放歌曲的功能在键盘上设置几个功能键,按下之后会根据功能键跳转到自动播放歌曲的程序,来播放相应的歌曲。2.2系统的总框图系
4、统的电路结构组成框图如图一:功能选择弹奏/播放上电复位按键复位51 单片机AT89C20518 键独立键盘扬声器驱动 音频LED 状态灯32.3系统工作原理乐音实际上是有固定周期的信号。我们可以用 AT89C51 的一个定时器(如 T1)控制,在 P34 脚上输出方波周期信号,产生乐音。根据不同的按键,调节 T1 的溢出时间,可输出不同频率的乐音,这样就做出了一台微型电子琴。每个乐音的音高(频率)是固定的,表 1 列出了一个 8 度以及其上下共 16 个音的音名、频率及定时器 T1 初值对照(设晶体频率为 6MHz)音乐产生原理及硬件设计由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同
5、的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。本次设计中单片机晶振为 12MHZ,那么定时器的计数周期为 1MHZ,假如选择工作方式 1,那 T 值便为 T= 216-5105/相应的频率 ,那么根据不同的频率计算出应该赋给定时器的计数值,电子琴的具体工作原理图如下图所示。4简易电子琴的工作原理图5第 3章 硬件电路的设计由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,
6、即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器 T0 来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。本次设计中单片机晶振为 12MHZ,那么定时器的计数周期为 1MHZ,假如选择工作方式1,那 T 值便为 T= 216-5105/相应的频率 ,那么根据不同的频率计算出应该赋给定时器的计数值,列出不同音符与单片机计数 T0 相关的计数值如下表所示:音符 频率(HZ) 简谱码(T 值)中 1 DO 523 64580中 2 RE 587 64684中 3 M 659 64777中 4 FA 698 64820中
7、5 SO 784 64898中 6 LA 880 64968中 7 SI 988 65030采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据:TABLE DW 64580,64684,64777,64820,64898,64968,65030键盘电路采用独立式键盘,将 P1 口作为键盘扫描接口,按键一端接地一端接 P1 口,P3.4 作为音频输出端口,P3.7 作为程序运行发光二极管显示输出端口6第 4章 软件设计4.1程序流程图开始按键按下是否成功TO 初始化并开中断允放 TO 中断识别按键功能根据按键功能,装入音符 T 到 TO 中启动 TO
8、工作按键释放是否成功?停止 TO 工作TO 中断入口重装 THO,TLO 初值P1.0 取反中断返回图 3.2 简易电子琴的工作流程图74.2程序设计说明4.2.1对声音的控制对音调的控制:根据不同的按键,对定时器 T1 送入不同的初值,调节 T1 的溢出时间,这样就可以输出不同音调频率的方波。不同音调下各个音阶的定时器对音长的控制:先向定时器 T0 送入一个固定初值,控制中断循环的次数,从而得到成倍数关系的时间间隔。按一拍 0.64S 计算,取 1/16 拍为最小间隔,即0.04S,为此设定 T0 的初值为 63C0。乐谱的编码规则:对于每个音符,定义用 8 位二进制数表示。其中,最高位为
9、1 的字符为结束符,当读到最高位为 1 时,停止播放;低 3 位存储音阶码,即音阶表的列数,可为 000B111B (17 和休止符),休止符表示停顿,不发音,只有时间长短属性;第 3 位和第 4 位存储音高码,即音阶表的行数,可为 00B10B;第 5 位和第 6 位存储音长码,即中断次数,可为 00B10B。4.2.2对演奏的控制在手动演奏时,规定先按音调键,后按音阶键。每次音阶键按下时,调用键盘扫描子程序,获得键值,查询音阶表,获取定时器的计时初值,向喇叭输入相应频率的驱动脉冲,发出相应的声音,若按键没有松开,则一直发声;若按键松开,则停止发声。在自动演奏时,通过选曲键来确定要播放的音乐
10、,根据键值查询曲目表获取所点歌曲的首地址,依次读取歌曲的代码,获得音阶、音调和音长信息,播放相应的音乐。当读到结束符时,停止播放音乐。8第 5章 总结通过一周的紧张工作,终于完成了简易电子琴的设计,这个课程设计使我受益匪浅,他使我了解了硬件设计的整个流程,并且加深了我对计算机组成原理这门的课内容的理解,通过这个课程设计,不仅使我了解了组成原理的脊髓,而且使我对单片机从陌生到初步理解,扩充的我的知识面。这个课程设计也培养了我们的耐心和毅力,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,由于这个课程设计也使我积累了一些经验,相信这些经验在我以后的学习工作中会有很大的作用。
11、此课程设计也使我了解了单片机设计的方便灵活性,这是我们跨入计算机硬件行业很好的一次锻炼。9参考文献【1】 单片微型计算机接口技术及应用 张淑清 姜万录等著编(国防工业出版社 2003年 1 月)【2】 8051 单片机实践与应用 吴金戌 沈庆阳 郭庭吉 编著(清华大学出版社 2001 年8 月)【3】 微型计算机原理与接口技术 冯博琴主编(清华大学出版社 2004 年 4 月)【4】 新颖实用电子设计与制作 张友汉主编(福建科学技术出版社 2000 年 1 月)【5】 C 语言程序设计教程(第二版) 谭浩强等著编(高等教育出版社)【6】 数字电子技术基础简明教程(第二版) 余孟尝主编10附录(
12、一)硬件电路图:XTAL24RST1 P1.012P1. 13P1.214P1.315P1.416P1.517P1.618P1.719P3.2/INT06P3./INT17P3.4/T08P3.5/T19 P3.0/RXD2P3.1/TXD3P3.71XTAL15U1AT89C2051R14k7R24k7C130pFC230pFX1CRYSTALR310kC310uFLS1SPEAKERR51k D1LEDD2LED R610k12J1SIL-156-0211附录(二)源代码ORG 0000HLJMP MAINORG 0003HLJMP IN0TORG 000BHLJMP INT_T0ORG
13、001BHLJMP TIME1ORG 0100HMAIN:MOV SP,#60H ;初始化堆栈指针MOV 30H,#00 ;定时器初值清零MOV 31H,#00MOV 32H,#00MOV P1,#0FFH ;设置 P1口为输入模式MOV TMOD,#11H ;设置定时器 0为工作模式 1SETB EX0SETB IT0SETB ET0 ;开定时器 0中断SETB ET1SETB EA ;开总中断CLR TR1CLR TR0 ;关闭定时器 0START: MOV R0, P1MOV A,32HJNZ INT12CJNE R0,#0FFH,KEY1 ;键盘扫描SETB P3.7CLR TR0SJ
14、MP STARTIN0T: PUSH ACCMOV A,32HJNZ CLR1MOV 32H,#1SJMP OVERCLR1: MOV 32H,#0OVER: POP ACCRETIKEY1: MOV R1,#0MOV A,R0CPL ALOOP: CJNE A,#01H,RELSJMP FUREL: RR AINC R1SJMP LOOPFU: MOV A,R1MOV B,#2MUL ABMOV R2,AMOV DPTR,#TABLEMOVC A,A+DPTRMOV 30H,AMOV A,R2INC AMOVC A,A+DPTRMOV 31H,A13SETB TR0CLR P3.7LJMP
15、STARTINT_T0: ;T0中断服务程序MOV TH0,30H ;定时器赋初值MOV TL0,31HCPL P3.4 ;输出方波RETITABLE:DB 0FCH,44H,0FCH,0ACH,0FDH,09H,0FDH,34HDB 0FDH,82H,0FDH,0C8H,0FEH,06H,0FEH,22HINT: MOV 40H,#00H ;设简谱码指针初始值NEXT: MOV A,32HJZ STOPCLR P3.7MOV A,40H ;简谱码指针暂存累加器 AMOV DPTR,#TABLE2 ;设简谱码MOVC A,A+DPTRCJNE A,#00H,PLAY ;取到的简谱码不是结束码,
16、传 PLAY取节拍码LJMP STOP ;皇墙崾 耄 顺?PLAY: MOV R3,A ;R1暂存简谱码ANL A,#0FH ;取节拍码MOV R4,A ;节拍码暂存 R2MOV A,R3ANL A,#0F0H ;取音符码CJNE A,#00H,MUSIC ;音符码不为 0,调发音子程序CLR TR1 ;音符码为 0,不发音LJMP DELMUSIC:SWAP ADEC AMOV 22H,AADD A,22H14MOV R1,AMOV DPTR,#TABLE1 ;取相应计数值MOVC A,A+DPTRMOV TH1,A ;暂存高位字节MOV 21H,AMOV A,R1INC AMOVC A,A
17、+DPTR ;取相应计数值的低位字节MOV TL1,A ;暂存低位字节MOV 20H,ASETB TR1 ;启动定时器DEL: LCALL DELAYINC 40H ;指向下一个简谱码LJMP NEXTSTOP: CLR TR1 ;停止计时器LJMP STARTTIME1:PUSH ACC ;现场保护PUSH PSWCPL P3.4 ;P1.7反相输出,演奏音乐MOV TL1,20H ;重设计数值MOV TH1,21HPOP PSWPOP ACCRETIDELAY:MOV R7,#02H ;4/4曲调,演示 125ms子程序DELA1:MOV R6,#125DELA2:MOV R5,#248D
18、JNZ R5,$DJNZ R6,DELA2DJNZ R7,DELA1DJNZ R4,DELAY15RETTABLE1:DW 64524,64580,64684,64777 ;简码值DW 64820,64898,64968,65030,65058DW 64400,64260TABLE2:DB 14H,42H,62H,98H;歌曲送别DB 74H,92H,72H,68HDB 64H,22H,32H,44H,32H,22HDB 3CHDB 64H,42H,62H,94H,04H,82HDB 74H,94H,68HDB 64H,32H,42H,54H,04H,12HDB 2CHDB 74H,94H,9
19、8HDB 84H,72H,82H,98HDB 72H,82H,92H,72H,72H,62H,42H,22HDB 3CHDB 64H,42H,62H,94H,04H,82HDB 74H,94H,68HDB 64H,32H,42H,54H,04H,12HDB 2CHDB 42H,62H,72H,41H,61H,41H,31H,22H,0B2H;歌曲三个和尚DB 62H,61H,61H,71H,61H,41H,64HDB 0B2H,0B2H,62H,61H,61H,71H,61H,41H,64HDB 0B2H,0B2H,62H,61H,61H,71H,61H,41H,64HDB 42H,62H,7
20、2H,41H,61H,41H,31H,22H,0B2HDB 22H,31H,41H,31H,21H,0A2H,0B4HDB 22H,31H,41H,31H,21H,0A2H,0B4HDB 22H,31H,41H,31H,21H,0A2H,0B4HDB 0A2H,21H,32H,42H,62H,61H,41H,62H,71H16DB 42H,41H,61H,42H,32H,22H,31H,21H,0A2HDB 42H,41H,61H,42H,32H,22H,31H,21H,0A2HDB 42H,41H,61H,42H,32H,22H,31H,21H,0A2HDB 62H,61H,42H,62H,71H,61H,72H,62H,71HDB 62H,61H,71H,32H,42H,64HDB 00HEND