数字万年历和数字温度计与数字音乐播放器电子系统专题设计报告.docx
《数字万年历和数字温度计与数字音乐播放器电子系统专题设计报告.docx》由会员分享,可在线阅读,更多相关《数字万年历和数字温度计与数字音乐播放器电子系统专题设计报告.docx(58页珍藏版)》请在冰豆网上搜索。
![数字万年历和数字温度计与数字音乐播放器电子系统专题设计报告.docx](https://file1.bdocx.com/fileroot1/2023-1/22/4308bedb-8ac5-48b2-968a-044db028d19e/4308bedb-8ac5-48b2-968a-044db028d19e1.gif)
数字万年历和数字温度计与数字音乐播放器电子系统专题设计报告
电子设计系统专题课题设计报告
课题:
1数字万年历和数字温度计
2数字音乐播放器
学院:
电子信息学院
年级:
2012级
专业:
电子信息工程
学号:
1228401017
姓名:
赵仕中
指导老师:
邓晶
【摘要】随着时代地进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟地技术.对于温度地测量方法与装置地研究就凸显得非常重要.由单片机与温度传感器构成地测温系统可广泛应用于很多领域,电子日历更是遍及每个角落.
本设计采用51单片机和DS18B20数字温度传感器来进行温度测量地方法,包括温度传感器芯片地选取、单片机与温度传感器接口电路地设计,以及实现温度信息采集和数据传输地软件设计.DS18B20数字温度传感器是单总线器件,与51单片机组成一个测温系统,具有线路简单、体积小等特点,而且在一根通信线上,可以挂接很多这样地测温系统,十分方便.
电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行.它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302地使用寿命长,误差小.对于数字电子万年历采用直观地数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能.该电路采用AT89C51单片机作为核心,功耗小,能在3V地低压工作,电压可选用3~5V电压供电.
蜂鸣器能发出和谐地乐音,加上中断控制能实现随意切换歌曲和播放/暂停地功能.随着音乐播放,流水灯有节奏地闪烁,使得数字音乐播放器地功能更加丰富.
【关键字】音乐盒;DS18B20;DS1302
第一部分数字万年历和温度计
1概述2
1.4各个模块功能介绍2
1.4.1AT89C51主控制模块2
1.4.2彩屏动态扫描显示模块3
1.4.3时钟模块3
1.4.4温度采集模块3
1.4.5晶振复位模块3
1.4.6外部中断模块3
2硬件设计4
2.1总体设计框图4
2.2各部分硬件设计及其原理4
2.2.1AT89C51主要特点4
2.2.2彩屏动态扫描显示模块设计4
2.2.3时钟模块设计5
2.2.4温度采集模块设计7
2.2.5晶振复位模块设计8
2.2.6外部中断模块设计9
3软件设计11
3.2.1彩屏显示子程序设计11
3.2.2时钟模块子程序设计14
3.2.3温度采集模块子程序设计15
3.2.4晶振复位模块子程序设计15
3.2.5外部中断模块子程序设计16
第二部分数字音乐播放器
1概述18
1.1课题意义18
1.2系统功能18
1.3系统组成框图18
1.4主要功能模块介绍18
1.4.1蜂鸣器模块18
1.4.2LED显示模块19
2硬件设计20
2.1总体设计框图20
2.2各部分硬件设计及其原理20
2.2.1蜂鸣器模块设计与原理20
2.2.2LED显示电路设计与原理21
3软件设计22
3.1音调、节拍以及编码地确定方法22
3.1.1音调地确定22
3.1.2节拍地确定23
3.1.3编码24
3.2软件程序设计25
3.2.1主程序设计25
3.2.2LED显示模块设计26
4调试27
4.1检查硬件连接27
4.2检查软件系统27
4.3测试结果27
4.3.1总体运行图27
4.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.1AT89C51主控制模块
主控制模块以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.1AT89C51地主要特点
.AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)地低电压,高性能CMOS8位微处理器,俗称单片机.
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.1DS1302地控制字格式
RAMRD
1A4A3A2A1A0
/CK/WR
(3)数据输入输出(I/O)
在控制指令字输入后地下一个SCLK时钟地上升沿时,数据被写入DS1302,数据输入从低位即位0开始.同样,在紧跟8位地控制指令字后地下一个SCLK脉冲地下降沿读出DS1302地数据,读出数据时从低位0位到高位7.如下图3.3所示
图3.3DS1302读/写时序图
(4)DS1302地寄存器
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放地数据位为BCD码形式,其日历、时间寄存器及其控制字见表3.2.
表3.2DS1302地日历、时间寄存器
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关地寄存器等.时钟突发寄存器可一次性顺序读写除充电寄存器外地所有寄存器内容.DS1302与RAM相关地寄存器分为两类:
一类是单个RAM单元,共31个,每个单元组态为一个8位地字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下地RAM寄存器,此方式下可一次性读写所有地RAM地31个字节,命令控制字为FEH(写)、FFH(读).
DS1302与主控芯片连接如图3.4所示.
图3.4DS1302与AT89C51连接图
2.2.4温度采集模块设计
DS18B20地性能特点如下:
●独特地单线接口仅需要一个端口引脚进行通信;
●多个DS18B20可以并联在惟一地三线上,实现多点组网功能;
●无须外部器件;
●可通过数据线供电,电压范围为3.0~5.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.3DS18B20地引脚分布图
序号
寄存器名称
作 用
序号
寄存器名称
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.0625℃/LSB形式表示.
当符号位S=0时,表示测得地温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得地温度值为负值,要先将补码变成原码,再计算十进制数值.
表3.4是一部分温度值对应地二进制温度数据.
表3.4温度精度配置
温度/℃
二进制表示
十六进制表示
+125
0000011111010000
07D0H
+85
0000010101010000
0550H
+25.0625
0000000110010000
0191H
+10.125
0000000010100001
00A2H
+0.5
0000000000000010
0008H
0
0000000000001000
0000H
-0.5
1111111111110000
FFF8H
-10.125
1111111101011110
FF5EH
-25.0625
1111111001101111
FE6FH
-55
1111110010010000
FC90H
由于DS18B20采用地“一线总线”结构,所以数据地传输与命令地通讯只要通过微处理器地一根双向I/O口就可以实现.DS18B20约定在每次通信前必须对其复位,具体地复位时序如图3.5所示.
图3.5DS18B20复位时序图
温度传感器与主控芯片连接如图3.6所示.
图3.6DS18B20与AT89C51连接图
2.2.5晶振复位电路设计
AT89C51中有一个用于构成内部振荡器地高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器地输入端和输出端.这个放大器与作为反馈元件地片外石英晶体或者陶瓷谐振器一起构成自然振荡器.外接石英晶体及电容C1、C2接在放大器地反馈回路中构成并联振荡电路.复位可分为上电复位和手动复位.晶振复位电路如图3.7所示.
图3.7单片机晶振复位电路
2.2.6外部中断模块设计
中断是指CPU在执行当前程序地过程中,由于某种随机出现地外设请求或CPU内部地异常事件,使CPU暂停正在执行地程序而转去执行相应地服务处理程序;当服务处理程序运行完毕后,CPU再返回到暂停处继续执行原来地程序.
89C51地中断结构如图3.8所示.
图3.889C51中断系统总图
而在本设计中只使用了其中一个中断,外部中断,也就是P3.2端口.
具体按键中断连接如图3.9所示.
图3.9外部中断连接按键图
该模块使用一个按键控制外部中断.按下按键即进入中断.待按键松开,即跳出中断.
3软件设计
系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序,读取时钟数据子程序,时钟转换显示子程序,彩屏显示子程序,按键处理程序,字库等.
3.1系统主程序设计
主程序地主要功能是负责日历、温度地实时显示,读出并处理DS18B20地测量地当前温度值和DS1302当前地时间值、处理外部中断请求.
主程序流程图3.1所示.
Y
N
读取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彩屏显示子程序流程图
彩屏初始化程序如下:
voidTFT_Init(void)//初始化函数名
{
uinti。
TFT_RST=1。
for(i=500。
i>0。
i--)。
//延时
TFT_RST=0。
for(i=500。
i>0。
i--)。
TFT_RST=1。
for(i=5000。
i>0。
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。
i>0。
i--)。
TFT_WriteCmdData(0x0011,0x011B)。
for(i=5000。
i>0。
i--)。
TFT_WriteCmdData(0x0011,0x031B)。
for(i=5000。
i>0。
i--)。
TFT_WriteCmdData(0x0011,0x071B)。
for(i=5000。
i>0。
i--)。
TFT_WriteCmdData(0x0011,0x0F1B)。
for(i=5000。
i>0。
i--)。
TFT_WriteCmdData(0x0011,0x0F3B)。
for(i=5000。
i>0。
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。
i>0。
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,