当前位置:首页 >> 信息与通信 >>

毕业论文-基于单片机AT89C51的简易电子琴


长沙航空职业技术学院 毕业设计(论文)
(专科 2008 届)

院(系) :电子电气工程系 课 专 班 题: 基于单片机的简易电子琴 业:生产过程自动化 级:自动化 0502

学生姓名:杨成 指导老师:陶岚 学 日 号:200511002046 期:2008 年 04 月 20 日

长沙航空职业技术学院

届毕业设计(论文) 2008 届毕业设计(论文)开题报告 (2008 届)

学 专

院、系: 业:

电子电气工程系 生产过程自动化 杨成 0502 陶岚 学号 职称 46 副教授

学 生 姓 名: 班 级:

指导教师姓名: 指导教师姓名:

2007 年

12 月

题目: 题目:基于单片机原理的简易电子琴系统 一、课题研究的意义 由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们 就可以利用不同的频率的组合,即可构成我们所想要的音乐了,这些方面对于单片机来 说就非常的方便。我们可以利用单片机的定时/计数器 T0 来产生这样方波频率信号,对 于一首歌我们只要把这首歌的音阶对应的频率关系弄正确即可得到节拍。 基于单片机原 理的电子琴大大简化了以前传统的音乐产生电路,使得元件得到减少,生产成本降低而 且性能也得到了提高,并且耗能也降低了。我通过收集、查阅与发声原理、声音的产生 电路有关的文献资料以及仿真调试软件的使用使我对单片机的应用前景有了深刻的了 解。 二.要研究或解决的问题、拟采用的方法或技术路线: 要研究或解决的问题、拟采用的方法或技术路线:

要解决的问题: 一) 要解决的问题: 1)发声原理与声音的产生电路设计 2)喇叭放声放大电路的设计和制作 3)源程序的编写

二)拟采用的方法或路线: 拟采用的方法或路线: 基本功能: (1) 基本功能: 1》能够发出 1.2.3.4.5.6.7 等七个音符。 2》自选一首歌曲,按下启动键后,能自动演奏完该乐曲。 (2)方法或路线 方法或路线: (2)方法或路线 该简易电子琴通过控制单片机内部的定时器 T0 来产生不同频率的方波,驱 动喇叭发出不同音节的声音.再利用延迟来控制发音时间的长短,即可控制音调中的节 拍.把乐谱中的音符对应的频率转换为定时常数,把相应的节拍变换为定时常数,然后作 成表格存放在储存器中,由程序查表得到定时常数和延时常数,分别用以控制定时器产 生方波的频率和该频率方波的持续时间.当延迟常数到时,再查下一个音符的定时常数 和延迟常数.依次进行下去,就可演奏悦耳动听的音乐. 将某一首音乐的简谱变换成为常数表,计算机顺序调入时间常数并以中断 方式执行,从 P1.7 来输出方波驱动喇叭,发出不同音节的声音,节拍的控制可通过调用 200Ms 延时子程序的次数来实现.单片机的晶振频率为 12MHz,乐谱中的音符,频率及定 时常数的关系:T0=2^16-1/2f*ti;其中 f 为音符对应的频率;ti 为内部计时一次所用时 间. 例如:音调 1 对应的频率 524Hz,其半周期 T/2=1/2f=0.95Ms,用定时器 T0 方式 1 定时是器定时常数计算公式得到定时常数为 16 进制的 FE25.

1

三、成果预测: 成果预测: 自选一首歌曲,按下启动键后,能自动演奏完该乐曲。1》能够发出 1.2.3.4.5.6.7 等七个音符。2》自选一首歌曲,按下启动键后,能自动演奏完该乐曲。 四、时间进度计划: 时间进度计划: 1.2007年11月14日: 任务书下达日期 2.2007 年 12 月 30 日:仔细阅读设计任务书,明确设计任务与要求,收集设计资料, 准备设计工具。 3.2008 年 1 月 1 日~2008 年 2 月 15 日:确定控制方案,写出指令程序清单;设计控 制系统的硬件接线图。 4.2008 年 2 月 15 日~2008 年 2 月 20 日:整合与完善。 5. 2008 年 2 月 20 日~2008 年 3 月 1 日:上机调试并编写设计说明书,准备答辩。 指导教师意见。 指导教师意见。

指导教师: 年 月 日 说明:开题报告作为毕业设计(论文)答辩委员会对学生答辩资格审查的依据材料之一, 此报告应在导师指导下,由学生填写,将作为毕业设计(论文)成绩考查的重要依据,经 导师审查后签署意见生效。 (根据需要自行调整开题报告的页面)

2





摘要··············································································································································Ⅰ Abstract ·······································································································································Ⅱ 第一章 绪论··································································································································6 1. 1 课题背景························································································································6 1. 2 本文所做的主要工作·····································································································7 第二章 系统方案设计及主控芯片介绍 ····················································································8 2. 1 主体方案·························································································································8 2. 1 电子琴的总体框图·········································································································8 2 2. 主控芯片 AT89C51 的结构与原理···············································································10 2.2.1 2.2.2 AT89C51 单片机的结构···················································································10 AT89C51 单片机的工作原理 ·········································································15

第三章 硬件电路设计················································································································17 3. 1 发声电路························································································································17 3. 2 数码管显示电路···········································································································19 3. 3 电源电路设计···············································································································20 3. 键盘设计························································································································21 4 第四章 乐曲声音算法················································································································23 4. 音乐频率的实现············································································································23 1 4. 音乐节拍的实现·············································································································24 2 第五章 系统软件设计················································································································28 1 5. 系统程序流程················································································································28 5. 2 键盘扫描程序流程图··································································································29

总结 ············································································································································30 致谢 ············································································································································31 参考文献 ····································································································································32 附录 1 ··········································································································································33 程序··············································································································································34

3





在现代各种生活中,电子琴作为一种音乐型玩具 ,广泛用于与人们的日常 生活中。市场上有各种各样的电子琴。特别是日本产的,音质优美,它是有专门 的音乐控制芯片制造的。由于其价格较贵,无法大面积普及,且功能单一。用 89c51 作为主控中心, 研制一种简易的微型电子琴, 尽可能地体现较好的音质来, 是一种可做的尝试。 以单片机为核心设计的简易电子琴系统,由按键扫描电路、声音产生驱动电 路、复位电路、等模块组成的,是一种比较实用、廉价的电子玩具。 本论文所设计的简易电子琴,它分为两大部分,硬件电路的设计和软件的设 计。 硬件电路的设计以 AT89S51 单片机为控制主板, 辅以外围的扩展设备蜂鸣器、 矩阵键盘、共阳数码管,形成一个可被控制的显示系统。软件设计通过控制单片 机内部的定时器 T0 来产生不同频率的方波,驱动喇叭发出不同音节的声音.再利 用延迟来控制发音时间的长短,即可控制音调中的节拍.把乐谱中的音符对应的 频率转换为定时常数,把相应的节拍变换为定时常数,然后作成表格存放在储存 器中,由程序查表得到定时常数和延时常数,分别用以控制定时器产生方波的频 率和该频率方波的持续时间.当延迟常数到时,再查下一个音符的定时常数和延 迟常数 .依 次进行 下 去,就 可演 奏悦耳 动 听的音 乐. 主要实 现 1》能 够发出 1.2.3.4.5.6.7 等七个音符。2》能自动演奏完,自选的一首歌曲两种功能。

关键字: 关键字:简易电子琴 单片机

矩阵键盘

定时器

4

Abstract In the modern variety of life, the flower as a musical toys, widely used and people's daily life. There are all kinds of market flower. Japan is particularly middle, sounding, it is a dedicated music control of the chip maker. Because of its expensive price, not a popular area, and single function. 89 c51 used as a control centre, the development of a simple micro-organ, as far as possible, to reflect a better quality, is an attempt to do. MCU core design for a simple flower, from the button scanning circuit, a driver circuit voice, reset circuit, such as modules, is a more practical and inexpensive electronic toys. In this paper the design of simple flower, which are divided into two parts, hardware circuit design and software design. Hardware circuit design to AT89S51 microcontroller for the control board, supported by the expansion of the external equipment buzzer, matrix keyboard, a total of Yang digital form can be controlled by a display system. SCM software designed to control the internal timer T0 to produce different frequency square wave, driving a different syllable speaker's voice. Reuse delayed to control the length of pronunciation, pitch in to control the beat. Notation in the notes converted to thecorresponding frequency timing constant, corresponding to the beats of the time constant transformation, and then make tables stored in memory, table look-up procedures are regularly by the constant and delay constant, a timer were used to control the square wave The frequency square-wave frequency and duration. constant when the delay time, a note to check the timing of constant delays and constant. were out of the question, can perform really pleasant to hear music. main one "can be issued 1.2.3.4.5.6 .7 seven notes. 2 "can automatically perform End, the one-on-demand songs two functions.

