51单片机电子琴设计报告

扬州大学水利与能源动力工程学院

课程设计报告

题    目:            电子琴设计             

课    程:     单片机原理及应用课程设计     

专    业:        电气工程及其自动化        

班    级:                          

姓    名:                            

学    号:                         


第 一 部 分

任务书


《单片机原理及应用》课程设计任务书

一、课题名称

电子琴设计

二、课程设计目的

课程设计是课程教学中的一项重要内容,是达到教学目标的重要环节,是综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。

《单片机原理及应用》是一门理论性、实用性和实践性都很强的课程,课程设计环节应占有更加重要的地位。单片机原理及应用课程设计的目的是让学生在理论学习的基础上,通过完成一个涉及MCS-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能将课堂上学到的理论知识与实际应用结合起来,而且能进一步加深对电子电路、电子元器件等知识的认识与理解,同时在软件编程、排错调试、相关软件和仪器设备的使用技能等方面得到较全面的锻炼和提高。为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。通过单片机硬件和软件设计、调试、整理资料等环节的培训,使学生初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。

三、课程设计内容

设计以89C51单片机和外围元器件构成的单片机应用系统,并完成相应的软硬件调试。

1. 系统方案设计:综合运用单片机课程中所学到的理论知识,学生根据所选课题的任务、要求和条件进行总体方案的设计。

2. 硬件电路设计:对方案中以单片机为核心的电路进行设计计算,包括元器件的选择和电路参数的计算,并画出总体电路图。

3. 软件设计:根据已设计出的软件系统框图,用汇编语言或C51编制出各功能模块的子程序和整机软件系统的主程序。

4. 调试:在单片机EDA仿真软件环境Proteus下进行仿真设计并调试;或在单片机周立功实验箱上进行相关设计并调试。

四、课程设计要求

设计一个电子琴。利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出8个不同的音调,并且要求按下按键发声,松开延时一段时间停止,中间再按别的键则发另一音调的声音。

五、进度安排

七、课程设计报告内容:

总结设计过程,写出设计报告,设计报告具体内容要求如下:

1.课程设计的目和设计的内容。

2.课程设计的要求。

3.控制系统总框图及系统工作原理。

4.控制系统的硬件电路连接图,电路的原理。

5.软件设计流程图及其说明。

6.电路设计,软件编程、调试中遇到的问题及分析解决方法。

7.实验结果及其分析。

8.体会。


第 二 部 分

课程设计报告


   

1 课题简介......................................................................................................................................... - 6 -

1.1 课题设计目的...................................................................................................................... - 6 -

1.2 课题任务.............................................................................................................................. - 6 -

1.3 课题要求.............................................................................................................................. - 6 -

2 电子琴方案设计............................................................................................................................. - 7 -

2.1 控制系统总体介绍.............................................................................................................. - 7 -

2.2 系统框图.............................................................................................................................. - 7 -

2.3 工作原理.............................................................................................................................. - 8 -

3 电子琴硬件电路设计..................................................................................................................... - 9 -

3.1 时钟电路.............................................................................................................................. - 9 -

3.2 复位电路.............................................................................................................................. - 9 -

3.3 键盘电路.............................................................................................................................. - 9 -

3.4 扬声器发声模块及音乐播放模块.................................................................................... - 10 -

3.5 总体电路图........................................................................................................................ - 11 -

4电子琴软件编程设计.................................................................................................................... - 12 -

4.1 主程序设计........................................................................................................................ - 12 -

4.2 对音调的控制.................................................................................................................... - 12 -

4.3 对音长的控制.................................................................................................................... - 13 -

4.4 回放模块编程.................................................................................................................... - 14 -

5 实验与结果分析........................................................................................................................... - 15 -

5.1 软件仿真电路图................................................................................................................ - 15 -

5.2调试结果............................................................................................................................. - 15 -

6 小结与体会................................................................................................................................... - 16 -

参 考 文 献..................................................................................................................................... - 17 -

