单片机课设电子琴论文.docx
《单片机课设电子琴论文.docx》由会员分享,可在线阅读,更多相关《单片机课设电子琴论文.docx(37页珍藏版)》请在冰豆网上搜索。
单片机课设电子琴论文
单片机课程设计论文
题目:
基于单片机的简易电子琴设计
学院:
机电工程学院
专业:
电气工程及其自动化
姓名:
#########
指导教师:
完成日期:
2012-12-27
目录
摘要1
绪论.......................................................................2
1方案论证3
1.1原理图3
1.2主体方案3
1.3系统方案设计及主控芯片介绍4
1.3.STC89C51简介5
1.3.1单片机工作原理8
1.3.2数码管13
2实现过程14
2.1.1程序设计内容14
2.1.2I/O并行口直接驱动LED显示14
2.2音乐产生的方法15
2.2.1原理15
2.2.2程序框图16
3全文总结17
3.1结束语18
参考文献19
附录20
1.电路原理图20
2.程序框图21
3.系统流程图22
4.语言源程序23
摘要
在现代各种生活中,电子琴作为一种音乐型玩具,广泛用于与人们的日常生活中。
市场上有各种各样的电子琴。
特别是日本产的,音质优美,它是有专门的音乐控制芯片制造的。
由于其价格较贵,无法大面积普及,且功能单一。
用89c51作为主控中心,研制一种简易的微型电子琴,尽可能地体现较好的音质来,是一种可做的尝试。
以单片机为核心设计的简易电子琴系统,由按键扫描电路、声音产生驱动电路、复位电路、等模块组成的,是一种比较实用、廉价的电子玩具。
本论文所设计的简易电子琴,它分为两大部分,硬件电路的设计和软件的设计。
硬件电路的设计以AT89S51单片机为控制主板,辅以外围的扩展设备蜂鸣器、矩阵键盘、共阳数码管,形成一个可被控制的显示系统。
软件设计通过控制单片机内部的定时器T0来产生不同频率的方波,驱动喇叭发出不同音节的声音.再利用延迟来控制发音时间的长短,即可控制音调中的节拍.把乐谱中的音符对应的频率转换为定时常数,把相应的节拍变换为定时常数,然后作成表格存放在储存器中,由程序查表得到定时常数和延时常数,分别用以控制定时器产生方波的频率和该频率方波的持续时间.当延迟常数到时,再查下一个音符的定时常数和延迟常数.依次进行下去,就可演奏悦耳动听的音乐.主要实现1》能够发出1.2.3.4.5.6.7等七个音符。
2》能自动演奏完,自选的一首歌曲两种功能。
绪论
本次设计的简易电子琴在其功能上能用单片机控制蜂鸣器发声,拟合出乐曲曲调。
能够相应按键,进行简单的乐曲弹奏。
本次设计是以单片机为基础,在论文中大概讲述了一下单片机的原理。
在此次设计中,简易电子琴的外围设备主要有以下二个部分:
1、发声器件的选择:
发声器件比较多,例如喇叭、蜂鸣器、电铃等。
这次发声元件采用蜂鸣器,蜂鸣器价格便宜,控制简单,广泛用于各种电子产品和玩具。
本设计为保证声音的响亮,通过三极管进行电流放大,增加声音的响度。
2、按键部分的设计:
在本电路的按键接口设计,按键数量比较多。
3、数码管显示电路:
为指示出当前演奏的曲目标号和显示当前按下的键号,我们采用1位数码管作为显示部件,为了节省成本,采用I/O口直接驱动数码管。
这样设计充分利用了单片机的资源,使此设计才功能上很丰富、完善。
1方案论证
1.1原理图
1.2主体方案
本文就是从单片机STC89C51入手,通过使用STC89C51的内部的可编程定时器/计数器,结合对外接晶振的调节来确定一个合适的振荡周期,从而确定出内部的机器周期。
该简易电子琴通过控制单片机内部的定时器T0来产生不同频率的方波,驱动喇叭发出不同音节的声音.再利用延迟来控制发音时间的长短,即可控制音调中的节拍.把乐谱中的音符对应的频率转换为定时常数,把相应的节拍变换为定时常数,然后作成表格存放在储存器中,由程序查表得到定时常数和延时常数,分别用以控制定时器产生方波的频率和该频率方波的持续时间.当延迟常数到时,再查下一个音符的定时常数和延迟常数.依次进行下去,就可演奏悦耳动听的音乐
1.3主要芯片简介
1.3.1STC89C51简介
一、单片机的主要性能特点
ATMEL公司生产的AT89C51单片机采用高性能的静态80C51设计,欲先进工艺制造,并带有非易失性FLASH程序储存器。
它是一它是一种高性能,低功耗的8位CMOS微处理芯片,。
主要性能特点有:
●8KBFlashROM,可以擦除1000次以上。
数据保存10年,
●256字节内部RAM
●电源控制模式:
时钟可停止和恢复;空闲模式;掉电模式。
●6个中断源
●4个中断优先级
●4个8位I/O口
●全双工增强型UART
●3个16位定时/计数器,T9,T1和增加的T2
●全静态工作方式:
0~24MHz
二、单片机的引脚功能
89C51单片机的引脚图见图2.2所示,其中有2条主电源引脚,2条外接晶体引脚,4条控制或其他电源复用引脚,32条I/O引脚。
下面分别叙述这些引脚的功能。
图2.289C51单片机的引脚图
●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提供备用电源。
●EA/VPP(31):
内/外部ROM选择端。
当EA端保持高电平时,不管是否有内部程序存储器,只访问外部程序存储器。
当EA端保持低电平时,访问内部程序存储器。
●P0口(P0.0~P0.7共8个引脚,既39-32脚):
双向三态I/O口。
在访问外部存储器时,可分别用低8位地址线和8位数据线;P0口可以驱动8个LSTTLP1输入。
●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内部有256BRAM,片外最多可以扩展64KBRAM。
片内256KBRAM按其功能划分两部分:
低128B位片内数据RAM区,地址空间为00H~7FH;高128B位特殊功能寄存器的区域.地址空间为80H~FFH。
内部数据存储器低128单元,8051内部低128BRAM是真正的RAM,可用于暂存运算结果及标志位等.按其用途可以分为三部分:
工作寄存器区;位寻址区;用户RAM区。
内部RAM的高于128单元是供给特殊功能寄存器使用,因此称特殊功能寄存器:
①指令寄存器IR和指令译码器ID。
指令寄存器是存放指令代码的地方。
当执行指令时,CPU把从程序存储器中读取的指令代码送入指令寄存器,然后指令译码器译码后由定时控制电路发生相应的控制信号,最终完成指令所规定的操作。
②程序计数器PC是一个16位的计数器。
用于存放将要执行的指令地址,CPU每读取指令的一个字节PC便自动加1,指向本指令的下一个字节或下一条指令地址,PC可以寻址64KB范围ROM。
③累加器是一个最常用的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的值来决定当前的工作区:
当RS1RS0=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
这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口相同。
1.3.2单片机的工作原理
一、振荡器与时钟电路
时钟电路用于产生单片机工作所需要的时钟信号。
AT89C51的时钟产生方法有以下两种:
⑴内部时钟方式
利用芯片内部的振荡器,然后在引脚XTAL1和引脚XTAL2两端接晶体或陶瓷谐振器,就构成了稳定的自激振荡器,其发出的脉冲直接送入内部的时钟电路,如图2.4(在图中的外接线,上面的外接线接引脚XTAL1,下面的外接线接引脚XTAL2)外接晶振时,C1和C2的值通常选择我30pF左右;外接陶瓷谐振器时C1和C2的值大约为47pF。
C1、C2对频率有微调作用,晶体或陶瓷谐振器的频率范围可在1.2~12MHz之间选择。
为了减少寄生电容,更好地保证振荡器稳定、可靠地工作,振荡器和电容应尽可能安装得与单片机芯片靠近。
图2.4单片机外接振荡电路
⑵外部时钟方式
此方式是利用外部振荡脉冲接入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。
P0口是地址总线低8位和8位数据总线复用口,只能分时用作地址线。
故P0口输出的低8位地址A0~A7必须用锁存器锁存。
锁存器的锁存控制信号为单片微机ALE引脚输出的控制信号。
在ALE的下降沿将P0口输出的地址A0~A7锁存。
P0、P2口在系统扩展中用做地址线后便不能作为一般I/O口使用。
由于地址总线宽度为16位,故可寻址范围为64KB。
(2)数据总线(DB)
数据总线由P0口提供,用D0~D7表示。
P0口为三态双向口为三态双向口,是应用系统中使用最为频繁的通道。
所有单片微机与外部交换的数据、指令、信息,除少数可直接通过P1口外,全部通过P0口传送。
数据总线是并连到多个连接的外围芯片的数据线上,而在同一时间里只能够有一个是有效的数据传送通道。
哪个芯片的数据通道有效,则由地址线控制各个芯片的片选线来选择。
(3)控制总线(CB)
控制总线包括片外系统扩展用控制线和片外信号对单片微机的控制线。
MCS—51系列中.有5个中断源(或6个中断源),如图所示。
它们可分为2个优先级.其中每一个中断源的优先级都可以由程序排定。
5个中断源的中断要求是否会得到响应,受允许中断寄存器IE中各位的控制;它们的优先级分别由中断优先级寄存器IP的各位确定;同—优先级内的各中断源同时要求中断时,还要靠内部的查询逻辑来确定响应的次序,不同的中断源有不同的中断向量。
52子系列的中断系统与此类同,只不过增加了一个中断源。
1.允许中断寄村器IE
(1)EA(IE.7>总允许位。
EA=0.禁止一切中断。
EA=l,则每个中断源是允许还是禁止,分别由各自的允许位确定。
(2)一(IE6)保留位。
(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)一种中断(不管是什么优先级)一旦得到响应,与它同级的中断不能再中断它。
为了实现这两条规则,中断系统内部包含两个不可寻址的“优先级激活”触发器。
其中一个触发器指示某高优先级的中断正在得到服务,所有后来的中断都被阻断。
另一个触发器指示某低优先级的中断正得到服务,所有同级的中断都被阻断,但不阻断高优先级的中断。
当同时收到几个同一优先级的中断要求时,哪一个要求得到服务,取决于内部的查询顺序,相当于在每个优先级内,还同时存在另一个辅助优先结构。
如;
中断源同级内的优先权
外部中断0最高
定时器/计数器0溢出
外部中断1
定时器/计数器1溢出
串行口
定时器/计数器2溢出最低
在每一机器周期中,所有中断源都顺序地被检查一遍;这样到任一周期的S6状态时,找到了所有已激活的中断请求,并排好了优先权。
在下一机器周期的S1状态,只要不受阻断就开始响应其中最高优先级的中断请求。
若发生下列情况,中断响应会受到阻断:
(1)同级或高优先级的中断已在进行中;
(2)正在执行的指令,尚未完成其最后一个机器周期(换言之,正在执行的指令完成前,任何中断请求都得不到响应);
(3)正在执行的是一条RETI或者访问专用寄存器IE或IP的指令(换言之,在RETI或者读写IE或IP之后,不会马上响应中断请求,而至少在执行一条其他指令之后才会响应)。
若存在上述任一种情况,中断查询结果就被取消。
否则.在紧接着的下一个机器周期,中断查询结果变为有效。
4.中断响应协议
当某中断源提出中断请求后,作为应答,CPU首先使相应的“优先级激活”触发器置位,以阻断同级和低级的中断。
然后,根据中断源的类别,在硬件的控制下,程序转向相应的向量单元,执行中断服务子程序。
硬件中断服务子程序调用时,把当时程序计数器PC的内容压入堆栈(在MCS—5l中,PC是16垃的,占用了2个字节,没有自动保存程序状态字PSW的内容),同时还根据中断的来源,把相应的向量单元地址装入PC中。
这些向量地址是:
中断源向量单元
外部中断00003H
定时器0溢出000BH
外部中断100l3H
定时器1溢出001BH
串行口0023H
定时器2溢出或T2EX端出现负跳变002BH
中断服务子程序的最后一条指令应是RETI(中断返回)。
RETI指令将清除”优先级激活”触发器(该触发器在响应中断时被置位)。
然后由堆栈弹出两个字节(下一条指令地址)装入到PC中。
5.外部中断
外部中断的激活方式分为两种:
一种是电平激活.另一种是边沿激活。
这两种方式可以靠TCON寄存器中的中断方式位ITI或IT0来控制。
若ITX=0(X为0或l,后文中用到类同的符号,其含意相似),则采用电平激活方式:
在
引脚上检测到低电平,将触发外部中断。
若ITx=1.则采用边沿激活方式:
在相继的两个周期中,对
引脚进行连续两次采样,若第一次采样值为高,第二次为低,则TCON寄存器中的中断请求标志IEx被置1,以请求中断。
由于外部中断引脚每个机器周期被采样一次,为确保采样,由引脚
输入的信号应至少保持一个机器周期,即12个振荡器周期。
如果外部中断为边沿激活方式,则引脚处的高电平和低电平值至少各保持一个机器周期,才能确保CPU检测到电平的跳变,而把中断请求标志IEx置1。
如果采用电平激活外部中断方式,外部中断源应一直保持中断请求有效.直至所请求的中断得到响应时为止。
6.中断请求的撤除
CPU响应某中断请求后,在中断返回(RETI)前,该中断请求应该撤除,否则会引起另一次中断。
对于定时器0或1溢出中断,CPU在响应中断后,就用硬件清除了有关的中断请求标志TF0