Key word :Simple flower

MCU

Matrix keyboard

Timer

5

绪论
1.1 课题背景
单片机自 1976 年由 Intel 公司推出 MCS-48 开始,迄今已有二十多年了。由 于单片机集成度高、功能强、可靠性高、体积小、功耗地、使用方便、价格低廉 等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在, 无所不为” 。单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅 速发展到家用消费产品、办公自动化、汽车电子、PC 机外围以及网络通讯等广 大领域。 按照内部数据通道的宽度,单片机可分为 4 位、8 位、16 位及 32 位等。单 片机的中央处理器(CPU)和通用微处理器基本相同,只是增设了“面向控制” 的处理功能。例如:位处理、查表、多种地址访问方式、多种跳转、乘除法运算、 状态监测、中断处理等,增强了实时性。 单片机有两种基本结构形式:一种是在通用微型计算机中广泛采用的,将程 序存储器和数据存储器合用一个存储器空间的结构,称为普林斯顿(Princeton) 结构。另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,一般需 要较大的程序存储器, 目前的单片机以采用程序存储器和数据存储器截然分开的 结构为多。 单片微型计算机自从问世以来,作为微型计算机一个很重要的分支,应用广 泛,发展迅速,尤其是美国 Intel 公司生产的 MCS-51 系列单片机,由于其具有 集成度高,处理功能强,可靠性高,系统结构简单,价格低廉等优点,在智能仪 器仪表、工业检测控制、机电一体化等方面取得了令人瞩目的成就。 本文讨论的单片机多功能定时器的核心是目前应用极为广泛的 51 系列单 片机,配置了外围设备,构成了一个可编程的计时定时系统,具有体积小,可靠 性高,功能强等特点。不仅能满足所需要求而且还有很多功能可供开发,有着广 泛的应用领域。 20 世纪 80 年代中期以后,Intel 公司以专利转让的形式把 8051 内核技术 转让给许多半导体芯片生产厂家, ATMEL、 如 PHILIPS、 ANALOG、 DEVICES、 DALLAS 等。这些厂家生产的芯片是 MCS-51 系列的兼容产品,准确地说是与 MCS-51 指令 系统兼容的单片机。这些兼容机与 8051 的系统结构(主要是指令系统)相同, 采用 CMOS 工艺, 因而, 常用 80C51 系列来称呼所有具有 8051 指令系统的单片机, 它们对 8051 单片机一般都作了一些扩充,更有特点。其功能和市场竞争力更强, 不该把它们直接称呼为 MCS-51 系列单片机,因为 MCS 只是 Intel 公司专用的单 片机系列型号。MCS-51 系列及 80C51 单片机有多种品种。它们的引脚及指令系 统相互兼容,主要在内部结构上有些区别。目前使用的 MCS-51 系列单片机及其
6

兼容产品通常分成以下几类:基本型、增强型、低功耗型、专用型、超 8 位型、 片内闪烁存储器型。 本设计主要是通过对电子琴主体部分的电路进行模仿设计, 达到电子琴固 有的基本功能,故叫简易电子琴。利用定时器可发出不同频率的脉冲,不同频率 的脉冲经喇叭驱动电路放大滤波后,就会发出不同音调。其次,定时器按设置的 定时参数产生中断,这一次中断发出脉冲低电平,下一次反转发出脉冲高电平, 由于定时参数不同,就发出不同频率的脉冲,本设计中按键一次,会发出 50 个 脉冲,松开后随之延时 10 个脉冲,但在延时的 10 个脉冲期间继续检测键盘,若 此时又有键被按下,若被按下的仍为原键则声音不变,否则键盘会译出被按下的 另一个键的音调。 我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片 机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波, 接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的 持续时间,就能改变输出频率,从而改变音调。

1.2 本文所做的主要工作
本次设计的简易电子琴在其功能上能用单片机控制蜂鸣器发声,拟合出乐 曲曲调。能够相应按键,进行简单的乐曲弹奏。 本次设计是以单片机为基础,在论文中大概讲述了一下单片机的原理。 在 此次设计中,简易电子琴的外围设备主要有以下二个部分: 1、发声器件的选择:发声器件比较多,例如喇叭、蜂鸣器、电铃等。这次 发声元件采用蜂鸣器,蜂鸣器价格便宜,控制简单,广泛用于各种电子产品和玩 具。本设计为保证声音的响亮,通过三极管进行电流放大,增加声音的响度。 2、按键部分的设计:在本电路的按键接口设计,考虑到按键数量比较多, 为了节省 I/O 口资源,采用矩阵式键盘。通过软件实现 4*4 间盘扫描。 3、数码管显示电路:为指示出当前演奏的曲目标号和显示当前按下的键号, 我们采用 1 位数码管作为显示部件, 为了节省成本, 采用 I/O 口直接驱动数码管。 这样设计充分利用了单片机的资源,使此设计才功能上很丰富、完善。

7

系统方案设计及主控芯片介绍
按照系统的设计功能要求,初步确定设计系统由主控模块、发声模块,显 示模块,键盘接口模块 4 个部分组成,电路系统构成图 2.1 所示。主控芯片使用 80C51 系列单片机。发声模块使用的是蜂鸣器,低成本,配以放大电路,可以发 出响亮的声音。

2.1 主体方案
本文就是从单片机 AT89C51 入手, 通过使用 AT89C51 的内部的可编程定时 器/计数器,结合对外接晶振的调节来确定一个合适的振荡周期,从而确定出内 部的机器周期。该简易电子琴通过控制单片机内部的定时器 T0 来产生不同频率 的方波,驱动喇叭发出不同音节的声音.再利用延迟来控制发音时间的长短,即可 控制音调中的节拍.把乐谱中的音符对应的频率转换为定时常数,把相应的节拍 变换为定时常数,然后作成表格存放在储存器中,由程序查表得到定时常数和延 时常数,分别用以控制定时器产生方波的频率和该频率方波的持续时间.当延迟 常数到时,再查下一个音符的定时常数和延迟常数.依次进行下去,就可演奏悦耳 动听的音乐。 其电路图见附录 1 所示。

键扫描电路 显示电路 (89C51) 主控模块 发声电路

2.2 主控器 AT89C51 的结构及工作原理 2.2.1 AT89C51 单片机的结构 一、 单片机的主要性能特点 ATMEL 公司生产的 AT89C51 单片机采用高性能的静态 80C51 设计,欲先进工 艺制造,并带有非易失性 FLASH 程序储存器。它是一它是一种高性能,低功耗的 8 位 CMOS 微处理芯片, 。主要性能特点有: ●8KB Flash ROM,可以擦除 1000 次以上。数据保存 10 年, ●256 字节内部 RAM ●电源控制模式:时钟可停止和恢复;空闲模式;掉电模式。 ●6 个中断源
8

●4 个中断优先级 ●4 个 8 位 I/O 口 ●全双工增强型 UART ●3 个 16 位定时/计数器,T9,T1 和增加的 T2 ●全静态工作方式:0~24MHz 二 、单片机的引脚功能 89C51 单片机的引脚图见图 2.2 所示,其中有 2 条主电源引脚,2 条外接晶体 引脚,4 条控制或其他电源复用引脚,32 条 I/O 引脚。 下面分别叙述这些引脚的功 能。

图 2.2 89C51 单片机的引脚图 ●VCC(40 脚) :接电源+5V。 ●VSS(20 脚) :接地 也就是 GND。 ●XTAL1 (19 脚) 和 XATL2(18 脚) :接振荡电路,单片机是一种时序电 路 必须有脉冲信号才能工作 在它的内部有一个时钟产生电路。 ●PSEN(29 脚) :片外 ROM 选通信号,低电平有效.他同样可以驱动 8 个 LSTTL 输入。 ●ALE/PROG(30 脚) :地址锁存信号输出端/EPROM 编程脉冲输入端。为了 使地址与数据不混淆,通常是先送地址再传送数据。ALE 将 P0 口输出的低 8 位地 址锁存,从而实现低位地址与数据的分离。 ●RST/VPD(9 脚) :复位信号输入端/备用电源输入端。当振荡器运行时, 在此引脚上出现两个机器周期以上的高电平,将使单片机复位。VCC 掉电期间, 此引脚可以接上备用电源,以保存内部 RAM 的数据不丢失;当 VCC 低于规定水平 时,VPD 向内部 RAM 提供备用电源。
9

