数字万年历和数字温度计与数字音乐播放器电子系统专题设计报告.docx_第1页
数字万年历和数字温度计与数字音乐播放器电子系统专题设计报告.docx_第2页
数字万年历和数字温度计与数字音乐播放器电子系统专题设计报告.docx_第3页
数字万年历和数字温度计与数字音乐播放器电子系统专题设计报告.docx_第4页
数字万年历和数字温度计与数字音乐播放器电子系统专题设计报告.docx_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子系统专题设计实验报告电子设计系统专题课题设计报告课题: 1 数字万年历和数字温度计2 数字音乐播放器学院: 电子信息学院年级: 2012级专业: 电子信息工程学号: 1228401017姓名: 赵仕中指导老师: 邓晶【摘要】随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域, 已经成为一种比较成熟的技术。对于温度的测量方法与装置的研究就凸显得非常重要。由单片机与温度传感器构成的测温系统可广泛应用于很多领域,电子日历更是遍及每个角落。本设计采用51单片机和ds18b20 数字温度传感器来进行温度测量的方法,包括温度传感器芯片的选取、单片机与温度传感器接口电路的设计,以及实现温度信息采集和数据传输的软件设计。ds18b20 数字温度传感器是单总线器件,与51 单片机组成一个测温系统,具有线路简单、体积小等特点,而且在一根通信线上,可以挂接很多这样的测温系统,十分方便。电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且ds1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用at89c51单片机作为核心,功耗小,能在3v的低压工作,电压可选用35v电压供电。蜂鸣器能发出和谐的乐音,加上中断控制能实现随意切换歌曲和播放/暂停的功能。随着音乐播放,流水灯有节奏的闪烁,使得数字音乐播放器的功能更加丰富。【关键字】音乐盒; ds18b20;ds1302目 录引 言1第一部分 数字万年历和温度计1 概述21.1 课题意义21.2系统功能21.3系统组成框图21.4各个模块功能介绍21.4.1 at89c51主控制模块21.4.2 彩屏动态扫描显示模块31.4.3 时钟模块31.4.4 温度采集模块31.4.5 晶振复位模块31.4.6 外部中断模块32 硬件设计42.1 总体设计框图42.2各部分硬件设计及其原理42.2.1 at89c51主要特点42.2.2 彩屏动态扫描显示模块设计42.2.3 时钟模块设计52.2.4 温度采集模块设计72.2.5 晶振复位模块设计82.2.6 外部中断模块设计93 软件设计113.1 系统主程序设计113.2 各模块子程序设计113.2.1 彩屏显示子程序设计113.2.2 时钟模块子程序设计143.2.3 温度采集模块子程序设计153.2.4 晶振复位模块子程序设计153.2.5 外部中断模块子程序设计164 调试174.1 检查硬件连接174.2 检查软件系统174.3 测试结果174.3.1 总体运行图174.3.2 总结17第二部分 数字音乐播放器1 概述181.1 课题意义181.2系统功能181.3系统组成框图181.4 主要功能模块介绍181.4.1 蜂鸣器模块181.4.2 led显示模块192 硬件设计202.1 总体设计框图202.2各部分硬件设计及其原理202.2.1 蜂鸣器模块设计与原理202.2.2 led显示电路设计与原理213 软件设计223.1音调、节拍以及编码的确定方法223.1.1 音调的确定223.1.2 节拍的确定233.1.3 编码243.2 软件程序设计253.2.1 主程序设计253.2.2 led显示模块设计264 调试274.1 检查硬件连接274.2 检查软件系统274.3 测试结果274.3.1 总体运行图274.3.2 总结27体会28参考文献29附录a 万年历和温度计程序源代码及注释30附录b 数字音乐播放器程序源代码及注释42引言21世纪,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着cmos化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。单片机应用的重要意义还在于它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能ic卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。随着科学技术的进步和社会的发展,人类所接触的信息也在不断增加并且日益复杂。面对浩如烟海的信息,人们已经能够利用计算机等工具高效准确地对之进行处理,但要想将处理完的信息及时,清晰地传递给别人,还必须通过寻求更加卓越的显示技术来实现。单片机技术与液晶显示技术的结合,使信息传输交流向着智能可视化方向迅速发展。第一部分 数字万年历和温度计设计1概述本文通过对一个基于单片机的能实现万年历功能电子时钟的设计,从而达到学习、了解单片机相关指令在各方面的应用。系统由主控制器at89c51、时钟电路ds1302、温度传感器ds18b20、显示电路、外部中断按键电路、和复位电路等部分构成,能实现时钟日历显示的功能,能进行时、分、秒、星期的显示。对于不同型号的单片机只需要相应的改变一下地址即可。该软、硬件系统具有很好的通用性,很高的实际使用价值,为广大的单片机爱好者提供了很好的借鉴。1.1 课题意义单片机是随着超大规模集成电路技术的发展而诞生的,由于它具有体积小、功能强、性价比高等特点,所以广泛应用于电子仪表、家用电器、节能装置、军事装置、机器人、工业控制等诸多领域,使产品小型化、智能化,既提高了产品的功能和质量,又降低了成本,简化了设计。本设计主要利用单片机和tft彩色显示屏设计一个数字显示的万年历和温度计。选题的意义在于通过这次设计可以将平时在课堂上学到的关于单片机的知识应用与实践中,而且更加深入的认识到单片机在现代生活和生产中的重要性。1.2系统功能彩屏显示年月日及星期,年月日为字符显示,星期为汉字显示。温度显示为浮点数。彩屏布局合理,日期和温度显示划分合理,字体色彩及背景色使用合理。让人看起来清晰明朗。并且可以采用外部中断控制读取ds18b20的内部序列号。1.3 系统组成框图电子万年历的系统结构以at89c51单片机位控制核心,外部中断模块、时钟复位电路、ds1302时钟模块、ds18b20温度采集模块。单片机负责接收外部中断按键的输入,读取温度传感器采集的数据,读取ds1302的数据,转换成bcd码在彩屏上显示出来。系统总体设计框图如图1.1所示。at89c51主控制模 块彩屏动态扫描显示模块外部中断 时钟模块温度采集模块晶振复位模块图1.1 系统总体设计框图1.4 各个模块功能介绍1.4.1 at89c51主控制模块主控制模块以at89c51为核心,通过指令控制去读取ds18b20和ds1302的数据,然后送给彩屏显示器显示。该芯片包含两个外部中断,使用其中一个外部中断去控制彩屏显示。1.4.2 彩屏动态扫描显示模块显示主控芯片从ds18b20和ds1302读取到的数据,多行多列一起显示,使得该显示器较其他显示器能够显示的信息更多,无论是汉字还是字符,都方便直接观察和应用。1.4.3 时钟模块时钟模块以ds1302芯片为核心。ds1302包括时钟/日历寄存器和31字节(8位)的数据暂存寄存器,数据通信仅通过一条穿行输入输出口。实时时钟/日历提供包括秒、分、时、日期、月份和年份信息。闰年可自行调整,可选择12小时制和24小时制,可以设置am、pm。1.4.4 温度采集模块温度采集模块以ds18b20为核心,一个控制操作命令指示ds18b20完成温度测量,该测量的结果将放入ds18b20高速暂存存储器,通过发出读暂存存储器操作命令可以读出此结果。再通过码制转换送与显示器显示。1.4.5 晶振复位模块晶振是石英振荡器的简称,其作用是在电路产生震荡电流,发出时钟信号。 复位电路是为确保微机系统中电路稳定可靠工作必不可少的一部分,复位电路的第一功能是上电复位。晶振电路是给单片机提供时钟信号,复位电路的作用是使单片机的程序计数器清零。1.4.6 外部中断模块at89c51提供有5个中断源,分别为:2个外部中断,2个定时/计数器中断,1个串口发送/接收中断。并且具有2个中断优先级,可以实现2级中断服务程序嵌套。本设计只占用at89c51一个外部中断,p3.2端口。采用按键的形式,实现电子日历显示和ds18b20序列号读取与显示两种功能切换。2硬件设计2.1 总体设计框图总体设计框图如下:图3.1总体设计组图该图中包含了本次设计所有的模块和涉及到的器件。由于proteus中没有tft2.6彩屏,故本设计仿真中以12864来代替彩屏。2.2各部分硬件设计及其原理2.2.1 at89c51的主要特点a.at89c51是一种带4k字节闪存可编程可擦除只读存储器(fperomflash programmable and erasable read only memory)的低电压,高性能cmos 8位微处理器,俗称单片机。b.at89c51是一种带2k字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除10000次。c.该器件采用atmel高密度非易失存储器制造技术制造,与工业标准的mcs-51指令集和输出管脚相兼容。由于将多功能8位cpu和闪烁存储器组合在单个芯片中,atmel的at89c51是一种高效微控制器,at89c2051是它的一种精简版本。d.at89c51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。鉴于at89c51具有以上特点,本设计采用at89c51为主控芯片。2.2.2 彩屏显示电路设计一个彩色像素的信息可以用1个多位二进制数来表示和储存。用来表示彩色像素的二进制数的位数我们称为颜色深度或颜色质量。本彩屏模块采用16位二进制数5-6-5格式。字符或汉字的显示都需要用取模软件进行取模,然后转换成对应的像素位置进行显示。鉴于proteus中没有tft2.6彩屏,故仿真时用lcd12864代替,在实际电路中以tft彩屏作为显示器。彩屏与单片机连接如图3.2。图3.2 彩屏与单片机连接电路2.2.3 时钟模块设计ds1302的控制字如表3.1所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入ds1302中,位6如果0,则表示存取日历时钟数据,为1表示存取ram数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出表3.1 ds1302的控制字格式 ram rd 1 a4 a3 a2 a1 a0 / ck /wr (3) 数据输入输出(i/o)在控制指令字输入后的下一个sclk时钟的上升沿时,数据被写入ds1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个sclk脉冲的下降沿读出ds1302的数据,读出数据时从低位0位到高位7。如下图3.3所示 图3.3 ds1302读/写时序图(4) ds1302的寄存器ds1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为bcd码形式,其日历、时间寄存器及其控制字见表3.2。表3.2 ds1302的日历、时间寄存器此外,ds1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与ram相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 ds1302与ram相关的寄存器分为两类:一类是单个ram单元,共31个,每个单元组态为一个8位的字节,其命令控制字为c0hfdh,其中奇数为读操作,偶数为写操作;另一类为突发方式下的ram寄存器,此方式下可一次性读写所有的ram的31个字节,命令控制字为feh(写)、ffh(读)。ds1302与主控芯片连接如图3.4所示。图3.4 ds1302与at89c51连接图2.2.4 温度采集模块设计ds18b20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个ds18b20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5v;零待机功耗;温度以9或12位数字;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;ds18b20内部结构主要由四部分组成:64位光刻rom,温度传感器,非挥发的温度报警触发器th和tl,高速暂存器。64位光刻rom是出厂前被光刻好的,它可以看作是该ds18b20的地址序列号。不同的器件地址序列号不同。64位rom的结构开始8位是产品类型的编号,接着是每个器件的唯一的序号,共有48位,最后8位是前面56位的crc检验码,这也是多个ds18b20可以采用一线进行通信的原因。温度报警触发器th和tl,可通过软件写入户报警上下限。ds18b20温度传感器的内部存储器还包括一个高速暂存ram和一个非易失性的可电擦除的eeram。高速暂存ram的结构为8字节的存储器。头2个字节包含测得的温度信息,第3和第4字节th和tl的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。ds18b20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如下图所示。低5位一直为1,tm是工作模式位,用于设置ds18b20在工作模式还是在测试模式,ds18b20出厂时该位被设置为0,用户要去改动,r1和r0决定温度转换的精度位数,来设置分辨率。ds18b20高速暂存器共9个存存单元,如表所示:表3.3 ds18b20的引脚分布图序号 寄存器名称 作 用 序号 寄存器名称 0 温度低字节 以16位补码形式存放 4、5 保留字节1、2 1 温度高字节 6 计数器余值 2 th/用户字节1 存放温度上限 7 计数器/ 3 hl/用户字节2 存放温度下限 8 crc 高速暂存ram的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的crc码,可用来检验数据,从而保证通信数据的正确性。当ds18b20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625lsb形式表示。当符号位s0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位s1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表3.4是一部分温度值对应的二进制温度数据。表3.4 温度精度配置温度/二进制表示十六进制表示+1250000 0111 1101 000007d0h+850000 0101 0101 00000550h+25.06250000 0001 1001 00000191h+10.1250000 0000 1010 000100a2h+0.50000 0000 0000 00100008h00000 0000 0000 10000000h-0.51111 1111 1111 0000fff8h-10.1251111 1111 0101 1110ff5eh-25.06251111 1110 0110 1111fe6fh-551111 1100 1001 0000fc90h由于ds18b20采用的“一线总线”结构,所以数据的传输与命令的通讯只要通过微处理器的一根双向i/o口就可以实现。ds18b20约定在每次通信前必须对其复位,具体的复位时序如图3.5所示。图3.5 ds18b20复位时序图温度传感器与主控芯片连接如图3.6所示。图3.6 ds18b20与at89c51连接图2.2.5 晶振复位电路设计at89c51中有一个用于构成内部振荡器的高增益反相放大器,引脚xtal1和xtal2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或者陶瓷谐振器一起构成自然振荡器。外接石英晶体及电容c1、c2接在放大器的反馈回路中构成并联振荡电路。复位可分为上电复位和手动复位。晶振复位电路如图3.7所示。图3.7 单片机晶振复位电路2.2.6 外部中断模块设计中断是指cpu在执行当前程序的过程中,由于某种随机出现的外设请求或cpu内部的异常事件,使cpu暂停正在执行的程序而转去 执行相应的服务处理程序;当服务处理程序运行完毕后,cpu再返回到暂停处继续执行原来的程序。89c51的中断结构如图3.8所示。图3.8 89c51中断系统总图而在本设计中只使用了其中一个中断,外部中断,也就是p3.2端口。具体按键中断连接如图3.9所示。图3.9外部中断连接按键图该模块使用一个按键控制外部中断。按下按键即进入中断。待按键松开,即跳出中断。3软件设计系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序,读取时钟数据子程序,时钟转换显示子程序,彩屏显示子程序,按键处理程序,字库等。3.1 系统主程序设计主程序的主要功能是负责日历、温度的实时显示,读出并处理ds18b20的测量的当前温度值和ds1302当前的时间值、处理外部中断请求。主程序流程图3.1所示。初始化外部中断 yn读取ds18b20序列号读取日期、温度彩屏显示图3.1 主程序流程图在主程序中,初始化包括ds18b20 初始化、ds1302初始化、彩屏清屏程序。分别为:ds18b20init();ds1302init();tft_clearscreen(0x0000)。其中如果要想上电或复位后,时间显示能够接着上电或复位前的时间显示,就需要注释掉ds1302初始化。在主程序开头要开启中断,先开启总中断,然后开启中断1,进入中断。ea=1; ex0=1;it0=1。设置一个全局计数变量count1,在主程序中,count1的状态决定要显示日历还是温度序列号。当count1为0时,显示日历及温度;当count1为1时显示ds18b20内部序列号。详细代码见附录(附录b)。3.2 各模块子程序设计3.2.1 彩屏显示子程序设计tft液晶模块可以显示数字、中英文字符和图案。本设计中只使用了中英文字符显示和数字显示。彩屏还包含了丰富的色彩。本设计使用黑色为界面背景和字体背景0x00、红色字体0xff。设计彩屏右上角显示为作者英文名;第二行为“电子日历”四个字;第三行居中显示年月日,格式为“xxxx-xx-xx”;第四行居中显示星期,格式为“星期 x”;第七行居中显示温度信息,格式为“温度:xxx.xx ”。彩屏显示程序中,包括彩屏驱动程序、字库、初始化程序、汉字显示程序、字符显示程序、直线显示程序等。彩屏显示子程序流程图如图3.2所示。初始化调用汉字显示程序调用字符显示程序字库调用按地址显示结束图3.2 彩屏显示子程序流程图彩屏初始化程序如下:void tft_init(void)/初始化函数名uint i;tft_rst = 1;for(i=500; i0; i-);/延时tft_rst = 0;for(i=500; i0; i-);tft_rst = 1;for(i=5000; i0; i-);tft_cs = 0;tft_writecmddata(0x0080,0x008d); tft_writecmddata(0x0092,0x0010); tft_writecmddata(0x0011,0x001b); tft_writecmddata(0x0012,0x2101); tft_writecmddata(0x0013,0x0066); tft_writecmddata(0x0014,0x4656); tft_writecmddata(0x0010,0x0800); for(i=5000; i0; i-); tft_writecmddata(0x0011,0x011b); for(i=5000; i0; i-); tft_writecmddata(0x0011,0x031b); for(i=5000; i0; i-); tft_writecmddata(0x0011,0x071b); for(i=5000; i0; i-); tft_writecmddata(0x0011,0x0f1b); for(i=5000; i0; i-); tft_writecmddata(0x0011,0x0f3b); for(i=5000; i0; i-); tft_writecmddata(0x0001,0x0128); tft_writecmddata(0x0002,0x0100); tft_writecmddata(0x0003,0x1030); tft_writecmddata(0x0007,0x1012); tft_writecmddata(0x0008,0x0808); tft_writecmddata(0x000b,0x1105); tft_writecmddata(0x000c,0x0000); tft_writecmddata(0x000f,0x1a01); for(i=5000; i0; i-); tft_writecmddata(0x0015,0x0070); tft_writecmddata(0x0036,0x00ef); tft_writecmddata(0x0037,0x0000); tft_writecmddata(0x0038,0x013f); tft_writecmddata(0x0039,0x0000); tft_writecmddata(0x0050,0x0101); tft_writecmddata(0x0051,0x0500); tft_writecmddata(0x0052,0x0500); tft_writecmddata(0x0053,0x0400); tft_writecmddata(0x0054,0x0805); tft_writecmddata(0x0055,0x0009); tft_writecmddata(0x0056,0x0f00); tft_writecmddata(0x0057,0x0005); tft_writecmddata(0x0058,0x0000); tft_writecmddata(0x0059,0x0002); tft_writecmddata(0x0007,0x0012); for(i=5000; i0; i-); tft_writecmddata(0x0007,0x0013); tft_writecmddata(0x0007,0x0017); for(i=5000; i0; i-); tft_writecmddata(0x0020,0x0000); tft_writecmddata(0x0021,0x0000); tft_writecmd(0x0022);因为彩屏显示较一般显示器复杂,所以初始化程序也较为复杂。汉字显示和英文字符显示采用不同的调用方法,函数名分别为gui_write32cnchar();gui_writeascii()。详细代码见附录(附录a)。3.2.2 时钟模块子程序设计读取时间子程序图如图3.3所示。图3.3 读取时间子程序流程图该子程序中包含ds1302初始化程序、读取命令、写入命令、码制转换程序和星期判别程序等。其中用一个全局数组存放从子程序中读取到的数据信息,然后通过码制转换,送与彩屏显示。显示函数名为ds1302xianshi()。初始化程序名为ds1302init()。详细代码见附录(附录a)。3.2.3 温度采集模块子程序设计温度采集模块子程序中,包含ds18b20初始化程序、温度转换程序、读取rom程序和码制转换程序等。读取ds18b20内部序列号程序包含在该子程序中,函数名为xuliehao()。温度显示函数名为tempxianshi()。读取温度子程序流程图如图3.4所示。发ds18b20复位命令发跳过rom命令发读取温度命令读取操作,crc校验9字节完?crc校验正?确?移入温度暂存器结束nnyy图3.4 读取温度子程序流程图在该子程序中,可以直接跳过rom读取温度数据,然后判断是大于零还是小于零,然后转换为十进制,并且精确到小数点后两位显示。读取序列号时,需进入到rom中。读取到rom里的64位序列号后,转换为16进制在彩屏上显示出来。在读取时,需8位读取一次,共读取8次,读取到的8位数据里,分高四位和低四位分别转换为16进制显示。详细代码见附录(附录a)。3.2.4 晶振复位模块子程序设计本设计晶振为12mhz频率,复位电路采用手动复位和上电复位。手动复位通过设置外部按键来实现。功能如图3.5所示。详细代码见附录(附录a)。晶振起振单片机工作按键复位上电复位程序执行结束图3.5 晶振复位模块流程图3.2.5 外部中断模块子程序设计当程序执行到ea=1时,打开总中断。当程序执行到ex0=1时打开本设计所使用的外部中断0,it0=1为设置下降沿为中断0触发方式。进入中断时一定先关闭中断。开始程序流程图如图3.6所示。详细代码见附录(附录a)。n中断开启y继续执行主程序中断程序响应中断返回结束图3.6 中断响应子程序流程图4调试4.1 检查硬件连接在protues检查各硬件管脚是否连接正确,线路逻辑是否正确,例如:晶振电路的连接,复位电路是否设计正确。4.2 检查软件系统1根据系统的原理结构检查各流程图是否正确,再根据流程图来检查程序是否也正确。2将所有程序组织起来,在软件环境下运行,检查程序是否正确。通过对硬件和软件系统的认真检查,反复测试,如果没有出现问题即可把源程序编译成hex文件装载到单片机中,对硬件进行调试。4.3 测试结果4.3.1 系统运行图实拍系统总体运行图如下:图4.1 实拍系统总体运行图4.3.2 总结经过多次仿真和调试,除了显示器会出现一点色差和ds18b20精度存在误差之外,其他功能均能够完美实现。并且顺利完成了本次的设计报告。第二部分 数字音乐播放器1概述本设计是以at89c51芯片的电路为基础,外部加上放音设备,以此来实现音乐演奏控制器的硬件电路,通过软件程序来控制单片机内部的定时器使其演奏出优美动听的音乐。用户可以按照自己的喜好选择音乐并将其转化成机器码存入单片机的存储器中。对于不同型号的单片机只需要相应的改变一下地址即可。该软、硬件系统具有很好的通用性,很高的实际使用价值,为广大的单片机和音乐爱好者提供了很好的借鉴。1.1 课题意义本文设计的音乐盒,是基于单片机设计制作的电子式音乐盒。与传统的机械式音乐盒相比更小巧,音质更优美且能演奏和弦音乐。电子式音乐盒动力来源是电池,制作工艺简单,可进行批量生产,所以价格便宜。基于单片机制作的电子式音乐盒,控制功能强大,可根据需要选歌,使用方便。根据存储容量的大小,可以尽可能多的存储歌曲。另外,可以设计彩灯外观效果,使音乐盒的功能更加丰富。1.2系统功能设计一个基于at89c51系列单片机的音乐盒,利用按键切换演奏出不同的乐曲。蜂鸣器发出某个音调,与之相对应的花样led灯亮起。使用两个按键,一个用来切换歌曲暂停和播放的功能,另一个切换曲目。形成既有听觉效应,又有视觉效应的音乐播放器。1.3系统组成框图音乐盒的系统结构以at89c51单片机位控制核心,加上2个按键、时钟复位电路、蜂鸣器、led模块组成。单片机负责接收按键的输入,根据输入控制音乐播放曲目和音乐花样灯的显示样式以及蜂鸣器发音。系统组成框图如图1.1所示。图1.1 系统组成框图1.4 各个模块功能介绍1.4.1 蜂鸣器模块本设计使用无源蜂鸣器。无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声,原因在于内部没有驱动电路。无源蜂鸣器工作的理想信号方波。如果给预直流信号蜂鸣器是不响应的,因为磁路恒定,钼片不能振动发音。1.4.2 led显示模块当音乐播放器处于音乐播放状态时,led灯随着节拍在有节奏的闪烁,或一个亮,或多个一起亮。当音乐播放器处于暂停状态时,led灯全部熄灭。本设计共选择了两首歌,所以设置了两种led花样。2 硬件设计2.1 总体设计框图本设计总体框图如图2.1所示。图2.1总体设计框图各个模块参照总体设计框图连接,各个元件参照总体设计框图。2.2各模块硬件设计及其原理2.2.1 蜂鸣器模块原理由单片机p2.3端口将不同时值的电平送给蜂鸣器,经由三极管放大,驱动蜂鸣器发出不同频率的声音。每个音符连起来就构成了美妙动听的音乐了。所以是端口发出的不同频率的方波信号,形成每个不同的音符。蜂鸣器与主控芯片连接如图2.2所示。图2.2 蜂鸣器与at89c51连接图2.2.2 led显示模块设计与原理led显示电路是由8个led发光二极管组成,连接方式为共阳极,led接到单片机的p1口,若为低电平,可使led亮起。发光二极管的亮、灭由内部程序控制,8个led发光二极管分别对应不同的音阶,所以led会随着音阶的变化按规律亮、灭。led灯与主控芯片连接如图2.3所示。图2.3 led灯连接图8个led灯和at89c51的p0端口相连,由p0端口控制。其中rp1为上拉电阻,作用是限流。3 软件设计在本程序中设置了两个标志count1和count2,分别初始化为1和0。按键1使得count1在1和2之间切换,按键2使得count2在1和2之间切换。程序检测count1的值,count1等于1时播放第一首歌曲,同时led灯闪烁,等于2时播放第二首,led灯闪烁。另一方面根据count2的值来实现播放或暂停的功能。3.1音调、节拍以及编码的确定方法一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和节拍表示一个音符唱多长的时间。3.1.1 音调的确定不同音高的乐音是用c、d、e、f、g、a、b来表示,这7个字母就是音乐的音名,它们一般依次唱成do、re、mi、fa、so、la、si,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即tone。把c、d、e、f、g、a、b这一组音的距离分成12个等份,每一个等份叫一个“半音”。两个音之间的距离有两个“半音”,就叫“全音”。在钢琴等键盘乐器上,cd、de、fg、ga、ab两音之间隔着一个黑键,他们之间的距离就是全音;ef、bc两音之间没有黑键相隔,它们之间的距离就是半音。通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它们的左上角加上号或者b号的叫变化音。叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。例如高音do的频率(1046hz)刚好是中音do的频率(523hz)的一倍,中音do的频率(523hz)刚好是低音do频率(266 hz)的一倍;同样的,高音re的频率(1175hz)刚好是中音re的频率(587hz)的一倍,中音re的频率(587hz)刚好是低音re频率(294 hz)的一倍。1)要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的i/o反相,然后重复计时此半周期时间再对i/o反相,就可在i/o脚上得到此频率的脉冲。2)利用at89c51的内部定时器使其工作在计数器模式mode1下,改变计数值th0及tl0以产生不同频率的方法。此外结束符和休止符可以分别用代码00h和ffh来表示,若查表结果为00h,则表示曲子终了;若查表结果为ffh,则产生相应的停顿效果。3)例如频率为523hz,其周期t=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次技术956次时将i/o反相,就可得到中音do(523hz)。计数脉冲值与频率的关系公式如下:n=fi2frn:计算值;fi:内部计时一次为1us,故其频率为1mhz;4) 其计数值的求法如下:t=65536-n=65536-fi2fr例如:设k=65536,f=1000000=fi=1mhz,球低音do(261hz)。中音do(523hz)。高音的do(1046hz)的计算值t=65536-n=65536-fi2fr=65536-10000002fr=65536-500000/fr低音do的t=65536-500000/262=63627低音do的t=65536-500000/523=64580低音do的t=65536-500000/1047=650595) c调各音符频率与计数值t的对照表如表3.1所示。表3.1 c调各音符频率与计数值t的对照表低音频率t参数中音频率t参数高音频率t参数do2621908229do523956115do10465757do2771805217do554903108do11095454re2941701204re587852102re11755151re3111608193re62280497re12454848mi3301515182mi65975991mi13184545fa3491433172fa69871686fa13974343fa3701351162fa74067681fa14804141so3921276153so78463877so15683838so4151205145so83160272so16613636la4401136136la88056868la17603434la4641078129la93253664la18653232si4941012121si98850661si197630303.1.2 节拍的确定若要构成音乐,光有音调是不够的,还需要节拍,让音乐具有旋律(固定的律动),而且可以调节各个音的快满度。“节拍”,即beat,简单说就是打拍子,就像我们听音乐不自主的随之拍手或跺脚。若1拍实0.5s,则1/4 拍为0.125s。至于1拍多少s,并没有严格规定,就像人的心跳一样,大部分人的心跳是每分钟72下,有些人快一点,有些人慢一点,只要听的悦耳就好。音持续时间的长短即时值,一般用拍数表示。休止符表示暂停发音。一首音乐是由许多不同的音符组成的,而每个音符对应着不同频率,这样就可以利用不同的频率的组合,加以与拍数对应的延时,构成音乐。了解音乐的一些基础知识,我们可知产生不同频率的音频脉冲即能产生音乐。对于单片机来说,产生不同频率的脉冲是非常方便的,利用单片机的定时/计数器来产生这样的方波频率信号。因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。表3.2节拍与节拍码对照节拍码节拍数节拍码节拍数11/4拍11/8拍22/4拍21/4拍33/4拍33/8拍41拍42/1拍51又1/4拍55/8拍61又1/2拍63/4拍82拍81拍a2又1/2拍a1又1/4拍c3拍c1又1/2拍f3又3/4拍每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,图5.2为节拍码的对照。如果1拍为0.4秒,1/4拍实0.1秒,只要设定延迟时间就可求得节拍的时间。假设1/4拍为1delay,则1拍应为4delay,以此类推。所以只要求得1/4拍的delay时间,其余的节拍就是它的倍数,如图3.3为1/4和1/8节拍的时间设定。表3.3 1/4和1/8节拍的时间设定曲调值delay曲调值delay调4/4125毫秒调4/462毫秒调3/4187毫秒调3/494毫秒调2/4250毫秒调2/4125毫秒3.1.3 编码do re mi fa so la si分别编码为17,重音do编为8,重音re编为9,停顿编为0。播放长度以十六分音符为单位(在本程序中为165ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。以0xff作为曲谱的结束标志。举例1:音调do,发音长度为两拍,即二分音符,将其编码为0x18。举例2:音调re,发音长度为半拍,即八分音符,将其编码为0x22歌曲播放的设计。先将歌曲的简谱进行编码,储存在一个数据类型为unsigned char 的数组中。程序从数组中取出一个数,然后分离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;接着分离出该数的低4位,得到延时时间,接着调用软件延时。表3.4 简谱对应的简谱码、t值、节拍数简谱发音简谱码t值节拍码节拍数5低音so16426011/4拍6低音la26440022/4拍7低音ti36452433/4拍1中音do46458041拍2中音re56468451又1/4拍3中音mi66477761又1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论