附录一:源程序............................................................................................................................... - 18 -

1 课题简介

1.1 课题设计目的

课程设计是课程教学中的一项重要内容,是达到教学目标的重要环节,是综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。

《单片机原理及应用》是一门理论性、实用性和实践性都很强的课程,课程设计环节应占有更加重要的地位。单片机原理及应用课程设计的目的是让学生在理论学习的基础上,通过完成一个涉及MCS-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能将课堂上学到的理论知识与实际应用结合起来,而且能进一步加深对电子电路、电子元器件等知识的认识与理解,同时在软件编程、排错调试、相关软件和仪器设备的使用技能等方面得到较全面的锻炼和提高。为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。通过单片机硬件和软件设计、调试、整理资料等环节的培训,使学生初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。

1.2 课题任务

    简易电子琴设计

设计以89C51单片机和外围元器件构成的单片机应用系统,并完成相应的软硬件调试。

1. 系统方案设计:综合运用单片机课程中所学到的理论知识,学生根据所选课题的任务、要求和条件进行总体方案的设计。

2. 硬件电路设计:对方案中以单片机为核心的电路进行设计计算,包括元器件的选择和电路参数的计算,并画出总体电路图。

3. 软件设计:根据已设计出的软件系统框图,用汇编语言或C51编制出各功能模块的子程序和整机软件系统的主程序。

4. 调试:在单片机EDA仿真软件环境Proteus下进行仿真设计并调试;或在单片机周立功实验箱上进行相关设计并调试。

1.3 课题要求

设计一个电子琴。利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出8个不同的音调。

1. 要求按下按键发声,松开延时一段时间停止,中间再按别的键则发另一音调的声音。

2. 将按下的音符储存起来,放在外部扩展的ROM中。

3. 按下一个键,可以将之前储存的乐曲播放出来。

2 电子琴方案设计

2.1 控制系统总体介绍

根据方案的要求,将程序写入AT89C51单片机芯片。利用不同的音阶的频率不一样,用单片机来模拟电子琴,可以使单片机的定时器工作在计数器模式下,工作方式设为方式1,改变TH0和TH1来产生不同的频率,从而产生不同的音阶。 P1口接独立式键盘,用扫描法读取P1口外接的键盘,若有键按下,则发出对应频率的声音(单片机P3.3作为音频放大电路的输入)。此外,系统还能实现按键的记录与重放功能,按下的键的音调和时长信息会被存储在外扩ROM中,按下一个键后便可回放刚才所弹奏的音乐。

2.2 系统框图

2.3 工作原理

声音的频谱范围约在几十到几千赫兹, 若能利用程序来控制单片机某个口线不断输出高、低电平, 则在该口线上就能产生一定频率的方波, 将该方波接上喇叭就能发出一定频率的声音, 若再利用程序控制高、低电平的持续时间, 就能改变输出波形的频率从而改变音调。乐曲中, 每一音符对应着确定的频率, 下表给出各音符频率。

如果单片机某个口线输出高、低电的频率和某个音符的频率一样, 那么将此口线接上喇叭就可以发出此音符的声音。本系统就是根据此原理设计, 对于单片机来说要产生一定频率的方波大致是先将某口线输出高电平然后延时一段时间再输出低电平, 如此循环的输出就会产生一定频率的方波, 通过改变延时的时间就可以改变输出方波的频率。单片机内部有两个位的定时计数器T1和T0, 单片机的定时计数器实际上是个计数装置它既可以对单片机的内部晶振驱动时钟计数也可以对外部入的脉冲计数, 对内部晶振计数时称为定时器, 对外部时钟计数时称为计数器。当对单片机的内部晶振驱动时钟计数时,每个机器周期定时计数器的计数值就加, 当计数值达到计数最大值时计数完毕并通知单片机的尸比对外部输入的时钟信号计数时, 外部时钟的每个时钟上升沿定时计数器的计数值就加, 当计数值达到计数最大值时计数完毕并通知单片机。

