at89s51单片机实验系统的开发与应用毕业论文.doc
摘要 此次设计是AT89S51单片机实验系统的开发与应用,该设计主要包括时钟模块、液晶显示模块、键盘按钮模块、发声模块、存储器扩展模块等。本论文详细介绍了该实验系统的开发过程及相关硬件结构和软件设计,以ATMEL公司的AT89S51单片机为核心控制器,并使用PROTUSE软件与KEil软件相结合,进行仿真,达到教学实验的效果,并使用Dreamweaver软件制作网页展示。关键字:AT89S51;实验系统;应用 Abstract This design is the development and application of AT89S51 microcontroller experimental system, this design mainly consists of the clock module, liquid crystal display module, keyboard button module, sound module, memory expansion module. This paper introduces the development process of the experimental system and related hardware and software design, with ATMEL company AT89S51 microcontroller as the core controller, and use the PROTUSE software combined with KEil software, simulation, to achieve the teaching experiment results, and the production of Webpage demonstrate the use of Dreamweaver software.Keywords: AT89S51; experimental system; application目录 摘要IAbstractII1 绪论1 1.1 选题意义 1 1.2 要完成的任务 1 1.3 单片机的性能特点1 1.3.1 AT89系列单片机简介 2 1.3.2 AT89系列单片机的特点 2 1.4 仿真软件介绍 4 1.4.1 PROTEUS软件简介4 1.4.2 KEIL软件简介 4 2 硬件设计 5 2.1 实验系统设计方案 5 2.2 常用各功能模块介绍 6 2.2.1 晶振电路6 2.2.2 复位电路6 2.2.3 4*4 键盘按钮电路7 2.2.4 流水灯电路 72.2.5 发声电路8 2.2.6 6位7段LED数码管显示电路 8 2.2.7 LCD液晶显示电路 9 2.2.8 程序存储器扩展电路11 2.2.9 DS18B20温度传感器电路 11 2.2.10 SHT11温湿度传感器电路12 3 开发系统的应用13 3.1 LED数码管显示实验设计13 3.1.1 硬件电路原理13 3.1.2 软件程序设计13 3.2 流水灯开关控制设计 153.2.1 硬件电路原理15 3.2.2 软件程序设计15 3.3 可控制数字音乐盒设计17 3.3.1 硬件电路原理17 3.3.2 播放音乐的原理18 3.3.3 音符频率的产生 18 3.3.4 软件程序设计 20 3.4太阳能水温水位控制设计23 3.4.1 硬件电路原理23 3.4.2 软件程序设计26 3.5室内温湿度测量 27 3.5.1硬件电路原理27 3.5.2软件程序设计27 3.6 交通灯设计29 3.6.1 硬件电路原理29 3.6.2 软件程序设计 29 4 Dreamweaver软件31 4.1 Dreamweaver软件介绍 31 4.2 利用Dreamweaver实现实验系统32 4.2.1 定义本地站点324.2.2 搭建站点364.2.3 设计网页36 参考文献38 结束语39 致谢40 附录一LED数码管显示仿真图41 附录二流水灯控制仿真图42 附录三音乐盒仿真图43 附录四太阳能水位温度控制仿真图44 附录五室内温湿度测量仿真图 45 附录六网页展示图47 附录七程序 49 V1 绪论1.1 选题意义 该设计具有流水灯显示、数码显示、音乐发声等功能,能满足教学课程实验的基本设计,实验系统结构简单,实用性强。在传统的单片机实验教学中,由于实验箱电路固定,学生只能照抄照搬讲义内容进行电路插接,按照讲义上的实验步骤一步步完成规定的实验项目,却无法实现自己的一些新想法、新思路,进行 实验验证,这严重挫伤了学生的学习主动性,束缚了学生的创新思维。现在,通过仿真实验,可以很好地弥补实际实验的不足,并且该题目对硬件与软件都有涉及,很明确软硬件知识课程学习对应用是非常重要的.通过对该题的深入研究不仅对学习单片机有用,而且对电子方面的教学也起到关键的作用。1.2 要完成的任务 首先设计实验系统各个模块的硬件电路,其次设计应用实验的软件程序,然后安装Proteus软件和Keil软件,在Proteus中绘制局部电路图,再绘制各个实验应用电路图。再在Keil中建立工程、编译程序、检查错误、链接程序、生产.hex文件。最后在Proteus中添加.hex文件,进行实验仿真,实现相应功能或现象、最后自学Dreamweaver,在Dreamweaver环境中搭建一个的本地站点,通过插入动画、图片、文字、音乐等内容,再利用编写代码、创建链接等知识做网页展示,实现实验系统。1.3 单片机的性能特点 单片机芯片作为控制系统的核心部件,除了具备通用微机CPU的数值计算功能外,还必须具有灵活、强大的控制功能,以便实时监测系统的输入量、控制系统的输出量,实现自动控制的目的。由于单片机主要面向工业控制,工作环境比较恶劣,加上高温、强电磁干扰,甚至还有腐蚀性气体;在太空工作的单片机控制系统,还必须具有抗辐射能力。因而,决定了单片机CPU与通用微机CPU具有不同的技术特征和发展方向,正由于它的实用性强,所以单片机在电类教学中的地位是相当重要的。(1)抗干扰性强工作温度范围宽。通用微机CPU一般要求在室温下工作抗干扰能力也较低。(2)可靠性高。(3)控制功能往往很强,数值计算能力较差。通用微机CPU具有很强的数值运算能力,但控制能力相对较弱。将通用微机用于工业控制时,一般需要增加一些专用的接口电路。(4)指令系统比通用微机系统简单。80C51系列新一代8位单片机的主要特点:(1)普遍采用CMOS工艺,除了具有节电运行模式和掉电数据保护功能外,整机功耗比采用HMOS工艺的80C5l系列低。(2)片内存储器容量大,规格多,程序存储器类型也趋于多样化。该系列不同品种的片内程序存储器容量从4KB扩展到8KB、16KB,甚至32KB,数据存储器容量从128B扩展到512B。(3)最高时钟频率从12MHz提高到16MHz、24MHz、33MHz,甚至40MHz,指令执行时间大大缩短,增强了这些产品的实时处理能力。(4)工作电压低、范围宽(18V'、一60V),可用电池供电,便于野外作业使用。(5)扩展了接口电路功能,如:增加了高速IO接口,扩展了IO口引线数目。(6)部分型号增加了定时计数器的个数,还扩展了定时计数器的功能。(7)部分型号增加了定时复位功能,提高了抗干扰能力。(8)强化并且完善了串行通信功能。(9)封装形式多样化,同一型号的CPU,具有多种封装形式,如PDIP封装、CDIP封装、PLCC(方形壁插塑封)、CLCC(方形壁插陶瓷封装)、PQFP(塑料方形四边引线扁平封装),部分产品还采用了BGA(球形网格阵列)封装。1.3.1 AT89系列单片机简介 AT89系列单片机是美国Atmel公司的8位Flash单片机产品。这个系列单片机的最大特点是在片内含有Flash存储器,而其他方面和MCS51没有太大的区别。该系列有着十分广泛的用途,特别是在便携式、省电和特殊信息保存的仪器和系统中显得更为突出。1.3.2 AT89系列单片机的特点(1)内含有Flash存储器由于片内含有Flash存储器,因此在系统开发过程中可以十分容易地进行程序的修改。同时,在系统工作过程中,能有效地保存数据信息,即使外界电源损坏也不影响信息的保存。(2)和80C51插座兼容AT89系列单片机的引脚和MCS51系列单片机的引脚是一样的。只要用相同引脚的AT89系列单片机就可以取代MCS51系列单片机。(3)静态时钟方式AT89系列单片机采用静态时钟方式,节省电能,这对于降低便携式产品的功耗十分有用。1.3.3 AT89S51单片机简介 AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4K Bytes ISP(In-SystemProgramming)的可反复擦写1000次的Flash只读程序存储器,器件采用Atmel公司的高密度、非易失性存储技术制造,兼容标准MCS5 1指令系统及80C5 1引脚结构,芯片内集成了通用8位中央处理器和Isp Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89S51具有如下特点:40个引脚,4K Bytes Flash片内程序存储器,128 Bytes的随机存取数据存储器(RAM),32个外部双向输入输出(IO)口,5个中断优先级2层中断嵌套,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(wdt)电路,片内时钟振荡器。此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM、定时计数器、串行口、外部中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外部中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。主要功能特性:(1)兼容MCS51指令系统(2)4K可反复擦写(>1000次)Isp Flash ROM(3)32个双向IO口(4)45V-55V工作电压(5)2个16位可编程定时计数器(6)时钟频率033MHz(7)全双工UART串行中断口线(8)128×8Bit内部RAM(9)2个外部中断源(10)低功耗空闲和省电模式(11)中断唤醒省电模式(12)3级加密位(13)看门狗(Wdt)电路(14)软件设置空闲和省电功能(15)灵活的Isp字节和分页编程(16)双数据寄存器指针1.4 仿真软件介绍 1.4.1 PROTEUS软件简介 Proteus软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。 1.4.2 KEIL软件简介 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果使用C语言编程,那么Keil几乎就是不二之选。 2 硬件设计2.1 实验系统设计方案单片机实验开发板是一个实际应用的系统,能够为相关的学生单片机实验提供支持。此实验板是参考单片机教材中的实验内容设计的,能够实现简单的测试实验。本设计包括硬件系统的详细设计及C语言在基本控制中的应用。本设计的任务主要分为硬件和软件两大部分,其主要硬件设计框图如图2.1所示: AT 8 9 S 5 1 晶振电路 流水灯电路 数码管显 示电路电路 复位电路液晶显示电路 存储器扩展电路路 发声电路4*4矩阵按钮电路DH11温湿度传感器电路DS18B20温度传感器电路 图2.1 硬件框图 此开发系统的主要内容包括:(1)单片机最小系统电路(MCU、复位电路、晶振电路)(2)蜂鸣器发声电路(3)按键电路(4)流水灯电路(5)LM106L液晶显示电路 (7)存储器扩展电路 (7)六段数码管显示电路 (8)DS18B20温度传感器电路 (9)DH11温湿度传感器电路2.2 常用各功能模块介绍 2.2.1 晶振电路 MCS-51片内有一个高增益的反相放大器,其输入端为引脚XTAL1和输出端为引脚为XTAL2,用于外接石英晶体振荡器和微调电容,构成稳定的的自激振荡器,其发出的脉冲直接送入内部的时钟电路,如图3-2所示。电容C1和C2对频率有微调作用,电容一般取20pF左右。晶体振荡频率范围是12Mz12MHz,一般情况下,选用振荡频率为12MHz的石英晶体。振荡脉冲信号经过内部时钟发生器进行二分频之后,才成为单片机的时钟信号。 电路如图2.2所示 图2.2 晶振电路 选取晶振为12MHZ,系统机器周期为1us。 2.2.2 复位电路 复位是由外部的复位电路来实现的。复位引脚RST通过一个施密特触发器用来抑制噪声,然后才能得到内部复位操作所需要的信号。 本系统是采用上电自动复位,上电自动复位是通过外部复位电路的电容充电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。 电路如图2.3所示: 图2.3 复位电路 2.2.3 4*4 键盘按钮电路用来连接P2口与矩阵键盘模块,在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P2口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键),在需要的按键数较多时,采用矩阵法来做键盘是合理的。电路如图2.4所示: 图2.4 按钮电路 2.2.4 流水灯电路 电路图如图2.5所示: 图2.5 流水灯电路 流水灯模块包含8个LED灯,8个LED接8个上拉电阻到高电平,LED左侧接低电平点,LED亮。2.2.5 发声电路 本系统是采用蜂鸣器用来发出声音,由于在实际应用中,单片机输出的标准高电平为5伏,输出功率很有限,所以本系统中,理论联系实际,用一个PNP型三极管驱动蜂鸣器,由于三极管具有放大作用,在实际应用中,输出功率将会提高很多。电路如下图2.6所示: 图2.6 发生电路 2.2.6 6位7段LED数码管显示电路 图2.7 LED数码管如图2.7所示ABCDEFG为7段LED的输入端口,DP为小数点,123456为片先信号,当1为高电平时则选中第一个数码管,2为高电平时则选中第二个数码管,以此类推。2.2.7 LCD液晶显示电路 液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。 (1)液晶显示器的分类 液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。 (2)液晶显示器各种图形的显示原理 1)线段的显示 图 2-2-8 存储器扩展电路14 点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。 2) 字符的显示 用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。 (3) 汉字的显示 汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5右边为2、4、6根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节直到32B显示完就可以LCD上得到一个完整汉字。 液晶显示电路如图2.8所示: 图2.8 液晶显示电路 本系统显示是采用液晶显示器LM016L进行显示, LM016L的功能、显示原 理以及使用方法将会在后文中介绍,P0口是一个地址/数据复用的双向I/O口,当使用P0口访问外部存储器和数据存储器时,P0口内部已有上拉电阻,当P0口作程序检验,输出指令字节时,必须外接上拉电阻。LM016L的控制信号RS、 RW、E分别接到单片机的P2.0、P2.1、P2.2。2.2.8 程序存储器扩展电路本系统是采用了一个74LS373锁存器和一个27512程序存储器外部扩展组成,其主要的功能就是为了在外部扩展单片机内存,使它有足够的空间存放系统中的程序,而达到使它实现所要得到的功能和应用的领域,电路图如2.9所示: 图2.9 程序存储器扩展电路2.2.9 DS18B20温度传感器电路图2.10 温度传感器电路2.2.10 DH11温湿度传感器电路图2.11 温湿度传感器电路 3 开发系统的应用3.1 LED数码管显示实验设计 3.1.1硬件电路原理基于电路中 C3R1 组成复位电路,它的作用是将单片机内部特殊的功能寄存器和端 口寄存器恢复到原始状态,和计算机按下重启键的作用是同等的,目的是将所有的程 序结束,使其恢复到初始状态。 在此,C3R1 组成的是上电复位电路,在上电的瞬间是单片机恢复到初始状态, 从内部 FLASH 存储器的初始状态开始执行,也就是从程序的 0000H 位置开始执行。 EA 接 Vcc 电源,目的是使程序从内部 FLASH 的程序开始执行,如果 EA 引脚接 Vss(电 源地),则不能先执行内部FLASH 的程序,而先执行外外部存储器的程序,由程序调用 才能访问内部 FLASH。X1C1C2 组成震荡电路,和内部的震荡电路共同构成单片机 工作基准时钟电路。它含有单片机的数字电路系统的工作基准,为数字电路系统稳定 的时钟信号。X1 为晶振,它的标称频率越高,数字电路系统的工作频率也就越高。ABCDEFG为7段LED的输入端口,DP为小数点,123456为片先信号,当1为高电平时则选中第一个数码管,2为高电平时则选中第二个数码管,以此类推。利用51最小系统,然后用P1.0到P1.5的6个引脚输出片选信号,P2.0到P2.6的7个引脚输出数据。3.1.2 软件程序设计LEDBUF EQU 30H; 为显示数据开辟内存单元ORG 0000HLJMP MAINORG 000BHLJMP TIME0ORG 0030HTABLE: DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H, 82H, 0F8H ,80H, 90H;7段数码管译码表MAIN: MOV SP,#70H;初始化堆栈 MOV LEDBUF,#2 MOV LEDBUF+1,#0 MOV LEDBUF+2,#1 MOV LEDBUF+3,#4 MOV LEDBUF+4,#6 MOV LEDBUF+5,#7 MOV LEDBUF+6,#7 ;写入要显示的数字 MOV R0,#LEDBUF ;将ledbuf的首地址给R0 MOV DPTR,#TABLE ;将TABLE的首是址给DPTR MOV R2,#06H ;R2作为循环次数寄存器 MOV R1,#01H;R1中放片选信号 MOV TMOD, #01H ;定时器0工作在方式1 MOV TH0, #0DFH MOV TL0,#0B0H ;初始代定时器0 SETB TR0 ;开定时器0 SETB EA ;开总中断 SETB ET0 ;开定时器0中断 SJMP $ ;动态停机TIME0: DJNZ R2, LOOP1;循环6次后回到初始值继续循环,小于6次跳到LOOP1MOV R2,#06HMOV R1,#01HMOV R0,#LEDBUF ;初始化数据LOOP1: MOV TH0,#0DFH MOV TL0,#0B0H ;初始化定时器0MOV A,R1 MOV P1,ARL AMOV R1,A ;将R1中片选信号输入P1并且使其数据左移一位MOV A,R0 MOVC A,A+DPTRMOV P2,A INC R0 ;通过查表将ledbuf中数据送往P2RETIEND3.2 流水灯开关控制设计 3.2.1 硬件电路原理电路中 C3R1 组成复位电路,它的作用是将单片机内部特殊的功能寄存器和端 口寄存器恢复到原始状态,和计算机按下重启键的作用是同等的,目的是将所有的程 序结束,使其恢复到初始状态。 在此,C3R1 组成的是上电复位电路,在上电的瞬间是单片机恢复到初始状态, 从内部 FLASH 存储器的初始状态开始执行,也就是从程序的 0000H 位置开始执行。 EA 接 Vcc 电源,目的是使程序从内部 FLASH 的程序开始执行,如果 EA 引脚接 Vss(电 源地),则不能先执行内部FLASH 的程序,而先执行外外部存储器的程序,由程序调用 才能访问内部 FLASH。X1C1C2 组成震荡电路,和内部的震荡电路共同构成单片机 工作基准时钟电路。它含有单片机的数字电路系统的工作基准,为数字电路系统稳定 的时钟信号。X1 为晶振,它的标称频率越高,数字电路系统的工作频率也就越高。如图2-8所示流水灯模块包含8个LED灯接P2口,采用低电平有效,共阳极连接,为防止二极管击穿,在每个二极管中串接了1K的限流电阻。因此,LED灯低电平点亮。P1口接8个SW开关控制8个流水灯。在编程软件的配合下,要求实现如下指示灯/控制功能:程序启动后,8个发光二极管先整体闪烁3次(即亮-暗-亮-暗-亮-暗-亮-暗,间隔时间以肉眼可观察到为准),然后根据开关状态控制对应发光二极管发亮灯状态,即开关闭合相应灯亮,开关断开相应灯灭,直至停止程序运行。3.2.2 软件程序设计(1)软件编程原理为: 1)8只发光二极管整体闪烁3次 亮灯:向P2口送入数值0; 灭灯:向P2口送入数值0FFH; 闪烁3次:循环3次; 闪烁快慢:由软件延时时间决定。 2)根据开关状态控制灯亮和灯灭 开关控制灯:将P1口(即开关状态)内容送入P2口; 无限持续:无条件循环。(2)流程图如下图所示: 图3.1 主程序 图3.2 延时子程序程序编码: MOV R5,#3LOOP1: MOV P2,#0 ACALL DELAY MOV P2,#0FFH ACALL DELAY DJNZ R5,LOOP1LOOP2: MOV P2,P1 SJMP LOOP2DELAY: MOV R0,#100DEL0: MOV R1,#50DEL1: MOV R2,#25DEL2: DJNZ R2,DEL2 DJNZ R1,DEL1 DJNZ R0,DEL0 RET END3.3 可控制数字音乐盒设计 主要由单片机控制系统、行列式键盘、液晶显示屏、内存外部扩充电路、复位电路等组成。 单片机AT89S51是本系统的核心,它主要负责控制各个部分协调工作。在其外围接上:复位电路、数码管、按钮及扬声器。元件为:晶振X1、电容、电阻、扬声器、4*4行列式键盘、74LS373锁存器、27C512外部程序存储器扩展、LM016L液晶显示屏。硬件电路中用P1.0P1.7控制按键,其中P1.0P1.3扫描行,P1.4P1.7扫描列,用P2.0P2.2作为LCD的RS,R/W,E的控制信号。用P0.0P0.7作为LCD的D0D7的控制信号。用P3.7口控制蜂鸣器,电路为12MHZ晶振频率工作,起振电路中C1,C2均为30pf。将P0口作为74LS373锁存器的输入以及27C512的数据输入口,锁存器输出至27C512的低八位地址口,将P2口作为27C512高八位地址口,27C512的控制信号OE/VPP接至单片机的PSEN,实现片外ROM的读写控制。 3.3.1 硬件电路原理 本音乐发生器是用单片机来设计制作完成,其功能的实现主要通过软件编程来完成, AT89C51单片机片内带有4KB和外部程序存储器扩展的256K的内存,并且允许在系统内改写或用编程器编程。该音乐发生器的效率较高,其误差主要由晶振自身的误差所造成。存储歌曲是采用的外部扩展,4*4行列式键盘来实现的,按键将单片机I/0 口的电平拉低,单片机检测到I/O口电平为0时,判断并存储键值。并自动跳转至相应曲号的标号处执行代码。显示采用的是液晶显示屏LM016L,显示稳定清晰,并且能显示多个信息,当片内4K的程序存储器存满后,自动跳转到片外256K程序存储器继续存储。 3.3.2 播放音乐的原理 发音原理:播放一段音乐需要的是两个元素,一个是音调,另一个是音符。首先要了解对应的音调,音调主要由声音的频率决定,同时也与声音强度有关。对一定强度的纯音,音调随频率的升降而升降;对一定频率的纯音、低频纯音的音调随声强增加而下降,高频纯音的音调却随强度增加而上升。另外,音符的频率有所不同。基于上面的内容,这样就对发音的原理有了一些初步的了解。 音符的发音主要靠不同的音频脉冲。利用单片机的内部定时器/计数器0,使其工作在模式1,定时中断,然后控制P3.0引脚的输出音乐。只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。 3.3.3 音符频率的产生 (1)音符及定时器初始值: 例如:中音1(do)的音频=523HZ,周期T=1/523s=1912sm 定时器/计数器0的定时时间为:T/2=1912/2sm=956sm 定时器956sm的计数值=定时时间/机器周期=956sm/1sm=956(时钟频率=12MHZ) 装入T0计数器初值为65536-956=64580 表3.3 C调各音符频率与计数初值T的对照表 音符频率(HZ)/初值(us) 音符频率(HZ)/初值(us) 低1DO 262/63627 中1DO 523/64580 高1DO 1042/65056 低2RE 294/63835 中2RE 589/64687 高2RE 1245/65134 低3M 330/64021 中3M 661/64780 高3M 1318/65157 低4FA 350/64107 中4FA700/64822 高4FA 1397/65178 低5SO393/64264 中5SO 786/64900 高5SO1568/65217 低6LA441/64402 中6LA882/64969 高6LS1760/65252 低7SI495/64526 中7SI990/65031 高7SI 1967/65282 将64580装入T0寄存器中,启动T0工作后,每计数956次时将产生溢出中断,进入中断服务时,每次对P3.0引脚的输出值进行取反,就可得到中音DO(523HZ)的音符音频。将51单片机内部定时器工作在计数器模式1下,改变计数初值TH0,TL0以产生不同的频率。表3.3是C调各音符频率与计数初值T的对照表。 (2)音符、音符编码及定时器初始值: 为了产生音符,必须求出音符低音5高音5的计数初值。例如C调的低1DO的THTL=65536-50000/262=63627,中音DO的THTL=65536-500000/523=64580,高音DO的THTL=65536-500000/1042=65056。为了方便写谱,对其进行简单的编码,在编程时,根据音符编码查找对应的计数初值。比如说音乐是C调的,那么出现低音的5SO,直接将代码写为1;出现低音6LA,直接写一个2的代码;出现低音7SI,直接写一个3代码。 表3.4 是音符编码表 音符音符编码音符音符编码不发音 0低5SO 1低6LA 2低7SI 3中1DO 4中2RE 5中3M 6中4FA 7中5SO 8中6LA 9中7SI A高1DO B高2RE C高3M D高4FA E高5SO F高6LA G(3)节拍频率的产生 音乐中的节拍用延时时间产生。例如,1拍=0.4s,1/4拍=0.1s,以此类推。假设1/4拍执行一次延时程序,则1/2拍就执行两次延时程序,所以只要求出1/4拍的延时时间,其余节拍就是它的倍数。为了方便,将节拍数也进行了编码,并且计算了乐谱节拍编程时的延时时间,如表3.5和表3.6所示。 表3.5 节拍数编码表按1/4拍为一个延时时间的节拍编码与节拍对应的表按与节拍对应的表1/8拍为一个延时时间的节拍编码节拍编码节拍节拍编码 节拍节拍编码节拍节拍编码节拍 1 1/4 6 6/4 1 1/8 6 6/8 2 2/