●EA/VPP(31) :内/外部 ROM 选择端。当 EA 端保持高电平时,不管是否有 内部程序存储器,只访问外部程序存储器。当 EA 端保持低电平时,访问内部程 序存储器。 ●P0 口(P0.0~P0.7 共 8 个引脚,既 39-32 脚) :双向 三态 I/O 口。在访 问外部存储器时,可分别用低 8 位地址线和 8 位数据线;P0 口可以驱动 8 个 LSTTL P1 输入。 ●P1 口(P1.0~P1.7 共 8 个引脚,既 1-8 脚)P1 口是一个带有内部上拉电 阻的 8 位双向 I/0 口,在 EPROM 编程和程序验证时,它接受低 8 位地址,能驱动 4 个 LSTTL 输入。 ●P2 口(P2.0~P2.7 共 8 个引脚,既 21-28 脚) :P2 口是一个带有内部上拉 电阻的 8 位双向 I/0 口, 在 EPROM 编程和程序验证时,它接受高 8 位地址,能驱 动 4 个 LSTTL 输入。 ●P3 口 (P0.0~P0.7 共 8 个引脚,既 10-17 脚) :P3 口是一个带有内部上 拉电阻的 8 位双向 I/0 口。他是个多用途口。在这 8 个引脚里,其中 P3.2 的第 二功能是外部中断 0 申请输入端;P3.3 的第二功能是外部中断 1 申请输入端; P3.4 的第二功能是定时器 0 申请输入端。 三 、单片机内部结构及组成结构 单片机是由中央处理器 (CPU)片内数据存储器 、 (RAM)片内程序存储器 、 (ROM) 和输入输出接口(I/O 口)四大部分组成: ⑴ CPU 是单片机的核心部分。其作用是读入和分析每条指令,根据指令要 求控制各个部件执行相应的操作,它包括运算器和控制器两大部分:一是运算器 包括算术/逻辑部件(ALU)、累加器 A、暂存寄存器、寄存器 B、程序状态寄存器 (PSW) ,十进制调整电路等。运算器主要用于实现算术/逻辑运算及位操作运算。 二是控制器包括时钟发生器,定时控制逻辑,指令寄存器,指令译码器,程序计数 器 PC,程序地址寄存器,数据指令寄存器 DPTR 和堆栈指针 SP 等。控制器是用来 统一指挥和控制计算机进行工作的部件。 ⑵ 单片机存储器, 单片机在物理上有 4 个存储空间:片内程序存储器和片外 程序存储器, 片内数据存储器和片外数据存储器.8051 片内有 4KB 的程序存储器 和 256B 数据存储器。下面分别介绍程序存储器和数据存储器。程序存储器用于 存放编好的程序、表格和常数。8051 单片机内部有 4KB 的片内 ROM 和 64KB 的片 外 ROM,两者是统一编址的。 数据存储器 8051 内部有 256B RAM,片外最多可以扩展 64KB RAM。片内 256 KB RAM 按其功能划分两部分:低 128B 位片内数据 RAM 区,地址空间为 00H~7FH;高 128B 位特殊功能寄存器的区域.地址空间为 80H~FFH。内部数据存储器低 128 单 元,8051 内部低 128B RAM 是真正的 RAM,可用于暂存运算结果及标志位等.按其 用途可以分为三部分:工作寄存器区;位寻址区;用户 RAM 区。 内部 RAM 的高于 128 单元是供给特殊功能寄存器使用,因此称特殊功能寄存器: ① 指令寄存器 IR 和指令译码器 ID。指令寄存器是存放指令代码的地方。当 执行指令时,CPU 把从程序存储器中读取的指令代码送入指令寄存器,然后指令 译码器译码后由定时控制电路发生相应的控制信号,最终完成指令所规定的操 作。 ② 程序计数器 PC 是一个 16 位的计数器。 用于存放将要执行的指令地址,CPU 每读取指令的一个字节 PC 便自动加 1,指向本指令的下一个字节或下一条指令地 址,PC 可以寻址 64KB 范围 ROM。
10

③ 累加器是一个最常用的 8 位特殊功能寄存器,它可以用于存放操作数,也 没有用于来存放运算结果。 ④ 寄存器 B 是一个 8 位寄存器,主要用于乘法和除法的运算, ⑤ 状态字寄存器 PSW 是 8 位寄存器,用于存放程序运行状态信息,其格式如下 图 2.3 所示 。

图 2.3 程序状态字 PSW CY(PSW.7) :进位标志位。在进行加法(或减法)运算时,若运算结果最高 位有进位或借位, CY 自动置“1”, 则 否则 CY 置“0”, 在进行布尔操作运算时, CY(简称 C)作为布尔处理器。 AC(PSW.6):辅助进位标志位。当进行加法或减法时,若低 4 位向高 4 位有 进位(或借位)时,AC 被置“1”,否则 AC 被置“0”。在十进制调整指令中 AC 还作为十进制调整的判别位。 F0(PSW.5):用户标志位。用户可用软件对 F0 位置“1”或清“0”以决定程 序的流向。 OV((PSW.2)):溢出标志位,当运算结果溢出时 OV 为“1”,否则为“0”, 此标志位反映了运算结果是否溢出。 P(PSW.0) :奇偶标志位。MCS-51 单片机采用的是偶校验。当累加器 A 中 “1”的个数为奇数时,P 置“1”,否则 P 置“0”。此位反映累加器 A 中内容 “1”的奇偶性,它常常用于机间通信。 RS1(PSW.4)、RS0(PSW.3):工作寄存器区选择位。用来选择当前工作的寄 存器区。用户通过改变 RS1 、RS0 的内容来选择当前工作寄存器区。 ⑥ 堆栈指针 SP ⑦ 数据指针寄存器 DPTR 是一个 16 位寄存器,由高位字节 DPH 和低位字节 DPL 组成,用来存放 16 位数据存储器的地址,以便对外部数据存储器 RAM 数据进 行读写。 ⑶ 工作寄存器 MCS-51 有 32 个工作寄存器,分为四个区(或组)每个区为 8 个寄存器 R0、 R1、R2、R3、R4、R5、R6、R7,每一时刻只有一个区工作。由 PSW 寄存器中的 RS1、RS0 的值来决定当前的工作区: 当 RS1 RS0=00 时,0 区为工作区, RS1 RS0=01 时,1 区为工作区 RS1 RS0=10 时,2 区为工作区 RS1 RS0=11 时,3 区为工作区 这 32 个工作寄存器不但有它们的名称和区号,而且还有地址。00H-1FH 共 32 个单元。 00H~07H 为 0 区,分别对应 R0~R7 08H~0FH 为 1 区,分别对应 R0~R7 10H~17H 为 2 区,分别对应 R0~R7 18H~1FH 为 3 区,分别对应 R0~R7
11

这 32 个单元为内部数据存储器(即片内 RAM)的 00H~1FH 存贮空间,这与普通 微机中的通用寄存器基本相同,所不同的是,普通微机的通用寄存器只有名称, 不占有 RAM 空间,因此只有名字,没有对应的地址;而 MCS-51 单片机的工作寄 存器 R0~R7 既可以用名字也可以用它的地址来表示。其中 R0、R1 寄存器除做工 作寄存器外还常做间址寻址的地址指针 ⑷单片机的输入/输出端口 C51 中有 4 个8位并行输入/输出端口记为 P0、P1、P2、P3 共 32 根线。每 个并行 I/O 口都可以用作输入/输出,所以称它们为双向 I/O 口。 ●P0 口有8位, P0 口有两个用途,一是作为普通 I/O 口使用;二是作为地址/ 数据总线使用。P0 口作为普通 I/O 口使用: 当控制线 C=0 时, MUX 开关向下, P0 口作通用 I/O 口。这时与门输入为 0,场效应管 VT1 截止。P0 口作为分时复用的 地址/数据总线: P0 口一般是作为地址/数据总线,这时控制线 C=1,MUX 开关向上, 使数据/地址经反向器与场效应管 VT2 接通,当数据输入时,数据信号从引脚通过 输入缓冲器 2 进入内部总线。 ●P1 口是一个专用的 8 位准双向 I/O 口,只具有通用输入/输出口功能,每 一位都能设定为输入或输出。P1 口的驱动部分与 P0 口不同,内部有上拉电阻。 ●P2 口是一个 8 位准双向 I/O 口,具有两种功能。一是作通用 I/O 口用,与 P1 口相同。二是作扩展系统的高 8 位地址总线。 ●P3 口也是一个 8 位准双向 I/O 口,不但可以作通用 I/O 口使用,还具有第 二功能。当工作在第二功能时,每位都具有新的功能,当 P3 口作通用 I/O 口时, 与 P1 口相同。 2.2.2 单片机的工作原理 一、 振荡器与时钟电路 时钟电路用于产生单片机工作所需要的时钟信号。AT89C51 的时钟产生方法 有以下两种: ⑴内部时钟方式 利用芯片内部的振荡器,然后在引脚 XTAL1 和引脚 XTAL2 两端接晶体或陶 瓷谐振器, 就构成了稳定的自激振荡器, 其发出的脉冲直接送入内部的时钟电路, 如图 2.4(在图中的外接线,上面的外接线接引脚 XTAL1,下面的外接线接引脚 XTAL2)外接晶振时,C1 和 C2 的值通常选择我 30pF 左右;外接陶瓷谐振器时 C1 和 C2 的值大约为 47pF。C1、C2 对频率有微调作用,晶体或陶瓷谐振器的频率范 围可在 1.2~12MHz 之间选择。为了减少寄生电容,更好地保证振荡器稳定、可靠 地工作,振荡器和电容应尽可能安装得与单片机芯片靠近。