因此, 如果知道单片机的机器周期或者外部输入时钟信号的周期单片机就可以根据定时器的计数值计算出定时的时间。用此方法定时十分准确, 想得到多大的延时时间就可以给定时器赋一定的计数初值, 定时器从预先设置的计数初值开始不断增当增加到计数最大值时计数完毕, 调整计数初值的大小就可以调整定时器定时的时间, 从而达到准确的延时。

3 电子琴硬件电路设计

3.1 时钟电路

单片机内部具有一个高增益反相放大器,用于构成振荡器。通常在引脚XTALl和XTAL2跨接石英晶体和两个补偿电容构成自激振荡器,结构图2 中X1、C1、C2。可以根据情况选择6MHz、12MHz或24MHz等频率的石英晶体,补偿电容通常选择30pF左右的瓷片电容。

图2  时钟电路

3.2 复位电路

单片机小系统常采用上电自动复位和手动按键复位两种方式实现系统的复位操作。上电复位要求接通电源后,自动实现复位操作。手动复位要求在电源接通的条件下,在单片机运行期间,用按钮开关操作使单片机复位。其结构如下图。上电自动复位通过电容C3充电来实现。手动按键复位是通过按键将电阻R1与VCC接通来实现。

图3  复位电路

3.3 键盘电路

键盘在单片机应用系统中是一个关键的部件,它能实现向计算机输入数据,传送命令等功能,是人工干预计算机的主要手段。 键盘可以分为2类:独立连接式键盘和矩阵式键盘。

(1)矩阵式键盘 

单片机系统中,若按键较多时,通常采用矩阵式(也称行列式)键盘。矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上。显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到+5V上.当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。这是识别按键是否按下的关键。 

(2)独立连接式键盘 

独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,然而,在按键较多时,I/O口线浪费较大,不宜采用。 

独立式按键软件常采用查询式结构。先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。由于本程序较为简单,为了使用方便及节省资源,选择独立式键盘。下图为独立式键盘电路图:

图3  键盘电路

3.4 扬声器发声模块及音乐播放模块

如下图所示,蜂鸣器接P3.3,单脉冲开关电路接P3.2(INT0),并配有示波器。

图4  发声电路

3.4外扩ROM模块

如下图,外扩ROM模块由一块74LS373和一块62256组成,可外扩32KB ROM空间。

图5  扩展电路

3.5 总体电路图

图6  总体电路

4 电子琴软件编程设计

4.1 主程序设计

4.2 对音调的控制

乐音实际上是有固定周期的信号。利用AT89C51单片机的一个定时器(如T0)控制,在P3.3脚上输出方波周期信号,驱动蜂鸣器,从而产生乐音。根据不同的按键,调节T0的溢出时间,可输出不同频率的乐音,这样就做出了一个简易七键电子琴。

每个乐音的音高(频率)是固定的,表1列出了一个8度1、2、3、4、5、6、7共7个音的音名、频率及定时器T0初值对照(晶振为12MHz)。

根据不同的按键,对定时器T0送入不同的初值,以调节T0的溢出时间,这样就可以输出不同音调频率的方波。不同音调下各个音阶的定时器。

编程如下:

START:

        MOV      R3,P1            ;读P1口参数

        CJNE     R3,#0FFH,KEY0    ;检测是否有键按下

        SJMP     START

KEY0:   CJNE     R3,#0FEH,KEY1    ;键一是否被按下,否则检测键二

        MOV      R4,#0FBH         ;“1”的发声频率

        MOV      R5,#0E9H

        LJMP     SOUND            ;转发声子程序

KEY1:   CJNE     R3,#0FDH,KEY2    ;键二到键八同理

        MOV      R4,#0FCH

        MOV      R5,#5CH

        LJMP     SOUND

KEY2:   CJNE     R3,#0FBH,KEY3  

        MOV      R4,#0FCH

        MOV      R5,#0C1H

        LJMP     SOUND

