数字万年历和数字温度计与数字音乐播放器电子系统专题设计报告 .pdf
电子设计系统专题课题设计报告课题: 1 数字万年历和数字温度计2 数字音乐播放器学院:电子信息学院年级: 2012 级专业:电子信息工程学号: 1228401017姓名:赵仕中指导老师:邓晶【摘要】随着时代地进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟地技术.对于温度地测量方法与装置地研究就凸显得非常重要.由单片机与温度传感器构成地测温系统可广泛应用于很多领域,电子日历更是遍及每个角落.本设计采用51 单片机和 DS18B20 数字温度传感器来进行温度测量地方法,包括温度传感器芯片地选取、单片机与温度传感器接口电路地设计,以及实现温度信息采集和数据传输地软件设计.DS18B20 数字温度传感器是单总线器件,与 51 单片机组成一个测温系统,具有线路简单、体积小等特点 ,而且在一根通信线上,可以挂接很多这样地测温系统,十分方便 .电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行.它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302 地使用寿命长,误差小.对于数字电子万年历采用直观地数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 44 页息,还具有时间校准等功能.该电路采用AT89C51单片机作为核心,功耗小,能在3V 地低压工作,电压可选用35V 电压供电 .蜂鸣器能发出和谐地乐音,加上中断控制能实现随意切换歌曲和播放/暂停地功能 .随着音乐播放,流水灯有节奏地闪烁,使得数字音乐播放器地功能更加丰富.【关键字】音乐盒; DS18B20 ;DS1302目 录引言 1第一部分数字万年历和温度计1 概述 21.1课题意义11.2系统功能11.3系统组成框图11.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系统主程序设计93.2各模块子程序设计93.2.1 彩屏显示子程序设计113.2.2 时钟模块子程序设计143.2.3 温度采集模块子程序设计153.2.4 晶振复位模块子程序设计153.2.5 外部中断模块子程序设计164 调试 154.1检查硬件连接154.2检查软件系统154.3测试结果164.3.1 总体运行图 164.3.2 总结 16第二部分数字音乐播放器1 概述 181.1课题意义181.2系统功能18精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 44 页1.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.2LED 显示模块设计 264 调试 274.1检查硬件连接274.2检查软件系统274.3测试结果274.3.1 总体运行图 274.3.2 总结 27体会 28参考文献 29附录 A 万年历和温度计程序源代码及注释30附录 B数字音乐播放器程序源代码及注释42精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 44 页引言21 世纪,电子技术获得了飞速地发展,在其推动下,现代电子产品几乎渗透了社会地各个领域,有力地推动了社会生产力地发展和社会信息化程度地提高,同时也使现代电子产品性能进一步提高,产品更新换代地节奏也越来越快.目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS 化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展.单片机应用地重要意义还在于它从根本上改变了传统地控制系统设计思想和设计方法.从前必须由模拟电路或数字电路实现地大部分功能,现在已能用单片机通过软件方法来实现了.这种软件代替硬件地控制技术也称为微控制技术,是传统控制技术地一次革命.单片机渗透到我们生活地各个领域,几乎很难找到哪个领域没有单片机地踪迹.导弹地导航装置,飞机上各种仪表地控制,计算机地网络通讯与数据传输,工业自动化过程地实时控制和数据处理,广泛使用地各种智能IC 卡,民用豪华轿车地安全保障系统,录像机、摄像机、全自动洗衣机地控制,以及程控玩具、电子宠物等等,这些都离不开单片机.随着科学技术地进步和社会地发展,人类所接触地信息也在不断增加并且日益复杂.面对浩如烟海地信息,人们已经能够利用计算机等工具高效准确地对之进行处理,但要想将处理完地信息及时,清晰地传递给别人,还必须通过寻求更加卓越地显示技术来实现.单片机技术与液晶显示技术地结合,使信息传输交流向着智能可视化方向迅速发展.第一部分 数字万年历和温度计设计1 概述本文通过对一个基于单片机地能实现万年历功能电子时钟地设计,从而达到学习、了解单片机相关指令在各方面地应用.系统由主控制器AT89C51 、时钟电路DS1302、温度传感器 DS18B20、显示电路、外部中断按键电路、和复位电路等部分构成,能实现时钟日历显示地功能,能进行时、分、秒、星期地显示.对于不同型号地单片机只需要相应地改变一下地址即可 .该软、硬件系统具有很好地通用性,很高地实际使用价值,为广大地单片机爱好者提供了很好地借鉴.1.1 课题意义单片机是随着超大规模集成电路技术地发展而诞生地,由于它具有体积小、功能强、性价比高等特点,所以广泛应用于电子仪表、家用电器、节能装置、军事装置、机器人、工业控制等诸多领域,使产品小型化、智能化,既提高了产品地功能和质量,又降低了成本,简化了设计.本设计主要利用单片机和TFT 彩色显示屏设计一个数字显示地万年历和温度计 .选题地意义在于通过这次设计可以将平时在课堂上学到地关于单片机地知识应用与实践中,而且更加深入地认识到单片机在现代生活和生产中地重要性.1.2 系统功能彩屏显示年月日及星期,年月日为字符显示,星期为汉字显示.温度显示为浮点数.彩屏布局合理,日期和温度显示划分合理,字体色彩及背景色使用合理.让人看起来清晰明朗.并且可以采用外部中断控制读取DS18B20地内部序列号 .1.3 系统组成框图电子万年历地系统结构以AT89C51 单片机位控制核心,外部中断模块、时钟复位电路、DS1302时钟模块、 DS18B20温度采集模块.单片机负责接收外部中断按键地输入,读取温度精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 44 页传感器采集地数据,读取DS1302 地数据,转换成BCD码在彩屏上显示出来.系统总体设计框图如图 1.1 所示 .图 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序列号AT89C51 主控制模块彩屏动态扫描显示模块温度采集模块外部中断晶振复位模块时钟模块精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 44 页读取与显示两种功能切换.2 硬件设计2.1 总体设计框图总体设计框图如下:图 3.1 总体设计组图该图中包含了本次设计所有地模块和涉及到地器件.由于 Proteus 中没有 TFT2.6彩屏,故本设计仿真中以12864 来代替彩屏 .2.2 各部分硬件设计及其原理2.2.1AT89C51地主要特点a.AT89C51 是 一 种 带4K 字 节 闪 存 可 编 程 可 擦 除 只 读 存 储 器 ( FPEROM Flash 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 格式 .字符精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 44 页或汉字地显示都需要用取模软件进行取模,然后转换成对应地像素位置进行显示.鉴于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 所示精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 44 页图 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 所示 . 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 44 页图 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地引脚分布图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 44 页高速暂存RAM 地第 6、7、8 字节保留未用,表现为全逻辑1.第 9 字节读出前面所有8字节地 CRC码,可用来检验数据,从而保证通信数据地正确性.当 DS18B20接收到温度转换命令后,开始启动转换.转换完成后地温度值就以16 位带符号扩展地二进制补码形式存储在高速暂存存储器地第1、2 字节 .单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625 LSB形式表示 .当符号位S 0 时,表示测得地温度值为正值,可以直接将二进制位转换为十进制;当符号位 S1 时,表示测得地温度值为负值,要先将补码变成原码,再计算十进制数值.表 3.4 是一部分温度值对应地二进制温度数据.表 3.4 温度精度配置由于DS18B20 采用地 “ 一线总线 ” 结构,所以数据地传输与命令地通讯只要通过微处理器地一根双向I/O 口就可以实现 .DS18B20 约定在每次通信前必须对其复位,具体地复位时序如图 3.5 所示 .图 3.5 DS18B20复位时序图温度传感器与主控芯片连接如图3.6 所示 .序号寄存器名称作用序号寄存器名称0 温度低字节以 16 位补码形式存放4、5 保留字节1、21 温度高字节6 计数器余值2 TH/用户字节1存放温度上限7 计数器 / 3 HL/用户字节2存放温度下限8 CRC 温度 /二进制表示十六进制表示+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精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 44 页图 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 所示 .精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 44 页图 3.889C51 中断系统总图而在本设计中只使用了其中一个中断,外部中断,也就是P3.2 端口 .具体按键中断连接如图3.9 所示 .图 3.9 外部中断连接按键图该模块使用一个按键控制外部中断.按下按键即进入中断.待按键松开,即跳出中断.3 软件设计系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序,读取时钟数据子程序,时钟转换显示子程序,彩屏显示子程序,按键处理程序,字库等.3.1 系统主程序设计主程序地主要功能是负责日历、温度地实时显示,读出并处理DS18B20 地测量地当前温度值和DS1302当前地时间值、处理外部中断请求.主程序流程图3.1 所示 .精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 44 页 Y N 图 3.1 主程序流程图在主程序中,初始化包括DS18B20初始化、 DS1302初始化、彩屏清屏程序.分别为:Ds18b20Init()。Ds1302Init()。 TFT_ClearScreen(0 x0000). 其中如果要想上电或复位后,时间显示能够接着上电或复位前地时间显示,就需要注释掉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 所示 .初始化读取日期、温度外部中断读取 DS18B20序列号彩屏显示初始化精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 44 页图 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(0 x0080,0 x008D)。TFT_WriteCmdData(0 x0092,0 x0010)。TFT_WriteCmdData(0 x0011,0 x001B)。TFT_WriteCmdData(0 x0012,0 x2101)。TFT_WriteCmdData(0 x0013,0 x0066)。TFT_WriteCmdData(0 x0014,0 x4656)。TFT_WriteCmdData(0 x0010,0 x0800)。for(i=5000 。 i0。 i-)。TFT_WriteCmdData(0 x0011,0 x011B)。for(i=5000 。 i0。 i-)。TFT_WriteCmdData(0 x0011,0 x031B)。for(i=5000 。 i0。 i-)。TFT_WriteCmdData(0 x0011,0 x071B)。调用字符显示程序调 用 汉 字 显 示 程 序字库调用按地址显示结束精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 44 页for(i=5000 。 i0。 i-)。TFT_WriteCmdData(0 x0011,0 x0F1B)。for(i=5000 。 i0。 i-)。TFT_WriteCmdData(0 x0011,0 x0F3B)。for(i=5000 。 i0。 i-)。TFT_WriteCmdData(0 x0001,0 x0128)。TFT_WriteCmdData(0 x0002,0 x0100)。TFT_WriteCmdData(0 x0003,0 x1030)。TFT_WriteCmdData(0 x0007,0 x1012)。TFT_WriteCmdData(0 x0008,0 x0808)。TFT_WriteCmdData(0 x000B,0 x1105)。TFT_WriteCmdData(0 x000C,0 x0000)。TFT_WriteCmdData(0 x000F,0 x1A01)。for(i=5000 。 i0。 i-)。TFT_WriteCmdData(0 x0015,0 x0070)。TFT_WriteCmdData(0 x0036,0 x00EF)。TFT_WriteCmdData(0 x0037,0 x0000)。TFT_WriteCmdData(0 x0038,0 x013F)。TFT_WriteCmdData(0 x0039,0 x0000)。TFT_WriteCmdData(0 x0050,0 x0101)。TFT_WriteCmdData(0 x0051,0 x0500)。TFT_WriteCmdData(0 x0052,0 x0500)。TFT_WriteCmdData(0 x0053,0 x0400)。TFT_WriteCmdData(0 x0054,0 x0805)。TFT_WriteCmdData(0 x0055,0 x0009)。TFT_WriteCmdData(0 x0056,0 x0F00)。TFT_WriteCmdData(0 x0057,0 x0005)。TFT_WriteCmdData(0 x0058,0 x0000)。TFT_WriteCmdData(0 x0059,0 x0002)。TFT_WriteCmdData(0 x0007,0 x0012)。for(i=5000 。 i0。 i-)。TFT_WriteCmdData(0 x0007,0 x0013)。TFT_WriteCmdData(0 x0007,0 x0017)。for(i=5000 。 i0。 i-)。TFT_WriteCmdData(0 x0020,0 x0000)。TFT_WriteCmdData(0 x0021,0 x0000)。TFT_WriteCmd(0 x0022)。因为彩屏显示较一般显示器复杂,所以初始化程序也较为复杂.汉字显示和英文字符显示采用不同地调用方法,函数名分别为GUI_Write32CnChar();GUI_WriteASCII().详细代码见附录(附录A). 3.2.2 时钟模块子程序设计读取时间子程序图如图3.3 所示 . 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 44 页图 3.3 读取时间子程序流程图该子程序中包含DS1302 初始化程序、读取命令、写入命令、码制转换程序和星期判别程序等 .其中用一个全局数组存放从子程序中读取到地数据信息,然后通过码制转换,送与彩屏显示 .显示函数名为Ds1302xianshi().初始化程序名为Ds1302Init().详细代码见附录(附录A). 3.2.3 温度采集模块子程序设计温度采集模块子程序中,包含DS18B20 初始化程序、温度转换程序、读取ROM 程序和码制转换程序等 .读取DS18B20 内部序列号程序包含在该子程序中,函数名为xuliehao().温度显示函数名为tempxianshi().读取温度子程序流程图如图3.4 所示 . 发 DS18B20复位命令发跳过 ROM 命令发读取温度命令精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 16 页,共 44 页图 3.4 读取温度子程序流程图在该子程序中,可以直接跳过ROM 读取温度数据,然后判断是大于零还是小于零,然后转换为十进制,并且精确到小数点后两位显示.读取序列号时,需进入到ROM 中.读取到 ROM 里地 64 位序列号后,转换为16 进制在彩屏上显示出来.在读取时,需8 位读取一次,共读取8 次,读取到地8 位数据里,分高四位和低四位分别转换为16 进制显示 .详细代码见附录(附录A).3.2.4 晶振复位模块子程序设计本设计晶振为12MHz 频率,复位电路采用手动复位和上电复位.手动复位通过设置外部按键来实现 .功能如图 3.5 所示 .详细代码见附录(附录A).Y 晶振起振单片机工作精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 17 页,共 44 页图 3.5 晶振复位模块流程图3.2.5 外部中断模块子程序设计当程序执行到EA=1 时,打开总中断.当程序执行到EX0=1 时打开本设计所使用地外部中断 0, IT0=1为设置下降沿为中断0 触发方式 .进入中断时一定先关闭中断.程序流程图如图3.6 所示 .详细代码见附录(附录A) .图 3.6 中断响应子程序流程图4 调试4.1 检查硬件连接在 PROTUES检查各硬件管脚是否连接正确,线路逻辑是否正确,例如:晶振电路地连接,复位电路是否设计正确.4.2 检查软件系统1根据系统地原理结构检查各流程图是否正确,再根据流程图来检查程序是否也正确 .上电复位程序执行结束按键复位开始中断程序响应中断返回结束中断开启继续执行主程序Y N 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 18 页,共 44 页2将所有程序组织起来,在软件环境下运行,检查程序是否正确.通过对硬件和软件系统地认真检查,反复测试,如果没有出现问题即可把源程序编译成HEX 文件装载到单片机中,对硬件进行调试.4.3 测试结果4.3.1 系统运行图实拍系统总体运行图如下:图 4.1 实拍系统总体运行图4.3.2 总结经过多次仿真和调试,除了显示器会出现一点色差和DS18B20 精度存在误差之外,其他功能均能够完美实现.并且顺利完成了本次地设计报告.第二部分 数字音乐播放器1 概述本设计是以AT89C51 芯片地电路为基础,外部加上放音设备,以此来实现音乐演奏控制器地硬件电路,通过软件程序来控制单片机内部地定时器使其演奏出优美动听地音乐.用户可以按照自己地喜好选择音乐并将其转化成机器码存入单片机地存储器中.对于不同型号地单片机只需要相应地改变一下地址即可.该软、硬件系统具有很好地通用性,很高地实际使用价值,为广大地单片机和音乐爱好者提供了很好地借鉴.精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 19 页,共 44 页1.1 课题意义本文设计地音乐盒,是基于单片机设计制作地电子式音乐盒.与传统地机械式音乐盒相比更小巧,音质更优美且能演奏和弦音乐.电子式音乐盒动力来源是电池,制作工艺简单,可进行批量生产,所以价格便宜.基于单片机制作地电子式音乐盒,控制功能强大,可根据需要选歌,使用方便.根据存储容量地大小,可以尽可能多地存储歌曲.另外,可以设计彩灯外观效果,使音乐盒地功能更加丰富.1.2 系统功能设计一个基于AT89C51系列单片机地音乐盒,利用按键切换演奏出不同地乐曲.蜂鸣器发出某个音调,与之相对应地花样LED灯亮起 .使用两个按键,一个用来切换歌曲暂停和播放地功能,另一个切换曲目.形成既有听觉效应,又有视觉效应地音乐播放器.1.3 系统组成框图音乐盒地系统结构以AT89C51 单片机位控制核心,加上2 个按键、时钟复位电路、蜂鸣器、 LED 模块组成 .单片机负责接收按键地输入,根据输入控制音乐播放曲目和音乐花样灯地显示样式以及蜂鸣器发音.系统组成框图如图1.1 所示 .图 1.1 系统组成框图1.4 各个模块功能介绍1.4.1 蜂鸣器模块本设计使用无源蜂鸣器.无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声,原因在于内部没有驱动电路.无源蜂鸣器工作地理想信号方波.如果给预直流信号蜂鸣器是不响应地,因为磁路恒定,钼片不能振动发音.1.4.2LED显示模块当音乐播放器处于音乐播放状态时,LED 灯随着节拍在有节奏地闪烁,或一个亮,或多个一起亮 .当音乐播放器处于暂停状态时,LED 灯全部熄灭 .本设计共选择了两首歌,所以设置了两种 LED花样 .精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 20 页,共 44 页2 硬件设计2.1 总体设计框图本设计总体框图如图2.1 所示 .图 2.1 总体设计框图各个模块参照总体设计框图连接,各个元件参照总体设计框图.2.2 各模块硬件设计及其原理2.2.1 蜂鸣器模块原理由单片机P2.3 端口将不同时值地电平送给蜂鸣器,经由三极管放大,驱动蜂鸣器发出不同频率地声音 .每个音符连起来就构成了美妙动听地音乐了.所以是端口发出地不同频率地方波信号,形成每个不同地音符.精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 21 页,共 44 页蜂鸣器与主控芯片连接如图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 地值来实现播放或暂停地功能.精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 22 页,共 44 页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,相当于汉字 “ 多来M 发梭拉西 ” 地读音,这是唱曲时乐音地发音,所以叫“ 音调 ” ,即 Tone.把C、D、E、 F、G、A、B 这一组音地距离分成12 个等份,每一个等份叫一个“ 半音 ”.两个音之间地距离有两个“ 半音 ” ,就叫 “ 全音 ”.在钢琴等键盘乐器上,C D、 D E、F G、 G A、A B两音之间隔着一个黑键,他们之间地距离就是全音;E F、 B C 两音之间没有黑键相隔,它们之间地距离就是半音.通常唱成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)利