基于AT89S52单片机万年历的设计
董刚
班 级: 09电子信息 专 业: 电子信息工程 教 学 系: 机 电 系 指导老师: 荀 磊
完成时间: 年 月 日至 年 月 日
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
摘 要
电子万年历是一种非常广泛日常计时工具。它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能,对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3---5V电压供电。
此次是基于52系列的单片机进行的电子万年历设计,相比传统的万年历来说,精确度更高。可以显示温度、年、月、日、时、分、秒及周信息,具有可调整日期和时间功能。对单片机的理论基础和外围扩展知识进行了比较全面准备。在硬件与软件方面进行同步设计。硬件部分主要由单片机,LED显示电路,以及调时按键电路等组成。在单片机的选择上使用了AT89S52单片机,该单片机适合于许多较为复杂控制应用场合。显示器使用共阴极的数码管。使用MAX7219来驱动显示,然后并行输出。软件方面主要包括日历程序、时间调整程序、温度程序、显示程序等。程序采用汇编语言编写,以便更简单地实现调整时间及阴历显示功能。所有程序编写完成后,在keil软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。
关键词:时钟芯片、MAX7219、DS18B20、动态扫描、单片机。
1
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
目 录
摘 要............................................ 1 1 绪论............................................ 4
1.1设计背景........................................................................................................... 4 1.2设计思想........................................................................................................... 4 1.3设计框图........................................................................................................... 5
2 系统硬件设计 ..................................... 6
2.1最小化电路设计............................................................................................... 6
2.1.1 主控芯片简介........................................................................................ 6 2.1.2 复位电路、晶振电路设计.................................................................... 7 2.2显示电路设计................................................................................................... 9
2.2.1 显示器简介............................................................................................ 9 2.2.2 驱动芯片简介...................................................................................... 11 2.2.3 显示电路.............................................................................................. 16 2.3温度采集电路设计......................................................................................... 17
2.3.1 温度采集芯片简介.............................................................................. 17 2.3.2 温度采集电路...................................................................................... 21 2.4实时时钟电路设计......................................................................................... 21
2.4.1时钟芯片简介....................................................................................... 22 2.4.2时钟电路............................................................................................... 22
3 系统软件设计 .................................... 25
3.1主程序流程图................................................................................................. 26 3.2系统子程序的设计......................................................................................... 27
3.2.1送显示流程图....................................................................................... 27 3.2.2 时钟流程图.......................................................................................... 28 3.2.3 温度采集流程图.................................................................................. 29
4 系统仿真 ....................................... 30
4.1仿真软件简介................................................................................................. 30 4.2 软件仿真过程................................................................................................ 34 4.3仿真结果......................................................................................................... 36
5 系统的制作与调试 ................................ 37
5.1 系统的制作 .................................................................................................. 37 5.2 系统的调试.................................................................................................... 37
2
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
5.3 实物展示 ...................................................................................................... 38
致 谢 ......................................... 39 参考文献 ......................................... 40 附 录 一 ......................................... 41 附 录 二 ......................................... 42
3
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
1 绪论
1.1设计背景
随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨跃性的进步。
目前流行的计算机日历程序,比较典型的是Windows各版本中的日历程序以及基础于该程序所开发的各种应用程序中的日历程序。然而,这些程序都千篇一律的局限在一个很短的时间范围内。(Windows各个版本一般都局限在1980年至2099年这一范围内),但是,在很多情况下,一个时间跨度较大的日历程序是很有参考价值的,本程序在这种背景下开始编辑,其中集成了国际通用日历和中
国农历,此外还可以显示星期和加载了部分节日,显示本机准确日期等功能。
1.2设计思想
众所周知,地球绕太阳公转,公转一周历时365天5小时48分46秒。现代国际上普遍采用罗马历法,在罗马历法中人为地规定一年365天,也就是我们所说的平年,为了弥补每一年多出的5小时48分46秒,同时又规定4年中有一年是闰年,闰年为366天(平年的2月份为28天,而闰年的2月份为29天),这样4年有365*3+366=1461天,而地球绕太阳公转4周历时1460天23小时15分4秒,这样,每4年又产生了44分56秒的误差,为了减小影响,历法上又规定,每400年中只存在97个闰年,这样400年中共有365*400+97=146097天, 而地球绕太阳公转400周历时146096天21小时6分40秒,较好的弥补了这一缺陷,这样几乎3300年才产生一天的误差。
4
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
1.3设计框图
本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。晶振电路是给主控模块提供脉冲信号;温度的采集由DS18B20构成;显示部分由8个数码管,MAX7219译码器构成。使用动态扫描显示方式对数字的显示。本设计系统框图如图1.1所示。
电源电路 复位电路 按键扫描模块 主控模块 ATS8952 晶振电路 驱动电路 LED显示模块 1302时钟芯片模块 18B20温度检测模块 图1.1 基于AT89S52单片机的电子万年历系统框图
5
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
2 系统硬件设计
2.1 最小化电路设计
在单片机使用中有必须的最小化电路,它是单片机工作的前提。其中包括电源电路、晶振电路、复位电路。下面就简单介绍最小化电路。 2.1.1 主控芯片简介
(1)主要功能的简介
拥有灵巧的8位CPU和在系统可编程Flash
晶片内部具有时钟振荡器(传统最高工作频率可至 12MHz) 内部 (ROM)程序存储)为 8KB 内部(RAM)数据存储器为 256字节 32 个可编程I/O 口线 8 个中断向量源
三个 16 位定时器/计数器 三级加密程序存储器 全双工UART串行通道 (2)引脚功能简介
图2.1 AT89S52单片机的引脚图
VCC:电源正端输入,接+5V。 VSS:电源地端。
6
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
XTAL1:单芯片系统时钟的反相放大器输入端。
XTAL2:系统时钟的反相放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间加入一 20PF 的小电容,可以使系统更稳定,避免噪声干扰而死机。 RESET:重置引脚,高电平动作。
EA/Vpp:\"EA\"表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。 ALE/PROG:ALE是表示地址锁存器启用信号。
PSEN:此为\"Program Store Enable\"的缩写,其意为程序储存启用。
PORT0(P0.0~P0.7):端口0是一个8位宽的开路汲极(Open Drain)双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。其他三个I/O端口(P1、P2、P3)则不具有此电路组态,而是内部有一提升电路,P0在当做I/O用时可以推动8个LS的TTL负载。
PORT1(P1.0~P1.7):端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LS TTL负载,同样地若将端口1的输出设为高电平,便是由此端口来输入数据。
PORT3(P3.0~P3.7):端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。其引脚分配如下:
P3.0:RXD,串行通信输入。 P3.1:TXD,串行通信输出。 P3.2:INT0,外部中断0输入。 P3.3:INT1,外部中断1输入。 P3.4:T0,计时计数器0输入。 P3.5:T1,计时计数器1输入。
P3.6:WR,外部数据存储器的写入信号。 P3.7:RD,外部数据存储器的读取信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
/EA/VPP:当/EA保持低电平时,在此期间外部程序存器(0000H-FFFFH),不管是否有内部程序存储器。
7
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
.2.1.2 复位电路、晶振电路的设计
单片机工作需要3个基本条件:接电源、接石英晶体振荡器和复位电路。如图2.2所示。
图2.2 单片机的基本电路
(1)接电源
将单片机第40脚Vcc接电源+5V,第20脚Vss接地(电源负极),为单片机工作提供电源。由于AT89S52片内带有程序存储器,当使用片内程序存储器时要将EA(31脚)接高电平,即接到电源+5V。 (2)接石英晶体振荡器
将单片机第19脚(XTAL1)与18脚(XTAL2)分别接外部晶体的两个引脚,由石英晶体组成振荡器,保证单片机内部各部
分有序工作。 图2.3 晶振电路 单片机运行程序的速度与振荡器的频率有关。单片机在读、写操作时都需要消耗一定的时间。机器周期是指单片机完成一个基本操作所用的时间,当外接石英晶体为12MHz时,1个机器周期为1ms;当外接石英晶体为6MHz时,1个机器周期为1ms。
(3)复位电路
在实际应用中,复位电路有两种基本形式:一种是上电复位,另一种是上电
8
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
与按键均有效的复位如图2.4所示。
上电复位要求接通电源后,单片机自动实现复位操作。常用的上电复位电路如图2-4(a)所示。上电瞬间RST引脚获得高电平,随着电容C1的充电,RST引脚的高电平将逐渐下降。RST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。该电路典型的电阻和电容参数为:晶振为12MHz时,C1为10uF,R1为8.2KΩ;晶振为6MHz时,电容C1为22uF,R1为1KΩ。
上电与按键均有效的复位电路如图2.4(b)所示。上电与按键均有效的复位电路原理与上电复位原理相同,不同的是上电与按键均有效的复位电路在单片机运行期间,能用按键来控制复位操作晶振为6MHz时,电容C1为22uF,R2为200Ω
图
2.4(a)上电复位电路 图2.4(b)上电与按键均有效复位电路
本设计中使用后者电路复位,就是可以在单片机运行期间可以人工的复位。这样是比较方便。
2.2 显示电路设计
.2.2.1 显示器的简介
发光二极管LED是简单常用的输出设备,通常用来指示机器的状态或其它信息。它的优点是价格低,寿命长,对电压电流的要求低及容易实现多路等,因而在测量控制仪器中获得了广泛的应用。
LED是近似于恒压的元器件,到导电时(发光)的正向压降一般约为1.6V或2.4V,反向击穿电压一般≥5V。工作电流通常在10---20mA,故电路中需要串联适当的限流电阻。发光强度基本上与正向电流成正比。发光效率和颜色取决于制造的材料,一般常用红色,偶尔也用于黄色或绿色。
多个LED可接成共阴或共阳极形式。通过驱动器接到系统的并行输出口上,由CPU输出适当的代码来点亮或熄灭相应的LED。
9
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
发光二级管显示驱动(点亮)的方法有如下2种:
静态驱动方法:即给欲点亮的LED通过恒定的定流。这种驱动方法需要显
示的位数增加时,所需的逻辑部件及连线也相应增加,成本也增加。 动态驱动方法:是给欲点亮的LED通过脉冲电流,此时LED的脉冲电流倍
数于其额定电流值。利用动态驱动方法可以减少需要的逻辑部件和连线。 7段LED数码显示器
最常用的一种数码显示器是由7段条形的LED组成,如图2.5所示。
图2.5(a)共阴极接法 图2.5(b)共阳极接法
点亮适当的字段,就可以出不同的数字。此外不少于7段数码管显示器在右下角带有一个圆形的LED作小数点用,这样一共有8段,恰好适用于8位的并行系统。
图2.5(a)为共阴极接法,公共阴极接地。当各段阳极上的电平为“1”时,该段点亮;电平为“0”时,段就熄灭。图2.5(b)为共阳极接法+5V电源。当各段阴极上的电平为“0”时,该段就点亮;电平为“1”时,段就熄灭。图中的电阻是限流电阻。
图2.6 7段LED数码管显示器内部段的排列
10
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
为了在7段(图2.6)LED上显示不同的数字或字符,首先要把数字或字符转换成相应的段码(又称字型码),由于电路接法不同,形成的段码也不相同,如表2-1所示。
表2-1 7段数码显示器的段位码
存储器地址 SEG SEG+1 SEG+2 SEG+3 SEG+4 SEG+5 SEG+6 SEG+7 SEG+8 SEG+9 SEG+10 SEG+11 SEG+12 SEG+13 SEG+14 SEG+15 显示数字 0 1 2 3 4 5 6 7 8 9 A B C D E F 共阴极接法的7段状态 g f e d c b a 0 1 1 1 1 1 1 0 0 0 0 1 1 0 1 0 1 1 0 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 0 1 1 0 1 1 0 1 1 1 1 1 1 0 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 0 0 0 1 共阴极接法段码(十六进制数) 3F 06 5B 4F 66 6D 7D 07 7F 67 77 7C 39 5E 79 71 共阳极接法段码(十六进制数) 40 79 24 30 19 12 02 78 00 18 08 03 46 21 06 0E 注:由于用MAX7219驱动译码,所以,本文选用共阴极数码管,只显示0---9,如果要用7段数码显示器显示多位数字,就用MAX7219来驱动,下一节MAX7219的驱动。详情请参考上一节。 2.2.2 驱动芯片的简介
MAX7219是MAXMI公司生产的一种串行接口方式7段共阴极LED显示驱动器。其片内包含有一个BCD码到B码的译码器、多路复用扫描电路、字段和
11
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
字位驱动器,以及存储每个数字的8X8RAM。每位数字都可以被寻址和更新,允许对每一位数字选择B码译码或不译码。采用三线串行方式与单片机接口。电路十分简单,只需要一个10KΩ左右的外接电阻来设置所有LED的段电流。MAX7219的引脚排列如图2.7所示。
图2.7 MAX7219的引脚排列
(1)引脚功能简介
DIN:串行数据输入。在CLK时钟的上升沿,串行数据被移入内部移位寄存器。移入时最高位(MSB)在前。
DIG0-7:8根字位驱动引脚,它从LED显示器吸入电流。 GND:接地,两根GND引脚必须相连。
LOAD:装载数据输入。在LOAD的上升沿,串行输入数据的最后16位被锁存。
CLK:时钟输入。它是串行数据输入时所需的移位脉冲。最高时钟频率为10MHz,在CLK地上升沿串行数据被移入内部移位寄存器,在CLK的下降沿数据从DOUT移出。
SEGA-SEGG,DP:七段和小数点驱动输出,它提供LED显示器源电流。 ISET:通过一个10KΩ电阻Rset接到V+以设置峰值段电流。 V+:+5V电源电压。
DOUT:串行数据输出。输入到DIN的数据经过16.5个时钟周期后,在DOUT端有效。
(2) MAX7219的传输方式:
采用串行数据传输方式,由16位数据包发送到DIN引脚的串行数据在每个CLK的上升沿被移入的内部16位移位寄存器,然后在LOAD的上升沿将数据所存到数字或控制寄存器中。LOAD信号必须在第16个时钟上升沿同时或之后,
12
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
但在下一个时钟上升沿之前变高;否则将会丢失数据。DIN端的数据通过移位寄存器传送,并在16.5个时钟周期之后出现在DOUT端。DOUT端的数据在CLK的下降沿输出。串行数据以16位为一帧,其中,D11-D8为内部寄存器地址,D7-D0为寄存器数据,格式如表2-2所示。
表2-2 MAX7219的串行数据格式 D15 X D14 X D13 X D12 X D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 MSN 数据 LSB 地址 (3) MAX7219的内部寄存器:
MAX7219具有14个可寻址的内部数字和控制寄存器。8个数字寄存器由一个片内8X8双端口SRAM实现,它们可以直接寻址;因此,可以对单个数字进行更新;并且只要V+超过2V,数据就可以保留下去。控制寄存器有5个,分别为译码方式、显示亮度、扫描界限(扫描数位的个数)、停机和显示测试。另外还有一个空操作寄存器(NO-OP),在不改变显示或影响任一控制寄存器的条件下器件级联时,它允许数据从DIN传到DOUT。表2.3所列为MAX7219的内部寄存器及其地址。
表2-3 MAX7219的内部寄存器及其地址
地址 寄存器 D15-D12 NO – OP 数字0 数字1 数字2 数字3 数字4 数字5 数字6 数字7 译码方式 亮度 扫描界限 停机
D11 D10 D9 D8 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 十六进制代码 X0H X1H X2H X3H X4H X5H X6H X7H X8H X9H XAH XBH XCH 13
X X X X X X X X X X X X X 南通纺织职业技术学院 基于AT89S52单片机的万年历设计
显示测试 X 1 1 1 1 XFH 下面以表格形式对MAX7219内部寄存器中不同数据所表示的含义进行说明。
表2-4为译码方式寄存器中数据的含义。从表中可见,寄存器中的每一位与一个数字位相对应,逻辑高电平选择B译码,而逻辑低电平则选择旁路译码器。
表2-4 译码方式寄存器(地址 = X9H)
含义 7 – 0位均不译码 0位译成B码,7 – 1均不译码 3 – 0译成B码,7 – 4均不译 7 – 0位译成B码 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 十六进制代码 00H 01H 0FH FFH MAX7219可用V+和ISET之间所接外部电阻Rset来控制显示亮度。来自段驱动器的峰值电流通常为进入ISET电流的100倍。Rset既可以为固定电阻,也可以为可变电阻,以提供来自面板的亮度调节,其最小值为9.52KΩ。段电流的数字控制由内部脉宽调制DAC控制。该DAC通过亮度寄存器向低4位加载,将平均峰值电流按16级比例设计,从Rset设置峰值电流的31/32的最大值到1/32的最小值,如表2-5所列,最大亮度出现在占空比为31/32时。
表2-5 亮度寄存器(地址 = XAH)
占空比(亮度) 1/32(最小亮度) 3/32 5/32 29/32 31/32(最大亮度) D7 D6 D5 D4 D3 D2 D1 D0 X X X X 0 0 0 0 X X X X 0 0 0 1 X X X X 0 0 1 0 X X X X 1 1 1 0 X X X X 1 1 1 1 十六进制代码 X0H X1H X2H XEH XFH 扫描界限寄存器用于设置所显示的数字位,可以为1-8。通常以扫描频率为1300Hz、8位数字、多路方式显示。因为所扫描数字的多少会影响显示亮度,所以要注意调整。如果扫描界限寄存器被设置为3个数字或更少,各数值驱动器将消耗过量的功率。因此,Rset电阻的值必须按所显示数字的位数多少适当调整,以限制各个数字驱动器的功耗。表2-6为扫描界限寄存器中数据的含义。
表2-6 扫描界限寄存器(地址=XBH)
显示数字位 D7 D6 D5 D4 D3 D2 D1 D0 十六进制代码 14
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
只显示第0位 显示第0位-第1位数字 显示第0位-第2位数字 显示第0位-第6位数字 显示第0位-第7位数字 X X X X X 0 0 0 X X X X 0 0 0 1 X X X X 0 0 1 0 X X X X X 0 1 1 X X X X X 1 1 1 X0H X1H X2H X6H X7H 当MAX7219处于停机方式时,扫描振荡器停止工作,所有的段电流源被拉到地,而所有的位驱动器被拉到V+,此时LED将不显示。在数字和控制寄存器中的数据保持不变。停机方式可用于节省功耗或使LED处于闪烁。MAX7219退出停机方式的时间不到250uS,在停机方式下显示驱动器还可以进行编程。停机方式可以被显示测试功能取消。表2-7为停机寄存器中数据的含义。
表2-7 停机寄存器(地址 = XCH)
工作方式 停机 正常 D7 D6 D5 D4 D3 D2 D1 D0 X X X X X X X 0 X X X X X X X 1 十六进制代码 X0H X1H 显示测试寄存器有两种工作方式:正常和显示测试。在显示测试方式下8位数字被扫描,占空比为31/32。通常不考虑(但不改变)所有控制寄存器和数据寄存器(包括停机寄存器)内的控制器来接通所有的LED显示器。表2-8为显示测试寄存器中数据的含义。
表 2-8 显示测试寄存器(地址 = XFH)
工作方式 停机 显示设置 D7 D6 D5 D4 D3 D2 D1 D0 X X X X X X X 0 X X X X X X X 1 十六进制代码 X0H X1H 数字0-7寄存器受译码器寄存器的控制:译码或不译码。数据将寄存器可将BCD码译成B码(0-9、-、E、L、P),如表2-9所列。如果不译码,则数字寄存器中数据的D6-D0为=位分别对应7段LED显示器的A-G段,D7位对应LED的小数点DP。某一位数据为1,则点亮与该位对应的LED段;数据为0,则熄灭该段。
表 2-9 数字0-7寄存器(地址 = X1H – X8H)
7段 寄存器数据 点亮段 15
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
字形 0 1 2 3 4 5 6 7 8 9 - E H L P 暗 D7 D6-D4 D3 D2 D1 D0 X 0 0 0 0 X 0 0 0 1 X 0 0 1 0 X 0 0 1 1 X 0 1 0 0 X 0 1 0 1 X 0 1 1 0 X 0 1 1 1 X 1 0 0 0 X 1 0 0 1 X 1 0 1 0 X 1 0 1 1 X 1 1 0 0 X 1 1 0 1 X 1 1 1 0 X 1 1 1 1 DP A B C D E F G 1 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1 0 1 1 0 1 1 1 1 1 0 0 1 0 1 1 0 0 1 1 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0 0 1 1 0 0 1 1 1 1 0 1 1 0 1 1 1 0 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 0 0 0 0 0 注:小数点DP由D7位控制,D7=1点亮小数点 .2.2.3 显示电路
图2.8为89S52单片机与MAX7219的一种接口。89S52的P1.0口连接到
16
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
图2.8 MAX7219与89S52单片机接口
MAX7219的DIN端,P1.1口连到LOAD端,P1.2连到CLK端。采用软件模拟方式产生MAX7219所需的工作时序。图2.8为数据传输时序设计的MAX7219显示驱动程序例子,程序执行后在LED上显示8051字样。
2.3温度采集电路设计
该产品采用美国DALLAS公司生产的 DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。如图2.9所示。
图2.9 DS-18B20数字传感器
2.3.1 温度采集芯片简介
1. DS18B20引脚结构如图2.10所示。
图2.10 引脚结构
DS1820通过一个单线接口发送或接收信息,因此在中央微处理器和DS1820
17
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
之间仅需一条连接线(加上地线)。用于读写和温度转换的电源可以从数据线本身获得,无需外部电源。
因为每个DS1820都有一个独特的片序列号,所以多只DS1820可以同时连在一根单线总线上,这样就可以把温度传感器放在许多不同的地方。这一特性在HVAC环境控制、探测建筑物、仪器或机器的温度以及过程监测和控制等方面非常有用。 引脚说明 GND:接地。 NC :接空。
DQ :数据输入/输出脚。
VDD:外接供电电源输入端(在寄生电源接线方式时接地)。 2. 技术性能描述
(1)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
(2)测温范围 -55℃~+125℃,固有测温分辨率0.5℃。
(3)支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定,实现多点测温 。
(4)工作电源: 3~5V/DC 。
(5)在使用中不需要任何外围元件 。
(6)测量结果以9~12位数字量方式串行传送。 (7)不锈钢保护管直径 Φ6。
(8)适用于DN15~25, DN40~DN250各种介质工业管道和狭小空间设备测温。
(9)标准安装螺纹 M10X1, M12X1.5, G1/2任选。
(10)PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。 3. 应用范围
(1)该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温和控制领域 。
(2)轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控制。 (3)汽车空调、冰箱、冷柜、以及中低温干燥箱等。
18
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
(4)热制冷管道热量计量,中央空调分户热能计量和工业领域测温和控制 。
4. DS18B20测温原理如图2.11所示。
斜坡累加器预置比较LSB低温度系数振荡器计数器预置置位清零=0增加温度寄存器低温度系数振荡器计数器=0停止 图2.11 测温原理
温度℃ +125 +25 +0.5 0 -0.5 -25 -55 表2-10 温度/数据关系 数据输出(二进制) 0 0 0 0 0 0 0 0 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 数据输出(十六进制) 00FA 0032 0001 0000 FFFF FFCE FF92 DS18B20是这样测温的:用一个高温度系数的振荡器确定一个门周期,内部计数器在这个门周期内对一个低温度系数的振荡器的脉冲进行计数来得温度值。计数器被预置到对应于-55℃的一个值。如果计数器在门周期结束之前到达0,则温度寄存器(同样被预置到-55℃)的值增加,表明所测温度大于-55℃。
同时,计数器被复位到一个值,这个值由斜坡式累加器电路用来补偿感温振荡器的抛物线特性。然后计数器又开始计数直到0,如果门周期仍未结束,将重
19
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
复这一过程。
斜坡式累加器用来补偿感温振荡器的非线性,以期在测温时获得比较高的分辨力,这是通过改变计数器对温度每增加一度所需计数的值来实现的。因此,要想获得所需的分辨力,必须同时知道在给定温度下计数器的值和每一度的计数值。
DS18B20内部对此计算的结果提供0.5℃的分辨力。温度以16bit带符号位扩展的二进制补码形式读出,表给出了温度值和输出数据的关系。数据通过单线接口以串行方式传输。
DS18B20测温范围-55℃--- +125℃,以0.5℃递增。如果于华氏温度,必须要用一个转换因子查找。 5) 时序
主机使用时间隙(time slots)来读写DSl820的数据位和写命令字的位。 (1)初始化
时序见图2.12主机总线to时刻发送一复位脉冲(最短为480us的低电平信号)接着在tl时刻释放总线并进入接收状态DSl820在检测到总线的上升沿之后等待15-60us接着DS1820在t2时刻发出存在脉冲(低电平持续60-240 us)如图中虚线所示。
480uS 15uS~60uS 15uS~60uST0T1T2T360uS~240uST4
图2.12 初始化时序图 (2). 写时间隙
当主机总线to时刻从高拉至低电平时就产生写时间隙见图2.13(a)图1.13(b)从to时刻开始15us之内应将所需写的位送到总线上DSl820在t0后15-60us间对总线采样若低电平写入的位是0见图2.13(a),若高电平写入的位是1,见图2.13(b),连续写2位间的间隙应大于1us。
20
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
>60uS >60uST015uS15uS~60uST1>1uST015us45uS>1usT1
图2.13(a)写0时序 图2.13(b) 写1时序 (3). 读时间隙
见图2.14主机总线to时刻从高拉至低电平时总线只须保持低电平l7us之后,在t1时刻将总线拉高产生读时间隙,读时间隙在t1时刻后t2时刻前有效t2距t0为15us也就是说t2时刻前主机必须完成读位并在t0后的60us-120us内释放总线。读位子程序(读得的位到C中)。
>60uS15uST0T1T2T3>1uS 主机起作用DS1820 上拉电阻起作用
图2.14 读时序
.2.3.2温度采集电路
此电路图是以DS18B20温度采集芯片为主,以单片机为辅。通过温度采集芯片采集到外部温度转化之后,再通过单片机芯片的转化然后输出显示。如图
2.15所示。 图2.15 温度采集电路
21
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
2.4 实时时钟电路设计
DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。 2.4.1时钟芯片简介
Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器。
其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。
I/O为串行数据输入输出端(双向)。
SCLK为时钟输入端。 如图(2.16)为DS1302的引脚功能图。
2
图2.16 DS1302的引脚图分布
22
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
1) DS1302的控制字节
DS1302 的控制字如表2-11所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。
表2-11 DS1302的控制字节
1RAMA4C\\K\\A3A2A1A0RAMK\\
2)数据输入输出(I/O)
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。 3)DS1302的寄存器
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。DS1302内部寄存器的列表如图2-12所示。
表2-12 DS1302内部寄存器列表
寄存器名称 命令字 取值范围 各位内容 写 读 7 6 5 4 3 2 1 0 秒寄存器 80H 81H 00-59 CH 10SEC SEC 分寄存器 82H 83H 00-59 0 10MIN MIN 小时寄存器 84H 85H 01-12或00-23 12/24 0 A HR HR 日寄存器 86H 87H 01-28,29,30,31 0 0 10DATE DATE 月寄存器 88H 89H 01-12 0 0 0 10M MONTH 23
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
周寄存器 8AH 8BH 01-07 0 0 0 0 DAY 年份寄存器 8CH 8DH 00-99 10YEAR YEAR 5)DS1302的寄存器和控制命令
DS1302工作是为了对任何数据传送进行初始化,需要将要复位脚(RST)置为高电平且将8位地址和命令信息装入移位寄存器。数据在时钟(SCLK)的上升沿串行输入,前8位指定访问地址,命令字装入寄存器后,在之后的时钟周期,读操作时输出数据,写操作时输出数据。时钟脉冲的个数在单字节方式下为8+8(8位地址+8位输数据),在多字节方式下为8加最多可达248的数据。对DS1302的操作就是对其内部寄存器的操作,DS1302内部共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、始终突发寄存器及与RAM相关的寄存器等。始终突发寄存器可一次性顺利读写除充电寄存器以外的寄存器。日历、时间寄存器及控制字如表2-13所示。
表2-13 日历、时钟寄存器与控制字对照表 寄存器名称 秒寄存器 分寄存器 小时寄存器 日寄存器 月寄存器 星期寄存器 年寄存器 写寄存器 慢充电寄存器 时钟突发寄存器 7 1 1 1 1 1 1 1 1 1 1 1 6 RAM/CK 0 0 0 0 0 0 0 0 0 0 5 A4 0 0 0 0 0 0 0 0 0 1 4 A3 0 0 0 0 0 0 0 0 1 1 3 A2 0 0 0 0 1 1 1 1 0 1 2 A1 0 0 1 1 0 0 1 1 0 1 1 A0 0 1 0 1 0 1 0 1 0 1 0 RD/W 注:最后一位RD/W为“0”时表示进行写操作,为“1”是表示读操作
物理上,DS1302的通讯接口由3个口线组成,即RST,SCLK,I/O。其中RST
24
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
从低电平变成高电平启动一次数据传输过程,SCLK是时钟线,I/O是数据线。具体的读写时序参考下图,但是请注意,无论是哪种同步通讯类型的串行接口,都是对时钟信号敏感的,而且一般数据写入有效是在上升沿,读出有效数据是在下降沿(DS1302正是如此的,但是在芯片手册里没有明确说明),如果不是特别确定,则把程序设计成这样:平时SCLK保持低电平,在时钟变动前设置数据,在时钟变动后读取数据,即数据操作总是在SCLK保持为低电平的时候,相邻的操作之间间隔有一个上升沿和一个下降沿。
0R/W\\1A02A13A24A35A46RAMCK7101234567
图2.17 DS1302的命令结构
2.4.2时钟电路
此电路图中是以DS1302时钟芯片为主,单片机为辅来控制时钟。DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。如图2.18所示。
图2.18 时钟电路
25
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
3系统软件的设计
3.1 主程序流程图
时间调整使用两个调整按键,一个作为控制位移,另一个作为加“1”调整,分别定义为控制按键,加“1”按键。在调整时间的过程中,需要调整的位与其他应该区别开来,所以增加了闪烁功能。主程序流程图如下图3.1所示。
开始 初始化
是
是否调整时间 否 读时间和日期 分离日期/时间显示值 日期/时间显示子程序 日期、时间修改子程序 返回
图3.1基于AT89S52单片机的万年历主程序流程图
26
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
3.2 系统子程序的设计
在系统中不仅包括主程序的设计为了在编写程序中方便,可以使用子程序,
这样只需要调用子程序就可以实现。 3.2.1 MAX7219送显示流程图
在系统一开始首先定义变量,定义好之后初始化各个变量的初始值,然后设置显示区的首地址,设置好之后开始传输数据,传送完之后就开始显示传输的数据值。如图3.2所示。
开始定义变量初始化设置显示区首址传送数据显示返回 图3.2 MAX7219的流程图
27
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
3.2.2 DS1302的流程图
DS1302可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,其中主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。首先对DS1302初始化,然后再读取DS1302中的时间,最后将时、分、秒显示出来,如此循环来计时,如图3.3所示。
开始DS1302初始化读取DS1302时间显示时、分、秒图3.3 DS1302的流程图
28
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
3.2.3 18B20的流程图
DS1820通过一个单线接口发送或接收信息,因此在中央微处理器和DS1820之间仅需一条连接线(加上地线)。用于读写和温度转换的电源可以从数据线本身获得,无需外部电源。接通后首先采集温度,然后初始化,再启动温度转换,然后读取温度,最后输出返回,如图3.4所示。
DS18B20温度采集模块DS18B20初始化跳过ROM启动温度转换DS18B20初始化跳过ROM读取温度返回 图3.4 DS18B20的流程图
29
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
4 系统仿真简介
4.1 仿真软件简介
Protues软件是英国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等多种编译。
图4.1 Protues仿真编译界面
1.软件的功能特点:
Protues软件具有其它EDA工具软件(例:multisim)的功能。这些功能是: (1)原理布图、PCB自动或人工布线、SPICE电路仿真
30
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
(2)Protues提供的仿真元器件资源:仿真数字和模拟、交流和直流等数千种元器件,有30多个元件库。
(3)Protues提供的仿真仪表资源 :示波器、逻辑分析仪、虚拟终端、SPI调试器、I2C调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。理论上同一种仪器可以在一个电路中随意的调用。
(4)Protues提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗。这些都尽可能减少了仪器对测量结果的影响。
(5)Protues提供的调试手段 Protues提供了比较丰富的测试信号用于电路的测试。这些测试信号包括模拟信号和数字信号。 2. 用Protues软件编写原理图: (1)智能原理图设计(ISIS)
丰富的器件库:超过27000种元器件,可方便地创建新元件;智能的器件搜索:通过模糊搜索可以快速定位所需要的器件;智能化的连线功能:自动连线功能使连接导线简单快捷,大大缩短绘图时间;支持总线结构:使用总线器件和总线布线使电路设计简明清晰;可输出高质量图纸:通过个性化设置,可以生成印刷质量的BMP图纸,可以方便地供WORD、POWERPOINT等多种文档使用。 (2)完善的电路仿真功能(Prospice)
ProSPICE混合仿真:基于工业标准SPICE3F5,实现数字/模拟电路的混合仿
真;超过27000个仿真器件:可以通过内部原型或使用厂家的SPICE文件自行设计仿真器件,Labcenter也在不断地发布新的仿真器件,还可导入第三方发布的仿真器件。
多样的激励源:包括直流、正弦、脉冲、分段线性脉冲、音频(使用wav文
件)、指数信号、单频FM、数字时钟和码流,还支持文件形式的信号输入。 丰富的虚拟仪器:13种虚拟仪器,面板操作逼真,如示波器、逻辑分析仪、
信号发生器、直流电压/电流表、交流电压/电流表、数字图案发生器、频率计/计数器、逻辑探头、虚拟终端、SPI调试器、I2C调试器等。
生动的仿真显示:用色点显示引脚的数字电平,导线以不同颜色表示其对地
31
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
电压大小,结合动态器件(如电机、显示器件、按钮)的使用可以使仿真更加直观、生动。
高级图形仿真功能(ASF):基于图标的分析可以精确分析电路的多项指标,
包括工作点、瞬态特性、频率特性、传输特性、噪声、失真、傅立叶频谱分析等,还可以进行一致性分析。 (3)独特的单片机协同仿真功能(VSM)
支持主流的CPU类型:如ARM7、8051/52、AVR、PIC10/12、PIC16、PIC18、
PIC24、dsPIC33、HC11、BasicStamp、8086、MSP430等,CPU类型随着版本升级还在继续增加,如即将支持CORTEX、DSP处理器。
支持通用外设模型:如字符LCD模块、图形LCD模块、LED点阵、LED
七段显示模块、键盘/按键、直流/步进/伺服电机、RS232虚拟终端、电子温度计等等,其COMPIM(COM口物理接口模型)还可以使仿真电路通过PC机串口和外部电路实现双向异步串行通信。
实时仿真:支持UART/USART/EUSARTs仿真、中断仿真、SPI/I2C仿真、
MSSP仿真、PSP仿真、RTC仿真、ADC仿真、CCP/ECCP仿真。 编译及调试:支持单片机汇编语言的编辑/编译/源码级仿真,内带8051、AVR、
PIC的汇编编译器,也可以与第三方集成编译环境(如IAR、Keil和Hitech)结合,进行高级语言的源码级仿真和调试。 (4)实用的PCB设计平台
原理图到PCB的快速通道: 原理图设计完成后,一键便可进入ARES的PCB
设计环境,实现从概念到产品的完整设计。
先进的自动布局/布线功能:支持器件的自动/人工布局;支持无网格自动布
线或人工布线;支持引脚交换/门交换功能使PCB设计更为合理。 完整的PCB设计功能:最多可设计16个铜箔层,2个丝印层,4个机械层
(含板边),灵活的布线策略供用户设置,自动设计规则检查,3D 可视化预览。
多种输出格式的支持:可以输出多种格式文件,包括Gerber文件的导入或导
出,便利与其它PCB设计工具的互转(如Protel)和PCB板的设计和加工。
32
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
3. 软件仿真:
支持当前的主流单片机,如51系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列、68000系列等。
(1)提供软件调试功能。
(2)提供丰富的外围接口器件及其仿真。RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。
(3)提供丰富的虚拟仪器,利用虚拟仪器在仿真过程中可以测量外围电路的特性。
(4)具有强大的原理图绘制功。 4. 电路功能仿真:
在PROTUES绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在PROTUES的原理图中看到模拟的实物运行状态和过程。PROTUES 是单片机课堂教学的先进助手。PROTUES不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。课程设计、毕业设计是学生走向就业的重要实践环节。
由于PROTUES提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台。随着科技的发展“计算机仿真技术”已成为许多设计部门重要的前期设计手段。它具有设计灵活,结果、过程的统一的特点。可使设计时间大为缩短、耗资大为减少,也可降低工程制造的风险。相信在单片机开发应用中PROTUES也能获得愈来愈广泛的应用。
33
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
4.2 软件仿真的过程
1. 绘制原理图
图4.2 用protues画的原理图
2. 导入程序
(1)由于在Keil c软件中最后生成的是*.hex文件,所以在Keil c软件中编写好程序后,要将*.asm文件转换成*.hex文件。首先,先将程序编译如图(4.3 a)所示。然后再单击“options for target”按钮,就会弹出如图(4.3 b)所示的对话框。然后再单击“Output”按钮,选中“Create HEX Fi”最后单击“确认”按钮
34
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
就文件转换完成。
图4.3 (a) 图4.3(b)
(2)在Protues软件中画好原理图后,然后双击主芯片AT89S52就会弹出如图(4.4)所示的对话框。然后再选择上面生成的*.hex文件。最后进行运行。
图4.4程序加载的界面
35
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
4.3仿真结果
8位数码管中分别显示的是:温度、年/时、月/分、日/秒,如图4.5所示。
图4.5(a)显示的是初始化的温度、时、分、秒
图4.5(b)显示的是初始化的温度、年、月、日
36
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
5 系统的制作与调试
在对设计任务的各项功能要求、技术指标进行分析后,画总的原理图,然后根据原理图,在印制电路板上放置元器件。 5.1 系统的制作
(1)根据电路图先在万能板上进行插件。首先进行排板,尽量减少跳线,这样一来自己的板子就相对比较美观。
(2)元器件的安装顺序一般为先低后高、先轻后重、先易后难、先一般后特殊 ,排板完成后再布线,然后开始焊接。
(3)在插完元器件之后就对其进行焊接。焊接要求焊点饱满圆滑,不虚焊,不漏焊,不短接。
(4)在接线时用软导线与硬导线相结合的方法,在使用硬导线时要做到横平竖直,这样既解决了跳线的问题,又使自己的板子比较漂亮。 5.2 系统的调试
在电路板焊好后,先在不通电的情况下,用直观法或万用表对电路板进行检查。主要检查电路板各元件的安装是否正确,焊点有无漏焊、虚焊、桥接等。排除故障时,要细心、耐心。例如,断线再接时不要搭错位置,更换元器件时看清型号参数,操作完成后再仔细检查一遍,确定检查无误,然后再通电试验,进行静态测试和动态测试。
晶体管、集成电路等有源器件必须在静态工作点上工作,才能表现出良好的动态。静态调试一般是指没有外加信号的条件下测试电路各点的电位。测出的数据与设计的数据相比较,若超出规定范围,则分析原因,并做适当的调整。静态工作点正常后,进行动态测试。动态测试就是在电路的输入端加入适当的信号,然后进行相关数据测试,若超出规定范围,则分析原因,并做适当的调整。
(1)由于DS18B20的DQ脚与单片机的引脚接错导致没有温度显示,本来DQ引脚应该接在单片机的P1.0口,但是由于自己的疏忽接在了单片机的P0.0口,导致没有温度显示。
(2)数码管的乱码显示,由于粗心造成在接MAX7219芯片时将位码和段码的引脚接反了,造成了数码管的乱码。
37
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
5.3 实物展示
38
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
致 谢
在荀老师精心的指导下,我顺利完成了这次毕业设计(基于AT89S52单片机的万年历设计)。通过这次的设计,使我认识到我在单片机方面的知识太少了。对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,不能够充分理解每个语句的具体涵义,导致编程的程序过于复杂,使得需要的存储空间增大,损耗了过多的内存资源。
本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。在学校课堂的学习只是在给我们灌输专业的知识,而我们应该把所学到的用到我们现实生活中去。此次的万年历设计给我奠定了一个实践基础。我会在以后的学习、生活中磨练自己,使自己适应以后的竞争,同时在查找资料的过程中我也学到了很多新的知识,在和同学协作过程中增进了同学的友谊。使我对团队精神的积极性和重要性有了更加充分的理解。
最后,感谢荀磊老师对我细心的指导,正是由于荀老师细心地辅导和他提供给我们的参考资料,使得我的课程设计能够顺利的完成,同时在课程设计过程中,我们巩固和学习了我们的单片机知识。相信这对我以后的课程设计和毕业设计将会有很大的帮助。
毕业设计,也许是我大学生涯交上的最后一个作业了。想借次机会感谢三年以来给我帮助的所有老师、同学,你们的友谊是我人生的财富,是我生命中不可或缺的一部分。大学生活即将匆匆忙忙地过去,但我却能无悔地说:“我曾经来过”。大学三年,它给我的影响却不能用时间来衡量,这三年以来,经历过的所有事,所有人,都将是我以后生活回味的一部分,是我为人处事的指南针。就要离开学校,走上工作的岗位了,这是我人生历程的又一个起点,在这里祝福大学里跟我风雨同舟的朋友们,一路走好,未来总会是绚烂缤纷。
“风雨不改凌云志,振衣濯足展襟怀。行方智圆煅内蕴,海阔天空铸宏图。”生命就像我的作品一样,不停地转着,永无止境。人生的道路也许会充满荆棘,生活的重担也许会压得我们喘不过气,但是只要我们心怀梦想,不畏艰辛,勇敢地往前看,相信我们的人生会更加璀璨,天边那道彩虹也将会为我们而划出更加绚丽的光彩。
39
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
参考文献
【1】李军.51系列单片机高级实例开发指南.北京航空航天大学出版社.2004 【2】王守义,聂元铭.51单片机开发入门与典型实例.人民邮电出版社.2009 【3】李全利.单片机原理及应用技术.高等教育出版社.2004 【4】高伟.AT89单片机原理及应用.北京国防工业出版社.2008 【5】蔡朝阳.单片机控制实习与专题制作.京航空航天大学出版社.2006 【6】刘建清.从零开始学单片机技术.国防工业出版社.2006 【7】李全利.单片机原理及应用技术.高等教育出版社.2004
【8】徐爱钧.智能化测量控制仪表原理与设计.北京航空航天大学出版社.2004 【9】杨志忠,卫桦林.数字电子技术基础.高等教育出版社.2004
40
DS1afgddpabcdefgdpabgddpD1D2D3D4D5D6D7D8abgddpdpdpdpdpdpcdddddecececececgggggcefbfbfbfbfbfbaaaaafe19181416202321151722GNDDQVCC21DINV+LOADCLKISETDIG0SEG ADIG1SEG BDIG2SEG CDIG3SEG DDIG4SEG EDIG5SEG FDIG6SEG GDIG7SEG DPDOUTGNDR34.7K+511213211673105824RSTI/OSCLK+5C2R11K+5S6S5S4S3S2R11KR11K100pFS1R11KR21K开始转换调日/秒调月/分调年/时2C130pFP3.5P3.6P3.7Y11234567891011121314151617181920P0.0VccP0.1P1.0P0.2P1.1P0.3P1.2P0.4P1.3P0.5P1.4P0.6P1.5P0.7P1.6RST/VpdP1.7RXD/P3.0EA/VppTXD/P3.1ALE/PPOGINT0/P3.2PSENINT1/P3.3P2.7T0/P3.4P2.6T1/P3.5P2.5WR/P3.6P2.4RD/P3.7P2.3XTAL2P2.2XTAL1P2.1VssP2.04039383736353433323130292827262524232221南通纺织职业技术学院 基于AT89S52单片机的万年历设计 41 C230pF1AT89S5294GNDGND ec+5R410K18B20MAX7219U2附录一:总原理图 U3DS1302VCC1VCC2+5+581Y223X1X24567P3.5P3.6P3.7U1南通纺织职业技术学院 基于AT89S52单片机的万年历设计
附录二:程序
T_RST BIT P3.5 ;实时时钟复位线引脚 T_CLK BIT P3.6 ;实时时钟时钟线引脚
T_IO BIT P3.7 ;实时时钟数据线引脚
H_ADJ BIT P2.0 ;时/年调整 M_ADJ BIT P2.1 ;分/月调整 S_ADJ BIT P2.2 ;秒/日调整 DT_SET BIT P2.3 ;时间/日期选择 STR BIT P2.4 ;启动走时 SEC EQU 30H ;当前秒 MIN EQU 31H HOUR EQU 32H DAY EQU 33H MONTH EQU 34H WEEK2 EQU 35H YEAR EQU 36H A_BIT EQU 20H B_BIT EQU 21H C_BIT EQU 22H D_BIT EQU 23H E_BIT EQU 24H F_BIT EQU 25H G_BIT EQU 26H H_BIT EQU 27H
CD_BIT EQU 29H ;分/月 AB_BIT EQU 28H ;秒/日 EF_BIT EQU 2AH ;时/年 DS1302_ADDR EQU 5EH DS1302_DATA EQU 5FH
;//***********DS18B20引脚定义**************// ;*************DS18B20引脚控制*****************
DQ EQU P1.0
FLAG EQU 00H ;18B20存在标志位
42
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
;//***********7219引脚定义**************//
DIN EQU P0.1 LOAD EQU P0.2 CLK EQU P0.3
;//**********************************//
ORG 0000H AJMP MAIN ORG 000BH LJMP TT0 ORG 0030H
MAIN: MOV SP,#64H
MOV TH0,#0B1H MOV TL0,#0E0H SETB EA SETB ET0
MOV YEAR,#11H MOV MONTH,#11H MOV DAY,#23H MOV HOUR,#12H MIN,#50H MOV SEC,#55H LCALL DISIN0 MOV R7,#10 SETB TR0
MAIN1: LCALL KEY
JB F0,MAIN10 写,不读。走时后读,不写。
LCALL WR1302 AJMP MAIN2
MAIN10: LCALL RD1302 MAIN2: JB 7FH,YMD
MOV EF_BIT,HOUR MOV CD_BIT,MIN MOV AB_BIT,SEC
;上电预置日期、时间 ;2011 11 23 12:50:55 ;F0=1,开始走时。走时前
43
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
AJMP MAIN20
YMD: MOV EF_BIT,YEAR
MOV CD_BIT,MONTH MOV AB_BIT,DAY
MAIN20: AJMP MAIN1
;//*********************************
KEY: ;按键子程序 KEY_SET: JB DT_SET,KEY_H
JNB DT_SET,$ CPL 7FH AJMP RT
KEY_H: JB H_ADJ,KEY_M
JNB H_ADJ,$ AJMP H_ADD
KEY_M: JB M_ADJ,KEY_S
JNB M_ADJ,$ AJMP M_ADD
KEY_S: JB S_ADJ,KEY_ST
JNB S_ADJ,$ AJMP S_ADD
KEY_ST: JB STR,RT
JNB STR,$ AJMP K_STR
RT: RET
H_ADD: JB 7FH,Y_ADD 志。1为年月日。
MOV A,HOUR ADD A,#01H DA A
CJNE A,#24H,H_ADD1 MOV A,#0
H_ADD1: MOV HOUR,A
AJMP RT
Y_ADD: MOV A,YEAR
;7FH为日期/时间切换键标44
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
ADD A,#01H DA A
CJNE A,#20H,Y_ADD1 MOV A,#0
Y_ADD1: MOV YEAR,A
AJMP RT
M_ADD: JB 7FH,MO_ADD
MOV A,MIN ADD A,#01H DA A
CJNE A,#60H,M_ADD1 MOV A,#0
M_ADD1: MOV MIN,A
AJMP RT
MO_ADD: MOV A,MONTH
ADD A, #01H DA A
CJNE A,#13H,MO_ADD1 MOV A,#1
MO_ADD1: MOV MONTH,A
AJMP RT
S_ADD: JB 7FH,D_ADD
MOV A,SEC ADD A,#01H DA A
CJNE A,#60H,S_ADD1
S_ADD1: MOV SEC,A
AJMP RT
D_ADD: MOV A,DAY
ADD A,#01H DA A
CJNE A,#32H,D_ADD1 MOV A,#01H
D_ADD1: MOV DAY,A
45
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
AJMP RT
K_STR: MOV DS1302_ADDR,#80H ;开始振荡
MOV DS1302_DATA,SEC ;#00H LCALL WRITE
MOV DS1302_ADDR,#8EH ;禁止写入1302 WR1302: MOV DS1302_DATA,#80H LCALL WRITE CPL F0 AJMP RT
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#00H LCALL WRITE
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#80H LCALL WRITE
MOV DS1302_ADDR,#8CH MOV DS1302_DATA,YEAR LCALL WRITE
MOV DS1302_ADDR,#88H MOV DS1302_DATA,MONTH LCALL WRITE
MOV DS1302_ADDR,#86H MOV DS1302_DATA,DAY LCALL WRITE
MOV DS1302_ADDR,#84H MOV DS1302_DATA,HOUR LCALL WRITE
MOV DS1302_ADDR,#82H MOV DS1302_DATA,MIN LCALL WRITE
MOV DS1302_ADDR,#82H MOV DS1302_DATA,MIN LCALL WRITE RET
;允许写1302 ;1302停止振荡 ;年写入1302 ;月写入1302 ;日写入1302 ;时写入1302 ;分写入1302 ;秒写入1302 46
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
WRITE: CLR T_CLK
NOP SETB T_RST NOP
MOV A,DS1302_ADDR MOV R4,#8
WRITE1: RRC A
WRITE2: NOP NOP
CLR T_CLK NOP NOP NOP
MOV T_IO,C NOP NOP NOP
SETB T_CLK NOP NOP
DJNZ R4,WRITE1 CLR T_CLK NOP
MOV A,DS1302_DATA MOV R4,#8
RRC A
NOP
CLR T_CLK NOP NOP
MOV T_IO,C NOP NOP NOP
47
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
SETB T_CLK NOP NOP
DJNZ R4,WRITE2 CLR T_RST RET
RD1302: MOV DS1302_ADDR,#8DH ;READ OUT YEAR
READ: LCALL READ
MOV YEAR,DS1302_DATA
MOV DS1302_ADDR,#8BH LCALL READ
MOV WEEK2,DS1302_DATA
MOV DS1302_ADDR,#89H LCALL READ
MOV MONTH,DS1302_DATA
MOV DS1302_ADDR,#87H LCALL READ
MOV DAY,DS1302_DATA
MOV DS1302_ADDR,#85H LCALL READ
MOV HOUR,DS1302_DATA
MOV DS1302_ADDR,#83H LCALL READ
MOV MIN,DS1302_DATA
MOV DS1302_ADDR,#81H LCALL READ
MOV SEC,DS1302_DATA RET
CLR T_CLK
NOP NOP
SETB T_RST NOP
MOV A,DS1302_ADDR
;READ OUT WEEK2 ;READ OUT MONTH ;READ OUT DAY ;READ OUT HOUR ;READ OUT MINTUE ;READ OUT SEC 48
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
MOV R4,#8
READ1: RRC A
READ2: MOV T_IO,C NOP NOP NOP
SETB T_CLK NOP NOP NOP
CLR T_CLK NOP NOP
DJNZ R4,READ1 MOV R4,#8
CLR T_CLK
NOP NOP NOP
MOV C,T_IO NOP NOP NOP NOP NOP RRC A NOP NOP NOP NOP
SETB T_CLK NOP
DJNZ R4,READ2 MOV DS1302_DATA,A
49
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
CLR T_RST RET
;//*************200ms定时******************// TT0: MOV TH0,#0BH MOV TL0,#0E0H DJNZ R7,INN2 MOV R7,#10 LCALL DS18B20
LCALL SHOW
INN2: RETI
;//************7219****************// DISIN0: MOV R4,#09H
;译码方式寄存器 MOV R5,#0FFH ;#0ff=0-7位均译为B码 LCALL DINPUT ;调用写入命令子程序 MOV R4,#0AH ;亮度寄存器 MOV R5,#08H
;亮度值 LCALL DINPUT MOV R4,#0BH ;扫描界限寄存器 MOV R5,#07H ;显示7位 LCALL DINPUT MOV R4,#0CH ;停机寄存器 MOV R5,#01H
;正常工作
LCALL DINPUT
RET
;****************7219显示子程序**********************
SHOW: MOV A,40H MOV B,#10 DIV AB MOV G_BIT,B MOV H_BIT,A MOV
R4,#01H
MOV R5,H_BIT
LCALL DINPUT
50
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
MOV R4,#02H MOV
R5,G_BIT
LCALL DINPUT MOV A,EF_BIT
MOV B,#10H DIV AB MOV E_BIT,B MOV F_BIT,A MOV
R4,#03H
MOV R5,F_BIT LCALL DINPUT MOV R4,#04H MOV
R5,E_BIT
LCALL DINPUT MOV A,CD_BIT
MOV B,#10H DIV AB MOV C_BIT,B MOV D_BIT,A MOV
R4,#05H
MOV R5,D_BIT LCALL DINPUT MOV R4,#06H MOV
R5,C_BIT
LCALL DINPUT MOV A,AB_BIT MOV B,#10H DIV AB MOV A_BIT,B MOV B_BIT,A MOV
R4,#07H
MOV R5,B_BIT LCALL DINPUT
MOV
R4,#08H
51
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
MOV R5,A_BIT
LCALL DINPUT
RET
;-------------7219命令写入子程序------------------ DINPUT: MOV A,R4 MOV B,#8 LOOP0: RLC A
MOV P0.1,C CLR P0.3 SETB P0.3 DJNZ B,LOOP0 MOV A,R5 MOV B,#8 LOOP1: RLC A
MOV P0.1,C CLR P0.3 SETB P0.3 DJNZ B,LOOP1 CLR P0.2 SETB P0.2
RET ;//****************DS18B20********************// DS18B20: LCALL TEMP LCALL CHULI
RET
;-----------------DS18B20的温度转换子程序--------------
TEMP: LCALL REST_18B20
MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE_1820
MOV A,#44H ;发出温度转换命令 LCALL WRITE_1820
LCALL REST_18B20 ;准备读温度前先初始化 MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE_1820
52
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
MOV A,#0BEH ;发出读温度命令 LCALL WRITE_1820 LCALL READ_1820 RET
;--------------------------DS18B20复位程序-------------------------- REST_18B20:
SETB DQ NOP
CLR DQ
MOV R2,#250 ;主机发出延时500微秒的复位低脉冲
DJNZ R2,$
SETB DQ ;然后拉高数据线 MOV R2,#30
DJNZ R2,$ ;延时60us等待DS18B20回应 JNB DQ,REST1
JMP REST_18B20 ;超时而没有响应,重新初始化 REST1: MOV R2,#120
DJNZ R2,$ ;延时240us
JB DQ,REST2 ;数据变高,初始化成功 JMP REST_18B20 REST2: MOV R2,#240 DJNZ R2,$ RET
;----------写DS18B20的子程序(有具体的时序要求)-------------- WRITE_1820:
MOV B,#8 ;一共8位数据 WR1: CLR DQ MOV R3,#7 DJNZ R3,$ RRC A MOV DQ,C MOV R3,#20 DJNZ R3,$
;等待 ;保持16uS以上
53
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
SETB DQ NOP NOP
DJNZ B,WR1 SETB DQ RET
;------读DS18B20的程序,从DS18B20中读出两个字节的温度数据-------------------------- READ_1820:
MOV R2,#2 ;将温度高位和低位从DS18B20中读出
MOV R1,#3EH ;低位存入3EH RE0: MOV B,#8 RE1: SETB DQ NOP NOP CLR DQ NOP NOP SETB DQ MOV R3,#9 DJNZ R3,$ MOV C,DQ MOV R3,#30 DJNZ R3,$
RRC A
DJNZ B,RE1 MOV @R1,A
INC R1 ;高位存入3FH DJNZ R2,RE0 RET
;=====================数据处理===================== CHULI: MOV A ,3EH
ANL A,#0F0H
;延时18uS
54
南通纺织职业技术学院 基于AT89S52单片机的万年历设计
SWAP A
MOV 3DH,A MOV A ,3EH ANL A,#0FH JNB ACC.3,GW INC 3DH GW:
MOV A,3FH ANL A,#0FH SWAP A ORL A,3DH
MOV 40H,A
RET ;*******************************************
END
55
因篇幅问题不能全部显示,请点此查看更多更全内容