KEY3:   CJNE     R3,#0F7H,KEY4  

        MOV      R4,#0FCH

        MOV      R5,#0EFH

        LJMP     SOUND

KEY4:   CJNE     R3,#0EFH,KEY5

        MOV      R4,#0FDH

        MOV      R5,#045H

        LJMP     SOUND

KEY5:   CJNE     R3,#0DFH,KEY6

        MOV      R4,#0FDH

        MOV      R5,#92H

        LJMP     SOUND

KEY6:   CJNE     R3,#0BFH,KEY7   

        MOV      R4,#0FDH

        MOV      R5,#0D6H

        LJMP     SOUND

KEY7:   CJNE     R3,#7FH,NO       ;键8是否被按下,无键被按下则返回

        MOV      R4,#0FDH

        MOV      R5,#0FBH

        LJMP     SOUND

 

4.3 对音长的控制

通过检测按键接通时间长短来控制T0定时器的开启时间。T0中断程序编程如下:

ITa:    CJNE     R3,#0FFH,RE      ;判断键是否松开

        CLR      TR0              ;停止发声

        MOV      A,R5             ;存储发音频率

        MOVX     @DPTR,A

        INC      DPTR

        MOV      A,R4

        MOVX     @DPTR,A

        INC      DPTR

        MOV      A,B              ;存储发音时长

        MOVX     @DPTR,A

        INC      DPTR

        MOV      A,R2

        MOVX     @DPTR,A

        INC      DPTR

        MOV      B,0

        MOV      R2,0

        SJMP     RETURN

RE:     CPL      P3.3              ;P3.3输出端接播放设备发声

        MOV      TH0,R4           

        MOV      TL0,R5

        MOV      A,B

        CJNE     A,#0FFH,CARRY     ;记录发音时长

        MOV      B,0

        INC      R2

        SJMP     RETURN  

CARRY:  INC      B      

RETURN: RETI

4.4 回放模块编程

回放功能由外部中断INT0和定时器IT1两个中断服务程序实现,外部中断检测到按键的脉冲后即开始查表,将之前弹奏的音阶的初值和时间送给定时器T1播放。播放结束后还会自动清空之前ROM中存储的信息。流程图如下:

5 实验与结果分析

5.1 软件仿真电路图

    采用protues软件,仿真效果图如下

5.2调试结果

按下按键(1、2、3、4、5、6、7、8),蜂鸣器发出相应声音(DO、RE、MI、FA、SO、LA、SI、高音DO)。且按下按键发声,松开延时一段时间停止,中间再按别的键则发另一音调的声音。 

按下外部中断开关,则重放之前弹奏的旋律。

调试结果与试验预期相一致。

6 小结与体会

为期一周的单片机课程设计结束了,在夏老师的悉心指导和我们小组成员的共同努力下,最终圆满完成了这次课程设计的任务。通过本次课设,我我学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前学过的零散的知识串到一起。

我的小组课程设计的题目是电子琴设计,在过程中我的硬件和软件开发能力都获得了提高。首先硬件方面,基本了解了电子产品的开发流程和所要做的工作。并设计了外围电路。通过外围电路的设计和搭建的过程,使我对52系单片机的接口有了更深层次的理解,熟悉了一些单片机常用的外围电路引脚和连接方法,如LED数码管,键盘等。在软件方面,通过编写和调试程序,与仿真工具的使用,使我加深了对单片机理解,熟悉了52系列单片机内部的寄存器和编程规则,以及如何控制外围电路。

课程设计还培养了我的耐心和毅力,常常一个小小的错误就会导致系统不正常工作。通过这个课程设计,我积累了不少经验,对以后我们学习及工作均有很大帮助。在设计过程中,我们小组不仅完成了任务的指定要求,还另外增加了额外的功能。我们设计的电子琴不仅可以弹奏音乐,还能将之前弹奏的旋律回放出来,并且按键的时间长短也同样还原。当然,这其中不乏困难,当题目的难度一次次增加是,在调试冗杂的源程序时,一次次的失败曾经让我们想过放弃,不过夏老师给了我们宝贵的指导意见和坚定的鼓励,我们终于还是坚持下来了,并且做出了满意的成果!两人一组,培养了我团队协作意识。为以后团队协作起到了很好的借鉴。