图 2.4

单片机外接振荡电路
12

⑵外部时钟方式 此方式是利用外部振荡脉冲接入 XTAL1 或 XTAL2。CHMOS(互补金属氧化物 HMOS)是 CMOS 和 HMOS(高密度沟道 MOS 工艺)的结合,除了保持 HMOS 高速度和高 密度之外,还有 CMOS 低功耗的特点.两类器件的功能是完全兼容的,区别在 CHMOS 器件具有低功耗的特点.它所消耗的电流比 HMOS 器件少很多,主要在于其采用了 两种降低功耗的方式:空闲方式和掉电方式.CHMOS 器件在掉电方式(CPU 停止工 作,片内 RAM 的数据继续保持)下时,消耗的电流可低于 10μA.采用 CHMOS 的器件 在编号中用一个 C 来加以区别: 如 80C51,80C31 等. 外部时钟信号通过一个二分频的触发器而成为内部的时钟信号,要求高、低电平 的持续时间都大于 20ns,一般为频率低于 12Hz 的方波。这种方式适用于多块芯 片同时工作,便于同步。片内时钟发生器就是上述的二分频触发器,它向芯片提 供了一个 2 节拍的时钟信号。 根据以上两种方式的特点,在次设计中从而采用了第一种方式。第一种方式 比第二种更简洁为次设计而变的简单化。 其图 2.5 就是本次设计中时钟信号产生 的外部电路图。其中电容值所选用的是 30Pf,为了提高秒计时的精确度,采用 12MHZ 的晶振。 二、 单片机的工作方式 单片机有三种工作方式:复位方式、程序执行方式以及节电工作方式。 ⑴单片机复位方式: 单片机复位方式有上简单复位电路和采用专用复位电路芯片构成复位电路 两种。简单复位电路有上电复位和手动复位。不管那种方式都要保证在 RESET 引脚上提供 10ms 以上的稳定高电压。本次设计中采用的是按键式复位电路。 ⑵程序执行方式: (a)连续执行方式 (b)单步执行方式 ⑶节电工作方式: (a)HMOS 单片机的掉电工作方式 (b)CHMOS 单片机的节电工作方式 三 、单片机外部并行扩展原理 单片微机是通过芯片的引脚进行系统扩展的。 80C51 系列带总线的单片微机芯片引脚可以构成图 8-1 所示的三总线结 构.即地址总线(AB)数据总线(DB)和控制总线(CB) 。具有总线的外部芯片 都通过这三组总线进行扩展。 (1)地址总线(AB) 地址总线由单片微机 P0 口提供 低 8 位地址 A0~A7,P2 口提供高 8 位地址 A8~A15。 口是地址总线低 8 位和 8 位数据总线复用口, P0 只能分时用作地址线。 故 P0 口输出的低 8 位地址 A0~A7 必须用锁存器锁存。 锁存器的锁存控制信号为单片微机 ALE 引脚输出的控制信号。在 ALE 的下降 沿将 P0 口输出的地址 A0~A7 锁存。P0、P2 口在系统扩展中用做地址线后便不 能作为一般 I/O 口使用。由于地址总线宽度为 16 位,故可寻址范围为 64 KB。 (2)数据总线(DB) 数据总线由 P0 口提供,用 D0~D7 表示。P0 口为三态双向 口为三态双 向口,是应用系统中使用最为频繁的通道。所有单片微机与外部交换的数据、指 令、信息,除少数可直接通过 P1 口外,全部通过 P0 口传送。
13