此外在学习单片机知识的时候对于这个领域有了更新更全面的认识。微型计算机的出现和大量使用将人类社会带入一个新的时代,单片微型计算机(简称单片机)在其中扮演着十分重要的角色。虽然它没有常见的PC那样大的体积和重量,不会在办公桌或控制台上占据一个显要的位置,但它就像小小的螺丝钉一样,镶嵌在人们工作、生活中需要计算、控制、测量等智能活动的各个角落。自20世纪70年代问世以来,单片机以其体积小、可靠性高、控制功能强、使用方便、性能价格比高、容易产品化等特点,在智能仪表、机电一体化、实时控制、分布式多机系统、家用电器等各个领域得到了广泛应用,对各个行业的技术改造和产品的更新换代起着重要的推动作用,对人们生活质量的提高产生了深刻的影响。作为21世纪的工科大学生,学好单片机,一方面可以加深对计算机原理和结构的认识,另一方面也为自身在专业上的深入发展构筑了一个很好的平台其重要性怎么强调都不为过。

总之,这次的课程设计让我们进步了很多,再次感谢老师的谆谆教导和小组成员的支持,希望我们以后能做得更好!

参 考 文 献

[1] 张毅刚主编,单片机原理及应用,北京:高等教育出版社,2004

[2] 陈涛编著,单片机应用及C51程序设计,北京:机械工业出版社,2008

[3] 周润景主编,PROTEUS入门实用教程,北京:机械工业出版社,2007

[4] 皮大能主编,单片机课程设计指导书,北京:北京理工大学出版社,2010

[5] 楼然苗主编, 单片机实验与课程设计(Proteus仿真版),浙江:浙江大学出版社, 20##

[7] 控制、电子技术类杂志、报刊

附录一:源程序

        ORG      0000H

        LJMP     MAIN

        ORG      0003H

        LJMP     INTa

       ORG      000BH

           LJMP     ITa

        ORG      001BH

        LJMP     ITb

        ORG      0100H

MAIN:   MOV      SP,#70H       

        MOV      TMOD,#11H        ;定时器初始化

        SETB     EA

        SETB     ET0

        SETB     ET1

        SETB     EX0

        SETB     IT0

        MOV      TL0,#00H         ;定时器0赋初值

        MOV      TH0,#00H

        MOV      TL0,#00H         ;定时器1赋初值

        MOV      TH0,#00H    

        MOV      P1,#0FFH

        MOV      B,#0

        MOV      R2,#0   

        MOV      DPTR,#0000H     ;数据指针初始化     

START:

        MOV      R3,P1            ;读P1口参数

        CJNE     R3,#0FFH,KEY0    ;检测是否有键按下

        SJMP     START

KEY0:   CJNE     R3,#0FEH,KEY1    ;键一是否被按下,否则检测键二

        MOV      R4,#0FBH         ;“1”的发声频率

        MOV      R5,#0E9H

        LJMP     SOUND            ;转发声子程序

KEY1:   CJNE     R3,#0FDH,KEY2    ;键二到键八同理

        MOV      R4,#0FCH

        MOV      R5,#5CH

        LJMP     SOUND

KEY2:   CJNE     R3,#0FBH,KEY3  

        MOV      R4,#0FCH

        MOV      R5,#0C1H

        LJMP     SOUND

KEY3:   CJNE     R3,#0F7H,KEY4  

        MOV      R4,#0FCH

        MOV      R5,#0EFH

        LJMP     SOUND

KEY4:   CJNE     R3,#0EFH,KEY5

        MOV      R4,#0FDH

        MOV      R5,#045H

        LJMP     SOUND

KEY5:   CJNE     R3,#0DFH,KEY6

        MOV      R4,#0FDH

        MOV      R5,#92H

        LJMP     SOUND

KEY6:   CJNE     R3,#0BFH,KEY7   

        MOV      R4,#0FDH

        MOV      R5,#0D6H

        LJMP     SOUND

KEY7:   CJNE     R3,#7FH,NO       ;键8是否被按下,无键被按下则返回

        MOV      R4,#0FDH

        MOV      R5,#0FBH

        LJMP     SOUND

SOUND:  SETB     TR0              ;启动T0,开始发声

NO:     LJMP     START

ITa:    CJNE     R3,#0FFH,RE      ;判断键是否松开

        CLR      TR0              ;停止发声

        MOV      A,R5             ;存储发音频率

        MOVX     @DPTR,A

        INC      DPTR

        MOV      A,R4

        MOVX     @DPTR,A

        INC      DPTR

        MOV      A,B              ;存储发音时长

        MOVX     @DPTR,A

        INC      DPTR

        MOV      A,R2

        MOVX     @DPTR,A

        INC      DPTR

        MOV      B,0

        MOV      R2,0

        SJMP     RETURN

RE:     CPL      P3.3              ;P3.3输出端接播放设备发声

        MOV      TH0,R4           

        MOV      TL0,R5

        MOV      A,B

        CJNE     A,#0FFH,CARRY     ;记录发音时长

        MOV      B,0

        INC      R2

        SJMP     RETURN  

CARRY:  INC      B      

RETURN: RETI

INTa:   MOV      DPTR,#0000H       ;按键回放功能,即INT0中断服务程序

        MOVX     A,@DPTR           ;查表

        CJNE     A,#00H,BEGIN

        SJMP     EXIT

BEGIN:  MOVX     A,@DPTR              

        MOV      R4,A              ;提取音阶

        INC      DPTR

        MOVX     A,@DPTR

        MOV      R5,A

        INC      DPTR

        MOVX     A,@DPTR

        MOV      B,A               ;提取时长

        INC      DPTR

        MOVX     A,@DPTR

        MOV      R2,A

        INC      DPTR

        SETB     TR1               ;开始回放

EXIT:   RETI

ITb:    SJMP     JUDGE             ;回放程序,即T1中断服务程序

RENEW:  MOV      B,#0FFH

JUDGE:  DJNZ     B,PLAY

ANGRY:  DEC      R2

        CJNE     R2,#0FFH,RENEW           

ANGYR1: MOV      A,DPL             ;将回放过的单元清零

        SUBB     A,#4             

        MOV      DPL,A

        MOV      A,DPH

        SUBB     A,#0

        MOV      DPH,A

        MOV      A,#00H

        MOVX     @DPTR,A

        INC      DPTR

        MOV      A,#00H

        MOVX     @DPTR,A

        INC      DPTR

        MOV      A,#00H

        MOVX     @DPTR,A

        INC      DPTR

        MOV      A,#00H

        MOVX     @DPTR,A

        INC      DPTR

        MOVX     A,@DPTR

DELAY:                             

        MOV R7,#9FH             ;每两个音之间的间隔

DELAY0:

        MOV R6,#0AFH

DELAY1:

        DJNZ R6,DELAY1

        DJNZ R7,DELAY0      

        CJNE     A,#00H,NEXT

        CLR      TR1

        MOV      DPTR,#0000H

        SJMP     QUIT

NEXT:   MOVX     A,@DPTR

        MOV      R4,A         ;提取音阶

        INC      DPTR

        MOVX     A,@DPTR

        MOV      R5,A

        INC      DPTR

        MOVX     A,@DPTR

        MOV      B,A            ;提取时长

        INC      DPTR

        MOVX     A,@DPTR

        MOV      R2,A

        INC      DPTR      

PLAY:   CPL      P3.3           ;发声

        MOV      TL1,R4

        MOV      TH1,R5

QUIT:   RETI

        END

相关推荐