数据总线是并连到多个连接的外围芯片的数据线上, 而在同一时间里只能够 有一个是有效的数据传送通道。哪个芯片的数据通道有效,则由地址线控制各个 芯片的片选线来选择。 (3)控制总线(CB) 控制总线包括片外系统扩展用控制线和片外信号对单片微机的控制线。 MCS—51 系列中.有 5 个中断源(或 6 个中断源),如图所示。它们可分为 2 个优先级.其中每一个中断源的优先级都可以由程序排定。5 个中断源的中断要 求是否会得到响应,受允许中断寄存器 IE 中各位的控制;它们的优先级分别由 中断优先级寄存器 IP 的各位确定;同—优先级内的各中断源同时要求中断时, 还要靠内部的查询逻辑来确定响应的次序,不同的中断源有不同的中断向量。52 子系列的中断系统与此类同,只不过增加了一个中断源。 1.允许中断寄村器 IE (1)EA(IE.7>总允许位。EA=0.禁止一切中断。EA=l,则每个中断源 是允许还是禁止,分别由各自的允许位确定。 (2)一(IE 6)保留位。 (3)ET2(IE.5)定时器 2 中断允许位。ET2=0,禁止定时器 2 中断。 (4)ES(IE.4)串行口中断允许位。ES=0,禁止串行口中断。 (5)ETl(IE.3)定时器 1 中断允许这。ET1=0,禁止定时器 1 中断。 (6)EXl(IE.2)外部中断 l 允许位。EX1=0,禁止外部中断 1。 (7)ET0(IE.1)定时器 0 中断允许位。ET0=0,禁止定时器 0 中断。 (8)EX0(IE .0)外部中断 0 允许位。EX0=0,禁止外部中断 0 2.中断优先级寄存器 IP MCS—51 的中断分为 2 个优先级。每个中断源的优先级都可以通过中断 优先级寄存器 IP 中的相应位来设定。 其中:(1)一(IP.7)保留位。 、 (2)一(IP .6)保留位。 (3)PT2(IP.5)定时器 2 中断优先级设定位。PT2=l,设定为高优先级。 (4PS(1P.4)串行口中断优先级设定位。PS=1,设定为高优先级 o (5)PT1(1P.3)定时器 1 中断优先级设定位。PTl=1.设定为高优先级。 (6)PXl(IP.2)外部中断 1 优先级设定位。PXl=1,设定为高优先级。 (7)PT0(IP.l)定时器 0 中断优先级设定位。PT0=1,设定为高优先级。 (8)PX0(1P0)外部中断 0 优先级设定位。PX0=1,设定为高优先级。 3.优先级结构 靠 IP 寄存器把各中断源的优先级分为高低两级。它们遵循这样两条基本 规则: (1)低优先级中断可被高优先级中断所中断,反之不能; (2)一种中断(不管是什么优先级)一旦得到响应,与它同级的中断不能再中 断它。 为了实现这两条规则,中断系统内部包含两个不可寻址的“优先级激活”触 发器。其中一个触发器指示某高优先级的中断正在得到服务,所有后来的中断都 被阻断。另一个触发器指示某低优先级的中断正得到服务,所有同级的中断都被 阻断,但不阻断高优先级的中断。 当同时收到几个同一优先级的中断要求时,哪一个要求得到服务,取决于内部 的查询顺序,相当于在每个优先级内,还同时存在另一个辅助优先结构。如;
14

中断源 外部中断 0 定时器/计数器 0 溢出 外部中断 1 定时器/计数器 1 溢出 串行口 定时器/计数器 2 溢出

同级内的优先权 最高

最低

在每一机器周期中,所有中断源都顺序地被检查一遍;这样到任一周期的 S6 状态时,找到了所有已激活的中断请求,并排好了优先权。在下一机器周期 的 S1 状态,只要不受阻断就开始响应其中最高优先级的中断请求。若发生下列 情况,中断响应会受到阻断: (1)同级或高优先级的中断已在进行中; (2)正在执行的指令,尚未完成其最后一个机器周期(换言之,正在执行的 指令完成前,任何中断请求都得不到响应); (3)正在执行的是一条 RETI 或者访问专用寄存器 IE 或 IP 的指令(换言 之,在 RETI 或者读写 IE 或 IP 之后,不会马上响应中断请求,而至少在执行一 条其他指令之后才会响应)。 若存在上述任一种情况,中断查询结果就被取消。否则.在紧接着的下一个 机器周期,中断查询结果变为有效。 4.中断响应协议 当某中断源提出中断请求后,作为应答,CPU 首先使相应的“优先级激活” 触发器置位,以阻断同级和低级的中断。然后,根据中断源的类别,在硬件的控 制下,程序转向相应的向量单元,执行中断服务子程序。 硬件中断服务子程序调用时,把当时程序计数器 PC 的内容压入堆栈(在 MCS —5l 中, 是 16 垃的, PC 占用了 2 个字节, 没有自动保存程序状态字 PSW 的内容), 同时还根据中断的来源,把相应的向量单元地址装入 PC 中。这些向量地址是: 中断源 向量单元 外部中断 0 0003H 定时器 0 溢出 000BH 外部中断 1 00l3H 定时器 1 溢出 001BH 串行口 0023H 定时器 2 溢出或 T2EX 端出现负跳变 002BH 中断服务子程序的最后一条指令应是 RETI(中断返回)。RETI 指令将清除” 优先级激活”触发器(该触发器在响应中断时被置位)。然后由堆栈弹出两个字节 (下一条指令地址)装入到 PC 中。 5.外部中断 外部中断的激活方式分为两种:一种是电平激活.另一种是边沿激活。这两 种方式可以靠 TCON 寄存器中的中断方式位 ITI 或 IT0 来控制。若 ITX=0(X 为 0
15

或 l,后文中用到类同的符号,其含意相似),则采用电平激活方式:在 INTx 引 脚上检测到低电平,将触发外部中断。若 ITx=1.则采用边沿激活方式:在相 继的两个周期中,对 INTx 引脚进行连续两次采样,若第一次采样值为高,第二 次为低,则 TCON 寄存器中的中断请求标志 IEx 被置 1,以请求中断。 由于外部中断引脚每个机器周期被采样一次,为确保采样,由引脚 INTx 输 入的信号应至少保持一个机器周期,即 12 个振荡器周期。如果外部中断为边沿 激活方式,则引脚处的高电平和低电平值至少各保持一个机器周期,才能确保 CPU 检测到电平的跳变,而把中断请求标志 IEx 置 1。 如果采用电平激活外部中断方式,外部中断源应一直保持中断请求有效.直 至所请求的中断得到响应时为止。 6 .中断请求的撤除 CPU 响应某中断请求后,在中断返回(RETI)前,该中断请求应该撤除,否则 会引起另一次中断。 对于定时器 0 或 1 溢出中断,CPU 在响应中断后,就用硬件清除了有关的 中断请求标志 TF0(TCON.5)或 TFl(TCON.?),即中断请求是自动撤除的,无需采 取其他措施。 对于边沿激活的外部中断,CPU 在响应中断后,也甩硬件清除了有关的中断 请求标志 IE0(TCON.1),或 IEl(TCON.3), 自动撤除了中断请求。 对于电平激活的外部中断, 由于在硬件上, CPU 对 INT 0 和 INT 1 引脚的信号 完全没有控制(在专用寄存器中,没有相应的中断请求标志),也不像某些微处理 机那样.响应中断后会自动发出一个应答信号。因此在 Mc5—5l 的用户系统中, 要另外采取撤除外部中断的措施。例如,可以利用单稳态触发器对中断源信号进 行整形,使之符合要求。 7.中断响应时间 现以外部中断为例,说明中断响应的最短时间。在每个机器周期的 S5P2,

INT 0 和 INT 1 端的电平被锁到内部保持寄存器中, 而实际上在下一个周期才会查
询这些值。如果中断请求有效,一般情况下,下一条要执行的指令将是一条硬件 子程序调用指令, 调用所要求的服务程序。 调用本身要花费两个机器周期。 这样, 从外部中断请求有效到开始执行服务程序的第一条指令,中间要隔 3 个周期,这 是最短的响应时间。 如果发生了第 3 节所述的 3 种情况之一,那么中断请求受阻,中断响应时间 会更长些。如果一个同级的或高优先级的中断已经在进行,则很显然,附加的等 待时间将取决正在进行的中断服务程序。 若正在执行的一条指令还没有进行到最 后一个周期,那么附加的等待时间不会超过 3 个周期,因为一条指令的最长执行 时间为 4 个周期(MUL 和 DIV)。如果正在执行的是 RETI 指令或者是访问 IE 或 IP 的指令,则附加的等待时间不会超过 5 个周期(为完成正在执行的指令,还需要 一个周期,加上为完成下一条指令所需要的最长时间——4 个周期,故最长为 5 个周期)。若系统中只有一个中断源,则响应时间在 3 个同期到 8 个周期之间。

16

系统硬件电路的设计
本章节将详细介绍本系统的硬件电路的各个部分, 并详细讲解设计依据和注意细 节。主体硬件图下图:

17

3.1 发声电路
P2.7 口控制继电器进而控制蜂鸣器工作。当时钟当前的时间和当前所执 行的时间表的时间一致时,相应得标志位为 1,P2.7 口输出高电平,控制三极管 闭合,从而合上开关,启动电铃进行打铃。打铃一定时间,标志位置 0,P2.7 输出低电平,三极管打开,蜂鸣器停止工作。例如,要产生 200HZ 的音频信号, 按图 1 接入喇叭 (若属临时实验, 也可将喇叭直接接在 P1 口线上) 实验程序为: , 其中子程序 DEL 为延时子程序,当 R3 为 1 时,延时时间约为 20us,R3 中存放延 时常数,对 200HZ 音频,其周期为 1/200 秒,即 5ms。这样,当 P1.4 的高电平 或低电平的持续时间为 2.5ms,即 R3 的时间常数取 2500/20=125(7DH)时,就能 发出 200HZ 的音调。将上述程序键入学习机,并不断修改 R3 的常数可以感到音 调的变化。乐曲中,每一音符对应着确定的频率,表 1 给出 C 调时各音符频率及 其相应的时间常数。 读者可以根据表 1 所提供的常数, 将其 16 进制代码送入 R3, 反复练习体会。根据表 1 可以奏出音符。仅这还不够,要准确奏出一首曲子,必 须准确地控制乐曲节奏,即一音符的持续时间。音符的节拍我们可以用定时器 T0 来控制,送入不同的初值,就可以产生不同的定时时间。便如某歌曲的节奏 为每分钟 94 拍,即一拍为 0.64 秒。其它节拍与时间的对应关系见表 2。但时, 由于 T0 的最大定时时间只能为 131 毫秒, 因此不可能直接用改变 T0 的时间初值 来实现不同节拍。我们可以用 T0 来产生 10 毫秒的时间基准,然后设置一个中断 计数器,通过判别中断计数器的值来控制节拍时间的长短。表 2 中也给出了各种 节拍所对应的时间常数。例如对 1/4 拍音符,定时时间为 0.16 秒,相应的时间 常数为 16 (即 10H) 对 3 拍音符, ; 定时时间为 1.92 秒, 相应时间长数为 192 (即 C0H) 。我们将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲 中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏, 就可以实现演奏效果。 此外, 结束符和体止符可以分别用代码 00H 和 FFH 来表示, 若查表结果为 00H,则表示曲子终了;若查表结果为 FFH,则产生相应的停顿效 果。为了产生手弹的节奏感,在某些音符(例如两个相同音符)音插入一个时间 单位的频率略有不同的音符。 电路图如下:

18

将某一首音乐的简谱变换成为常数表,计算机顺序调入时间常数并以中断 方式执行,从 P1.7 来输出方波驱动喇叭,发出不同音节的声音,节拍的控制可通 过调用 200Ms 延时子程序的次数来实现.单片机的晶振频率为 12MHz,乐谱中的 音符,频率及定时常数的关系:T0=2^16-1/2f*ti; 其中 f 为音符对应的频率;ti 为 内 部 计 时 一 次 所 用 时 间 . 例 如 : 音 调 1 对 应 的 频 率 524Hz, 其 半 周 期 T/2=1/2f=0.95Ms,用定时器 T0 方式 1 定时是器定时常数计算公式得到定时常数 为 16 进制的 FE25.

3.2 数码管显示电路
数码管显示器成本低,配置灵活,与单片机接口简单,在单片机应用系统中广泛 应用。 1.数码管的工作原理 数码管是由 8 个发光二极管构成的显示器件。在数码管中,若将二极管的阳 极连在一起,称为共阳极数码管;若将二极管的阴极连在一起,称为共阴极数码 管。本文用到的数码管均是共阴极的。当发光二极管导通时,它就会发光。每个 二极管就是一个笔划,若干个二极管发光时,就构成了一个显示字符。将单片机 的 I/O 口控制相应的芯片与数码管的 a-g 相连, 高电平的位对应的发光二极管亮, 这样,由 I/O 口输出不同的代码,就可以控制数码管显示不同的字符。例如:当 I/O 口控制芯片输出的代码是 00111111 时,数码管显示的字符为 0。这样形成的 显示字符的代码称为显示代码或段选码。
19

2.数码管显示器与单片机的接口电路

数码管显示器有两种工作方式,即静态显示方式和动态显示方式。 在静态显示方式下,每位数码管的 a-g 和 h 端与一个 8 位的 I/O 相连。要在 某一位数码管上显示字符时,只要从对应的 I/O 口输出并锁存其显示代码即可。 其特点是:数码管中的发光二极管恒定地导通或截止,直到显示字符改变为止。 动态显示方式的每位数码管都需要一个数据锁存器,因此,其硬件电路比较 复杂。但它的显示程序法常简单。选择动态显示方式,可以使耗电量更小。 在动态显示方式中,各位数码管的 a-h 并联在一起,与单片机系统的一个 I/O 口相连,从该 I/O 口输出显示代码。每只数码管的共阴极则与另一 I/O 口相 连,控制被点亮的位。动态显示方式的特点是:每一时刻只能有 1 位数码管被点 亮,各位依次轮流被点亮;对于每一位来讲,每隔一段时间点亮一次。为了每位 数码管能够充分被点亮,二极管应持续发光一段时间。利用发光二极管的余辉和 人眼的驻留效应,通过适当地调整每位数码管被点亮的时间间隔,可以观察到稳 定的显示输出。 由于选用的是 7 段译码器,因此没有用到数码管的 h 段,不能在数码管中显 示小数点。在时、分、秒的间隔处用了两个红发光二极管表示小数点。本设计数 码管采用了共阳极的工作方式,没有时间显示的功能。

3.3 电源电路设计
电源电路采用 7805 电源。通过变压器变压,再通过桥式整流,电容的滤波 作用, 稳压器的稳压作用, 可输出 5V 的稳定电压。 由于单片机的工作电压是 5V, 所以本电源电路刚好适合。

20

3.4 键盘设计
首先,确定键盘编码方案:采用。随后,确定键盘工作方式:采用中断或 查询方式输入键操作信息。然后,设计硬件电路。非编码键盘系统中,键闭合和 键释放的信息的获取,键抖动的消除,键值查找及一些保护措施的实施等任务, 均由软件来完成。本设计中采用的是编码矩阵式键盘。 一、编码键盘的键输入程序应完成的基本任务 1.监测有无键按下;键的闭合与否,反映在电压上就是呈现出高电平或低电 平,所以通过电平的高低状态的检测,便可确认按键按下与否. 2.判断是哪个键按下。 3.完成键处理任务。 二、从电路或软件的角度应解决的问题 1.消除抖动影响。键盘按键所用开关为机械弹性开关,利用了机械触点的合、 断作用。由于机械触点的的弹性作用,一个按键开关在闭合和断开的瞬间均有一 连串的抖动. 抖动时间的长短由按键的机械特性决定,一般为 5~10ms,这是一 个很重要的参数。抖动过程引起电平信号的波动,有可能令 CPU 误解为多次按键 操作,从而引起误处理。 为了确保 CPU 对一次按键动作只确认一次按键,必须消除抖动的影响。按键 的消抖, 通常有软件, 硬件两种消除方法这种方法只适用于键的数目较少的情况。 软件消抖:如果按键较多,硬件消抖将无法胜任,常采用软件消抖。通常采用软 件延时的方法:在第一次检测到有键按下时,执行一段延时 10ms 的子程序后, 再确认电平是否仍保持闭合状态电平,如果保持闭合状态电平,则确认真正有键 按下,进行相应处理工作,消除了抖动的影响。 (这种消除抖动影响的软件措施 是切实可行的。 ) 2.采取串键保护措施。 串键: 是指同时有一个以上的键按下, 串键会引起 CPU 错误响应。通常采取的策略:单键按下有效,多键同时按下无效。 3.处理连击。连击:是一次按键产生多次击键的效果。要有对按键释放的处 理,为了消除连击,使得一次按键只产生一次键功能的执行(不管一次按键持续 的时间多长,仅采样一个数据) 。否则的话,键功能程序的执行次数将是不可预 知,由按键时间决定。连击是可以利用的。连击对于用计数法设计的多功能键特 别有效。 三、键盘工作方式
21

单片机应用系统中,键盘扫描只是 CPU 的工作内容之一。CPU 忙于各项任 务时,如何兼顾键盘的输入,取决于键盘的工作方式。考虑仪表系统中 CPU 任务 的份量,来确定键盘的工作方式。键盘的工作方式选取的原则是:既要保证能及 时响应按键的操作,又不过多的占用 CPU 的工作时间。 键盘的工作方式有:查 询方式(编程扫描,定时扫描方式) 、中断扫描方式。 四、键盘电路结构 矩阵式键盘接口设计: 矩阵式键盘适用于按键数量较多的场合,由行线和列线组成,按键位于行列 的交叉点上。节省 I/O 口。矩阵键盘工作原理:行线通过上拉电阻接到+5V 上。 无按键,行线处于高电平状态,有键按下,行线电平状态将由与此行线相连的列 线电平决定。 列线电平为低, 则行线电平为低; 列线电平为高, 则行线电平为高。 用 AT89S51 的并行口 P1 接 4×4 矩阵键盘,以 P3.0-P3.3 作输入线,以 P3.4-P3.7 作输出线;在数码管上显示每个按键的“0-F”序号。对应的按键 的序号排列如图所示

按键的序号排列图

22

硬件电路原理图

1. 4×4 矩阵键盘识别处理 2. 每个按键有它的行值和列值 , 行值和列值的组合就是识别这个按键的编码。 矩阵的行线和列线分别通过两并行接口和 CPU 通信。 每个按键的状态同样需变成 数字量“0”和“1”,开关的一端(列线)通过电阻接 VCC,而接地是通过程序 输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个 键按下, 键的功能是什么; 还要消除按键在闭合或断开时的抖动。 两个并行口中, 一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描 值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。

乐曲声音算法
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我 们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片 机来产生不同的频率非常方便, 我们可以利用单片机的定时/计数器 T0 来产生这 样方波频率信号

音乐频率的实现 的实现: 4.1 音乐频率的实现:
1.要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以 2, 即 为半周期的时间,然后利用计时器计时此半周期时间,每当计时到后就将输出脉冲 的 I/O 反相,然后重复计时此半周期时间再对 I/O 反相,如此就可在 I/O 脚上得到 此频率的脉冲. 2.利用 8051 的内部计时器让其工作在计数模式 MODE1 下,改变计数值 TH0 及 TL0 以产生不同的频率.
23

3.例如以 6MHZ 晶振为例:要产生频率为 523HZ,其周期 T= 1/523= 1912us, 其半周期为 1912/2=956us,因此只要令计数器计时 956us/1us=956.所以在每计 数 956 次时将 I/O 反相,就可得到中音 DO(523HZ). 计数脉冲值与频率的关系公式如下: N=Fi+2+Fr N:计数值 Fi:内部计时一次 2us,以 6MHZ 晶振为例,故其频率为 500000HZ Fr:要产生的频率 4.其计数值的求法如下: T=65536-N=65536-Fi/2/Fr 例如:求低音 DO(261HZ),中音 DO(523HZ),高音 DO(1046HZ) 的计数值? 设 K=65536 F=500000=Fi=0.5MHZ T=65536-N=65536-Fi/2/Fr=65536-500000/2/Fr=65536-250000/Fr 低音 DO 的 T=65536-250000/262=64582 中音 DO 的 T=65536-250000/523=65058 高音 DO 的 T=65536-250000/1047=65297 5. C 调各音符频率与计数值 T 的对照表: 音符 频率 HZ 6MHZ 十六进制值 音符 频率 HZ 6MHZ 十六进制值 低 1DO 262 64582 FC46 #4FA# 740 65198 FEAE #1DO# 277 64634 FC7A 中 5SO 784 65217 FEC1 低 2RE 294 64686 FCAE #5SO# 831 65235 FED3 #2RE# 311 64732 FCDC 中 6LA 880 65252 FEE4 低 3M 330 64779 FD0B #6LA# 932 65268 FEF4 低 4FA 349 64820 FD34 中 7SI 988 65283 FF03 #4FA# 370 64860 FD5C 高 1DO 1046 65297 FF11 低 5SO 392 64898 FD82 #DO# 1109 65311 FF1F #5SO# 415 64934 FDA6 高 2RE 1175 65323 FF2B 低 6LA 440 64968 FDC8 #2RE# 1245 65335 FF37 #6LA# 466 65000 FDE8 高 3M 1318 65346 FF42 低 7SI 494 65030 FE06 高 4FA 1397 65357 FF4D 中 1DO 523 65058 FE22 #4FA# 1480 65367 FF57 #1DO# 554 65085 FE3D 高 5SO 1568 65377 FF61 中 2RE 578 65103 FE4F #5S0# 1661 65385 FF69 #2RE# 622 65134 FE6E 高 6LA 1760 65394 FF72 中 3M 659 65157 FE85 #6LA# 1865 65402 FF7A 中 4FA 698 65178 FE9A 高 7SI 1976 65409 FF81 "#"表示半音,用于上升或下降半个音

音乐节拍的实现: 节拍的实现 4.2 音乐节拍的实现:
每个音符使用 1 个字节,字节的高 4 位代表音符的高低,低 4 位代表音符的节拍, 如果 1 拍节为 0.4 秒则 1/4 拍是 0.1 秒,只要设定延迟时间就可求得节拍的时间, 再来我们假设 1/4 拍为 1 DELY 单位,则 1 拍应为 4 个 DELY,以此类推,只要求得 1/4 拍的 DELY 单位时间,其余的节拍就是它的倍数. 1/4 拍的延迟时间=0.187 秒
24

DELAY:MOV R7,#02H D2:MOV R4,#31H D3:MOV R3,#0F1H DJNZ R3,$ DJNZ R4,D3 DJNZ R7,D2 DJNZ R5,DELAY ;R5 存节拍数 RET 节拍与节拍码对照表 : 节拍码 节拍数(拍) 1 1/4 2 2/4 3 3/4 4 14 1 又 1/4 5 1 又 1/2 6 8 2 2 又 1/2 A C 3C 3 又 1/2 F

节拍码 1 2 3 4 5 6 8 A C F

节拍数(拍) 1/8 1/4 3/8 1/2 5/8 3/4 1 1 又 1/4 1 又 1/2 1 又 3/4

各调值 1/4 节拍的时间设定 各调值 1/8 节拍的时间设定 曲调值 DELAY 6MHZ(H) 曲调值 DELAY 6MHZ(H) 调 4/4 125 亳秒 3E 调 4/4 62 亳秒 1F 3/4 187 5D 3/4 94 2F 2/4 250 7D 2/4 125 3E 建立音乐的步骤: 1.先找出乐曲的最低音,最高音范围, 然后确定音符表首地址. 2.如把音符表建在 0151H,适用简谱范围为 低音 1 到 高音 1. 3.简谱码(音符) 为高 4 位, 节拍码( 节拍数) 为低 4 位, 音符节拍码放在程序的 0300H 处.本程 序有关约定:根据不同曲调,可以建立不同简谱音符表 0151H- 为一简谱音符表首 地址适用简谱范围 低音 1 到 高音 10159H- 为一简谱音符表首地址适用简谱范 围 低音 5 到 高音 5 0300H- 为第一首歌曲首地址,字节高位为音符代码,低位为 节拍代码组成简谱曲码. 003EH 为歌曲 DPH 高位首地址,0041H 为歌曲 DPL 低位 首地址 002FH 为节拍速度代码; 0073H 为音符表低位地址 ,高位地址为 01H,不 可改动 0047H 内容为该首放音二次,01 为放音 1 次. 008DH 改为 00H,则反复放 该首曲(调试时用).乐曲存放约定:曲码中 00H 表示上首曲结束标记;接著为下首 曲节拍速度值, 再接著为该首曲音符表首地址,然后才是乐曲曲码,全部乐曲结束 标记为连续两个单元是 00H 00H 各调值节拍时间代码表(6MHZ 晶振时)曲调值 节拍速度值 4/4 3EH 3/4 5DH 因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。现在以单片机 12MHZ 晶振为例,例出高中低音符与单片机计数 T0 相关的计数值如下表所示

25

音符 低1

频率 (HZ) 简谱码(T 值) DO 262 63628 277 294 311 330 349 370 392 415 440 466 494 523 554 587 622 659 698 63731 63835 63928 64021 64103 64185 64260 64331 64400 64463 64524 64580 64633 64684 64732 64777 64820

音符 # 4 FA# 中 5 SO # 5 SO# 中 6 LA #6 中 7 SI 高 1 DO # 1 DO# 高 2 RE # 2 RE# 高 3M 高 4 FA # 4 FA# 高 5 SO # 5 SO# 高 6 LA #6 高 7 SI

频率 (HZ) 简谱码(T 值) 740 64860 784 831 880 932 988 1046 1109 1175 1245 1318 1397 1480 1568 1661 1760 1865 1967 64898 64934 64968 64994 65030 65058 65085 65110 65134 65157 65178 65198 65217 65235 65252 65268 65283

#1 DO# 低 2 RE #2 RE# 低 3M 低 4 FA # 4 FA# 低 5 SO # 5 SO# 低 6 LA #6 低 7 SI 中 1 DO # 1 DO# 中 2 RE # 2 RE# 中 3M 中 4 FA

下面我们要为这个音符建立一个表格, 有助于单片机通过查表的方式来获得 相应的数据低音 0-19 之间,中音在 20-39 之间,高音在 40-59 之间

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,0 DW 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

26

2、音乐的音拍,一个节拍为单位(C 调)

曲调值

DELAY

曲调值

DELAY

调 4/4

125ms

调 4/4

62ms

调 3/4

187ms

调 3/4

94ms

调 2/4

250ms

调 2/4

125ms

对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。

下面将用 AT89S51 单片机产生一首“祝你平安”歌曲 。在这个程序中用到了两个 定时/计数器来完成的。其中 T0 用来产生音符频率,T1 用来产生音拍。

全部程序见论文尾部。

27

系统软件设计
系统程序流程如图所示: 5.1 系统程序流程如图所示:

程序开始

关闭定时器,进行 下一次琴键识别

读 P0 口的状态

延迟 10ms

Y

再读 P0 口的状态 判断是否是抖动 N 判断是几号琴键, 并跳转到相应的程序

查表得相应琴键 的定时初值

重装定时器 T0 处值

启动定时器 T0

对 P1.0 求反

中断返回 Y 等待中断,并判断此 次琴键是否被释放

主程序流程图

中断程序流程图
28

5 .2

键盘扫描程序流程图

29

6 总结
经过三个月的努力,简易电子琴的电路设计成功了,简易电子琴的设计有众 多的方法,此次选择了以单片机为基础的简易电子琴历,当然这和我们所学的专 业有很大的关系,首先我们所学的课程中有关电子硬件的知识占了多数,在大学 期间学习了数字逻辑、单片机原理等基础电子有关知识。 基于单片机原理的电 子琴大大简化了以前传统的音乐产生电路,使得元件得到减少,生产成本降低而 且性能也得到了提高,并且耗能也降低了。 以单片机基础铺以外部设备设计的简易电子琴, 它可以被制造成一个电子产 品,应用方便,可以广泛的应用与我们的日常生活中。伴随着科技水品的提高, 电子产品会朝着节能、使用寿命长,故障发生频率低、体积小、功能强大等方面 迅踊发展,而单片机的发展必然会促进其发展,在不久的将来,高性能的单片机 系统会在电子领域得到广泛应用, 所以现在对单片机进行初步的研究对以后个人 的发展很有帮助。 我通过收集、查阅与发声原理、声音的产生电路有关的文献资料以及仿真调 试软件的使用使我对单片机的应用前景有了深刻的了解。

30

致 谢
简易电子琴设计成功了,这期间经历了很多辛酸、困惑,虽然如此,但更多的 还是奋进和学习的乐趣,这里面不仅有同学的帮助,还有老师的指导,在这里我 特别要向我的导师——陶岚老师致以深深的谢意。 是她给了我这样一个有意义的 课题,是她在我设计课题时遇到问题给我讲解,是她给了我学习锻炼的好机会。 通过这次设计把单片机、 电子等有关知识进一步加深并运用到实践中,培养 了我们的动手能力,从现在就开始培养我们的独立设计能力,为我们在以后的工 作中打下良好的基础。 在这我十分感谢长沙航空职业技术学院的老师们给了我们 这次机会。由于本人知识程度有限,其中也许有不妥之处,还请老师批评指正。

31

参考文献
[1]何立民. 单片机初级教程,北京:北京航空航天大学出版社. 2004 [2]曹巧媛. 单片机原理与应用,北京:北京电子工业出版社. 2002

[3]沈红卫. 单片机应用系统设计实例与分析, 北京: 北京航空航天大学出版社。 2003 [4 付晓光. 单片机原理与实用技术,北京:北方交通大学出版社. 2004 [5]胡汉才. 单片机原理及其接口技术,北京:清华大学出版社. 1996

[6]周立功. 增强型 80C51 单片机速成与实战,北京:北京航空航天大学出版社. 2004 [7]王治刚. 单片机应用技术实训,北京:清华大学出版社. 2004. [8]诸昌钤. LED 显示屏系统原理及工程技术,成都:电子科技大学出版社.2000 [9]李光飞. 单片机课程设计实例指导,北京:北京航空航天大学出版社. 2004 [10]李广军. 王厚军. 实用接口技术,成都:电子科技大学出版社. 2001 [11]王晓明. 曾红. 单片机教程,沈阳:东北大学出版社. 2001 [12]梅丽凤. 张军.原理及接口技术,北京:清华大学出版社.2004 [13]范志忠.实用数字电子技术,西安:电子工业出版社.2003 [14] RichardR.Spencer 、 MohammedS.Ghausi. Introduction to Electronic Circuit Design, Publishing House of Pearson Education.2003 [15] Intel:MCS-51 Family of single Chip Microcomputers Users Manual 1990 [16]John.D.Carpinwlli Archotectecture.2002 computer systems Organization and

32

程序清单: 程序清单:歌曲《祝你平安》

KEYBUF STH0 STL0 TEMP

START:

EQU 30H EQU 31H EQU 32H EQU 33H ORG 00H LJMP START ORG 0BH LJMP INT_T0 MOV TMOD,#01H SETB ET0 SETB EA MOV P3,#0FFH CLR P3.4 MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY1 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY1 MOV A,P3 ANL A,#0FH CJNE A,#0EH,NK1 MOV KEYBUF,#0 LJMP DK1 CJNE A,#0DH,NK2 MOV KEYBUF,#1 LJMP DK1 CJNE A,#0BH,NK3 MOV KEYBUF,#2 LJMP DK1 CJNE A,#07H,NK4 MOV KEYBUF,#3 LJMP DK1 NOP MOV A,KEYBUF
33

WAIT:

NK1:

NK2:

NK3:

NK4: DK1:

MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,KEYBUF 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 TR0 DK1A: MOV ANL XRL JNZ CLR A,P3 A,#0FH A,#0FH DK1A TR0

NOKEY1: MOV P3,#0FFH CLR P3.5 MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY2 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY2 MOV A,P3 ANL A,#0FH CJNE A,#0EH,NK5 MOV KEYBUF,#4 LJMP DK2 CJNE A,#0DH,NK6 MOV KEYBUF,#5 LJMP DK2 CJNE A,#0BH,NK7
34

NK5:

NK6:

NK7:

NK8: DK2:

MOV KEYBUF,#6 LJMP DK2 CJNE A,#07H,NK8 MOV KEYBUF,#7 LJMP DK2 NOP MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,KEYBUF 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 TR0 MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK2A CLR TR0 MOV P3,#0FFH CLR P3.6 MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY3 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY3 MOV A,P3 ANL A,#0FH
35

DK2A:

NOKEY2:

NK9:

NK10:

NK11:

NK12: DK3:

CJNE A,#0EH,NK9 MOV KEYBUF,#8 LJMP DK3 CJNE A,#0DH,NK10 MOV KEYBUF,#9 LJMP DK3 CJNE A,#0BH,NK11 MOV KEYBUF,#10 LJMP DK3 CJNE A,#07H,NK12 MOV KEYBUF,#11 LJMP DK3 NOP MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,KEYBUF 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 TR0

DK3A:

MOV ANL XRL JNZ CLR MOV CLR MOV ANL XRL

A,P3 A,#0FH A,#0FH DK3A TR0 P3,#0FFH P3.7 A,P3 A,#0FH A,#0FH
36

NOKEY3:

NK13:

NK14:

NK15:

NK16: DK4:

JZ NOKEY4 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY4 MOV A,P3 ANL A,#0FH CJNE A,#0EH,NK13 MOV KEYBUF,#12 LJMP DK4 CJNE A,#0DH,NK14 MOV KEYBUF,#13 LJMP DK4 CJNE A,#0BH,NK15 MOV KEYBUF,#14 LJMP DK4 CJNE A,#07H,NK16 MOV KEYBUF,#15 LJMP DK4 NOP MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,KEYBUF 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 TR0 MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK4A
37

DK4A:

CLR TR0 NOKEY4: LJMP WAIT DELY10MS: D1: MOV R6,#10 MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET MOV TH0,STH0 MOV TL0,STL0 CPL P1.0 RETI DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
;以下为歌曲《祝你平安》的数据

INT_T0:

TABLE:

TABLE1:

db 26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20h db 30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20h db 20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20h db 30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20h db 30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10h db 2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20h db 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h db 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20h db 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h db 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h db 18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h db 30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20h db 39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10h db 20h,10h,2bh,10h,26h,30h,30h,80h,00H

38


相关文章:
毕业论文-基于单片机AT89C51的简易电子琴
毕业论文-基于单片机AT89C51的简易电子琴_工学_高等教育_教育专区 暂无评价|0人阅读|0次下载|举报文档 毕业论文-基于单片机AT89C51的简易电子琴_工学_高等教育...
毕业论文基于单片机的简单电子琴设计
本科毕业论文论文题目:基于单片机的简单电子琴设计 学专院: 业:信息科学技术学院...AT89C51 单片机设计 2 基于单片机的简单电子琴设计 微型电子琴的方法,仅需 AT...
基于AT89C51的简易电子琴单片机课程设计
本文的主要内容是用 AT89c51 单片机为核心控制元件,设计一个电子琴。以单片机...本文主要对使用单片机设计简易电子琴进行了分析, 并介绍了基于单片机电 子琴统...
基于AT89C52单片机的简易电子琴设计毕业论文
基于AT89C52单片机的简易电子琴设计毕业论文_工学_高等教育_教育专区。滨江学院...AT89C52 的前身是 AT89C51,它在硬件组成、工作 特点、引脚排列等方面兼容 ...
基于单片机AT89C51电子琴课程设计
毕业论文-基于单片机AT8... 40页 7下载券 基于单片机AT89C51的带存... 26...本次设计首先对单片机设计简易电子琴仔细分析,接着制作硬件电路和编写软件的程 ...
毕业论文基于单片机的简单电子琴设计[2]
毕业论文基于单片机的简单电子琴设计[2]_工学_高等教育_教育专区。本科毕业论文...该文设计是一种基于 AT89C51 的简单音乐 发生器,利用单片机技术、键盘和一组...
基于51单片机的简易电子琴设计
AT89S51 单片机 音色 节拍器 自动放音 1 内蒙古民族大学本科生毕业论文 ...本文主要对使用单片机设计简易电子琴进行了分析, 并介绍了基于单片机电 子琴统...
毕业论文:基于单片机简易电子琴的设计(终稿)-精品
毕业论文:基于单片机简易电子琴的设计(终稿)-精品_工学_高等教育_教育专区。目...利用 AT89C51 的内部定时器使其工作计数器模式(MODE1)下,改变计数 值 TH0 ...
简易电子琴毕业论文
毕业设计(论文)任务书届: 11 专业(班) : 电子 4 班 姓名: 王坤杰 课题名称:简易电子琴 主要内容:用 AT89C51 单片机为核心控制元件,设计一个简单的电子琴。...
更多相关标签:
八键单片机简易电子琴 | 单片机简易电子琴设计 | 单片机简易电子琴 | 简易电子琴stc89c52 | at89c51单片机简介 | at89s51单片机 | at89c51单片机 | 89c51单片机 |