电子万年历系统设计1

发布于:2021-11-27 22:54:27

电子万年历系统设计

The design of Electronic calendar system

专 学 姓

业:电子信息科学与技术 号: 名:

指导教师:

电子万年历系统设计
摘 要:*年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应

用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠, 使用方便等特点,因此特别适合于与控制有关的系统,并且给人类生活带来了根本性 的改变。尤其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人 们的生活带来的诸多方便。虽然在日常生活中,各种信息处理终端如电脑、手机等给 我们提供了准确的时间信息。但是在大多数场合却仅仅局限于个人的适用范围之内。 在家居生活中, 一款悬挂余居室墙壁上大方得体的电子钟不仅能为我们提供准确的时 间显示,而且魅惑了环境,给单调的居室带来了现代化的气息,因而成为许多家庭的 必备之选。 本文设计了一种基于八位串行输入-并行输出移位寄存器 74HC164 芯片,以 STC89C52 单片机为核心、数码显示的电子万年历,主要介绍了时钟芯片、温度传感 器、仿真模块,以及万年历硬件和软件的设计,实现了准确显示,公历年、月、日、 农历月、日、时、分、秒功能。 关键字:单片机;时钟芯片;温度传感器;仿真

I

The Design of Electronic Calendar System
Abtract: In recent years, with computer penetration in the social sphere and the development of large-scale integrated circuits, MCU applications are constantly deepening, as it has a function of strong, small size, low power consumption, cheap, reliable, easy to use , And other characteristics, and therefore particularly suited to control the system and to human life brought about fundamental changes. SCM is by the application of technology products have entered the tens of thousands of households. The emergence of electronic calendar to the lives of people of many convenience. While in everyday life, dealing with all kinds of information terminals such as computers, mobile phones has provided us with accurate time information. However, in most occasions is limited to individuals within the scope of the application. In home life, hoisted more than a generous living room walls of the appropriate electronic bell can not only provide us with accurate time, and tantalized by the environment, bring to the monotonous room a modern flavor, so many families must Of the election. In this paper, a design based on eight serial input - output parallel shift register 74 HC164 chip to STC89C52 microcontroller as the core, digital display electronic calendar, mainly on the clock chip temperature sensor, simulation modules, hardware and calendar And software design, to achieve an accurate, the calendar year, month, day and the Lunar month, day, hours, minutes and seconds functions. Key words:MCU;Clock chip;Temperature sensor;Simulation

II





引 言 ..................................................................................................................................... 1 1 单片机介绍 ..................................................................................................................... 2
1.1 STC89C52 简介......................................................................................................................... 2 1.2 性能参数 ................................................................................................................................. 2

2 应用系统设计 ................................................................................................................... 4
2.1 系统功能说明............................................................................................................................. 4 2.2 应用系统设计............................................................................................................................. 4 2.2.1 系统方案设计......................................................................................................................... 4 2.2.2 应用系统结构设计................................................................................................................ 5 2.2.3 设备选型 ................................................................................................................................ 5 2.2.4 控制面板设计........................................................................................................................ 6

3 硬件设计 ........................................................................................................................... 8
3.1 实时时钟电路设计.................................................................................................................. 9 3.1.1 实时时钟芯片 SD2303 简介 .................................................................................................. 9 3.1.2 SD2303 的引脚设置........................................................................................................... 10 3.1.3 SD2303 的内部寄存器....................................................................................................... 11 3.1.4 SD2303 的数据传输........................................................................................................... 17 3.2 温度检测电路设计................................................................................................................ 20 3.2.1 温度传感器 DS1722 简介.................................................................................................. 20 3.2.2 DS1722 的引脚配置........................................................................................................... 21 3.2.3 DS1722 的内部寄存器....................................................................................................... 21 3.2.4 DS1722 的数据传输过程................................................................................................... 23 3.3 显示电路设计........................................................................................................................ 24 3.4 键盘及闹铃电路设计............................................................................................................ 25

4 软件设计 ......................................................................................................................... 27
4.1 软件结构设计........................................................................................................................ 27 4.1.1 主程序 ............................................................................................................................... 27 4.1.2 按键检测和处理程序........................................................................................................ 28

5 系统集成测试与仿真 ..................................................................................................... 29
5.1 系统集成测试.......................................................................................................................... 29 5.2 系统在线仿真.......................................................................................................................... 29 5.2.1 仿真软件介绍...................................................................................................................... 29 5.2.2 Keil 与 proteus 结合仿真............................................................................................... 30 5.2.3 仿真结果............................................................................................................................ 30 5.2.4 仿真结果分析.................................................................................................................... 32

[参考文献] ......................................................................................................................... 33 附 录: ............................................................................................................................... 34 致 谢 ................................................................................................................................... 37

III

引 言
*年来随着计算机在社会领域的渗透和大规模集成电路的发展, 单片机的应用正 在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使 用方便等特点,因此特别适合于与控制有关的系统,并且给人类生活带来了根本性的 改变。尤其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们 的生活带来的诸多方便。虽然在日常生活中,各种信息处理终端如电脑、手机等给我 们提供了准确的时间信息。但是在大多数场合却仅仅局限于个人的适用范围之内。在 家居生活中, 一款悬挂余居室墙壁上大方得体的电子钟不仅能为我们提供准确的时间 显示,而且魅惑了环境,给单调的居室带来了现代化的气息,因而成为许多家庭的必 备之选。 本文设计了一种基于八位串行输入--并行输出移位寄存器 74HC164 芯片,以 STC89C52 单片机为核心、数码显示的电子万年历,主要介绍了时钟芯片、温度传感 器、仿真模块,以及万年历硬件和软件的设计,实现了准确显示,公历年、月、日、 农历月、日、时、分、秒功能。 本设计采用时钟芯片产生时间,精度准确,误差很小。温度采用温度传感器采集 温度,并数字化显示。显示模块采用数码管显示。单片机采用 STC89C52 在线可编程 单片机。无需程序烧写器。方便快捷。还有模拟仿真软件 Proteus,可对设计模块实 时仿真。方便更改。大大缩短了设计周期。

1

1
1.1

单片机介绍
STC89C52 简介

STC89C52 完全兼容 MCS-51,还有新的功能,比如新增两级中断优先级,多一个 外中断,内置 EEPROM,512B 内存等。还支持 ISP 下载,不用编程器,只要一个 MAX232 和一些廉价的元件就能写程序, 可擦写 10 万次。 51 起最大的优点能支持 比 在线下载,在线烧写程序,而不必专门买昂贵的编程器,只需要 ISP 下载线就可以了。

图 1 STC 功能逻辑图

1.2

性能参数

STC 单片机比 51 单片机性能有以下优越性: (1) 高抗静电(ESD),6000 伏静电测试,直接打在芯片管脚上,安然无恙。 (2) 超强抗干扰,轻松过 2KV/4KV,快速脉冲干扰(EFT)。 (3) 超强加密,保密性能良好。 (4) STC 5V 单片机,宽电压,5V - 3.8V 给复位信号,正常工作。 (5) STC 单片机,Power 直接在用户系统上用 ISP 在线下载方式,将用户程序 (6) 下载进 STC 单片机 Down,掉电时功耗<0.1uA(C 版本)。 (7) I/O 口输入/ 输出口经过特殊处理,很多干扰是从I/O 进去的,每个I/O 均有对 VCC,对GND二级管箝位保护。
2

(8) 单片机内部的电源供电系统经过特殊处理,很多干扰是从电源进去的。

图 2 STC89C52引脚图

鉴于SCT89C52和AT98C51引脚分布相同,以上仅介绍SCT89C52一些优于 AT98C51的性能,在此,就不对单片机多做介绍了,详细参数可以参考SCT89C52 PDF 资料图,或者相关书籍,或者上网查阅相关网站,在此,推荐一官方网 站:www.mcu-memory.com

3

2 应用系统设计
2.1 系统功能说明 根据家居生活中的实际需要,万年历应该具有如下功能。 1、时间显示 时间显示是万年历设计最重要的功能。万年历应该不仅能准确显示时、分、秒,而 且还要能够显示年、月、日和星期。 2、时间调整 万年历在第一次使用时,需要根据当前时间进行时间调整,设定起初始时间,设 置完成之后,它会在设定值基础上进行准确的计时和显示。在万年历断电或出现其他 故障排除后,也需要根据当前时间进行时间调整。 3、定时闹钟 定时闹钟是万年历的一个辅助功能。可以通过键盘设定定时时间,这样当万年历 运行到设定的定时时间时,会发出语音提示,提示时间为 1 分钟。可以根据需要设定 闹钟功能的开启和关闭。 4、温度显示 温度显示是万年历的另外一个辅助功能。万年历上设置有一个温度传感器,用于 检测环境温度,提示用户注意温度的变化,做好诸如防寒保暖等措施。 5、掉电运行 万年历采用市电或者电池供电。当发生停电或者电池量耗尽等情况时,它通过内 置的纽扣电池给时钟供电以保持正确的时钟数据,但关闭其他部分的电源,这样在来 电或者更换电池之后不必重新设定时间。在市电运行正常时,可以根据需要更换备用 的纽扣电池而不影响时钟运行。 2.2 应用系统设计 2.2.1 系统方案设计 应用于单片机控制的实时时钟系统根据基准信号产生的途径,可以分为两种:一是利 用单片机中的定时器作为实时时钟基准; 二是利用专用实时时钟日历芯片产生基准时 钟信号。STC89C52 单片机带有实时时钟接口,可以通过外接 32768Hz 的晶振分频后 产生基准始终系好,这为万年历的设计提供了一种新的选择。采用上述方式产生时钟 基准信号的设计方案及其比较如表 1 所示。

4

方 案

时钟源

定时 闹铃 软件

温度检测

方案评估

定时器在单片机内部。无需附加外部元器件,通 温度传感器 过编程实现时钟功能,精度受单片机外接电容等 的影响,成本低但精度差,而且程序设计困难。

1

单片机定时器

实现

外接 32768Hz 晶振 2

软件 实现 硬件

温度传感器

外接 32768Hz 晶振分频后作为始终基准信号,具 有较高的精度但程序设计困难。 实时时钟芯片能自动产生 1 秒时钟基准信号,且

3

实时时钟日历芯片

实现

温度传感器

自带日期及闰年调整功能,计时精度和集成度非 常高,程序设计简单但成本略高。

表 1 万年历方案及评估

通过上述方案设计及性能评估可知, 又实时时钟日历芯片产生基准计时信号构成 的万年历虽然成本上比其他两种方案产生基准信号的方式略高, 但是由于实时时钟日 历芯片具有集成度高、走时准确、自动日历及闰年调整并集成有闹钟功能,这样使得 程序设计变得非常的简单,故在设计中采用方案 3。 2.2.2 应用系统结构设计 根据万年历的功能要求和选定的设计方案,设计出如图 3 所示的控制系统结构。

备份电源

实时时钟芯片

闹钟报警提示

STC89C52
温度传感器 时间及温度显示

系统复位电路





图 3 万年历系统结构框图 2.2.3 设备选型 本设计采用 STC89C52 作为控制系统的核心。按照图 1 所确定的系统结构,选择 合适的功能部件,以完成完整的系统控制电路设计。控制系统需要选择实时时钟日历 单元、温度传感器单元、键盘和显示单元三部分。表 2 是万年历设计具体的设备选型 表。

5

表 2 万年历设计设备选型表 器件 编号 1 2 实施日历芯片 SD2303 单片机 STC89C52 前面以介绍 I2C 接口日历芯片, 自动日历到 2099 年, BCD 码年、 月、日、周、时、分、秒输入/输出,带两路定时闹 钟,年误差小于 2.5 分钟 3 温度传感器 DS1722 SPI/三线串行接口温度传感器,测量范围-55° C~ 120° C,8~12 位可编程分辨率,测量误差小于 2.0° C 4 5 键盘单元 显示单元 独立键盘 数码管 7 个可独立键盘 16 个 7 段数码管 器件名称 型号 基本参数

2.2.4 控制面板设计 控制面板即万年历外形图,如图 4 所示。

图 4 万年历控制面板

在万年历的控制面板上设置有 16 个数码管,分别用于显示年、月、日、星期、 温度、时和分。显示格式如下。 年:4 位数码管显示年,如 2008 表示 2008 年。 月:2 位数码管显示月,如 06 表示 6 月份。 日:2 位数码管显示日,如 10 表示 10 日。 星期:3 位数码管显示星期,如 7 表示星期日。
6

温度:3 位数码管显示温度,如 H28 表示+28℃,L05 表示-5℃。 时:2 位数码管显示时,如 23 表示 23 点。 分:2 位数码管显示分,如 59 表示 59 分。 为了进行时间设定和闹钟设定,在控制面板下方设置有 7 个按键,分别为“时间 设置”建、 “闹铃设置”键、 “+”键、 “-”键、 “上一位”键、 “下一位”键和“确 定”键,其功能如下所示。 当需要设置时间时,按下“时间设置”键,这时万年历停止计时并将时间清零, 在年的最高位上的小数点点亮表示进行年最高位设置, 用户可以通过 “+” 或者 “-” 来调整数字,调整完后按“下一位” ,则年的最高位小数点熄灭而次高位小数点点亮, 用户按照上述方法设置次高位??直到时间设置完。注意,温度不可以设置。设置完 后按“确定”键,用户设定值将存储进入单片机并开始以此时间计时。 当需要设置闹铃时,按下“时间设置”键,这时万年历仍继续计时而面板上的时 间将全部显示为“0” ,同时时间的小时高位小数点电亮,用户按照时间设定的方式设 置闹钟的时和分,按下“确定”键后,闹铃被存储进单片机。当万年历走时走到设定 闹铃时间时,蜂鸣器发出报警声。 闹铃的设置时间可以通过按“闹铃设置”键来查看,任何不符合走时的闹铃设置 将关闭闹铃功能。如设置“06 时 20 分”将关闭闹铃功能。这是取消闹铃功能的一种 方法。

7

V CC
D 101 D 102 11 D 103 7 D 104 4 D 105 2 D 106 1 D 107 10


D0 D1 D2 D3 D4 D5 D6







万年历的硬件设计电路如图 5 所示。下面对各部分分别予以说明。

D1 1 0 K* 4

B AT D2

11

7 4 2 1 10

11

7 4 2 1 10

D0 D1 D2 D3 D4 D5 D6

V CC

11 5 3 5 3

7 4 2 1 10 A B C D E F G Dp A B C D E F G Dp C3 C2 C2 C1 C3 C2 C2 C1 12 12 9 8 6 9 8 6

5 3

D 301 D 302 D 303 D 304 D 305 D 306 D 307

A B C D E F G Dp

10 4

8 + 2 10 uF 3 4 V DD SC L NC SD A NC INT B V SS INT A V DD CE V DA SD I MO D SD O G ND SC LK P3 .0 4 1 P3 .1 5 1 16 17 18 19 20 21 PD 0 PD 1 PD 2 PD 3 PD 4 PD 5 PD 6 PD 7 9 13 (RX D ) (TX D) (IN T0 ) (IN T1 ) (OC 1 B ) (OC 1 A ) (IC P) (TO SC2 ) R ESE T X1 8M 12
G ND

SD 2 3 0 3 6 7 8 1 1 2 3 4 5 6 7 8 PB 0 PB 1 PB 2 PB 3 PB 4 PB 5 PB 6 PB 7 PC 0 PC 1 PC 2 PC 3 PC 4 PC 5 (TO SC 1 ) P C6 (TO SC 2 ) P C7 A RE F A GN D A VC C (T0 ) (T1 ) (AIN 0 ) (AIN 1 ) (SS) (MOS I) (MIS O) (SC K)
V CC

10

V CC U0 (AD C 0 ) P A0 (AD C 1 ) P A1 (AD C 2 ) P A2 (AD C 3 ) P A3 (AD C 4 ) P A4 (AD C 5 ) P A5 (AD C 6 ) P A6 (AD C 7 ) P A7 40 39 38 37 36 35 34 33 22 23 24 25 26 27 28 29 32 31 30

R P1 1 2 3 4 5 6 7 8 9 A 1C ON 9 A2 A3 A4 A5 A6 A7

C3 C2 C2 C1

12

12

9 8 6

V CC

V CC S1 S2 S3 S4 S5 N PN V CC 1K 10 K S0 10 4

C LR C LK

C LR C LK

C LR C LK

A B

A B

V CC
9 8 1 2

V CC
9 8

V CC P3 .0 P3 .1 X2 22 p 22 p

1 2

9 8

1 ST C8 9 C 5 2
11

2

3

4

5

1 2

A B

6

7

Q1 N PN A1 A2

Q2 N PN A3

Q3 N PN A4

Q4 N PN

Q5 N PN

Q6 N PN

Q7 N PN

A5

A6

A7

3 硬件设计

8

U6 7 4 h c1 6 4
QA QB QC QD QE QF QG QH

U5 7 4 h c1 6 4

U4 7 4 h c1 6 4

图 5 硬件电路图
D 101 D 102 3 D 103 4 D 104 5 D 105 6 D 106 10 D 107 11 12 13 D0 3D1 4D2 5D3 6D4 10

1 8 7 4

QA QB QC QD QE QF QG QH

QA QB QC QD QE QF QG QH

D 301 D 302 3 D 303 4 D 304 5 D 305 6 D 306 10 D 307 11 12 13

11 5 D 12 6 D 13

2 6 5 3 D S1 7 2 2

6 5 4 3

2 1 2 1

6 5 4 3

6 5 4 3





9 8 6

C3 C2 C2 C1

A B C D E F G Dp

5 3



3.1

实时时钟电路设计 万年历采用支持两线式串行接口、带温度补偿的高精度实时时钟日历芯片

SD2303,它与 STC89C52 单片机的连接如图 6 所示。

图 6 实时时钟电路

3.1.1 实时时钟芯片 SD2303 简介 SD2303 是一种具有内置晶振、支持两线串行接口的高精度实时时钟芯片。该系 列芯片可保证时钟精度为± 5ppm(在 25± 1℃下) ,即年误差小于 2.5 分钟;该芯片内 置时钟精度调整功能,可以在很宽的范围内校正时钟的频率偏差,能以最小分辨率 3.052ppm 来进行校正,通过与温度传感器的结合可以设定适应温度变化的调整值, 实现在宽问范围内高精度的计时功能;内置电池、串行 NVSEAM,其中内置的一次 性 SRAM,擦写次数可达 100 亿次。该系列芯片可满足对实时时钟芯片的各种需要, 是高精度实时时钟的理想选择。 SD2303 具有如下特点: (1) 低功耗:典型值 0.5uA(VDD=3.0V) 。
9

(2) 工作电压为 1.8~5.5V,工作温度为-40~85℃。 (3) 年、月、日、星期、时、分、秒 BCD 码输入输出,并可通过独立的地址访 问各时间寄存器。 (4) 自动日历到 2099 年(包括闰年自动换算功能) 。 (5) 可设定并自动重置的两路定时闹钟功能。 (6) 周期性中断脉冲输出:2Hz、1Hz、每分、小时、月输出可选择不同波形的 中断脉冲。 (7) 可控的 32768Hz 方波信号输出。 (8) 内置时钟精度数字调整功能。 (9) 30 秒时间调整功能。 (10)内部晶振停振检测功能:保证时钟的有效性。 (11)内置总线 1 秒自动释放功能,保证了时钟数据的有效性及可靠性。 (12)内置电源稳压,内部及时电压可低至 1.2V。 (13)内置晶振,出厂前已对时钟进行校准,保证精度± 5ppm,即时钟误差小于 2.5 分钟。 (14)工业级型号为 SD2303API,封装形式为 8-DIP 封装。 3.1.2 SD2303 的引脚设置

SD2303 实时时钟日历芯片的引脚配置如图 7 所示。

图 7 SD2303 的引脚配置

表 3 给出了 SD2303 的引脚功能说明。
表 3 SD2303 引脚功能表 引脚编号 1 2 3 符号 INTRA NC NC 功能 报警中断 A 路输出 没有作用 没有作用
10

备注 N 沟道开路输出, 需接上拉电阻

4 5 6 7 8

VSS INTRB SCL SDA VDD

地 报警中断 B 路输出 IIC 串行时钟输入 IIC 串行时钟输入/输出 电源 N 沟道开路输出, 需接上拉电阻 N 沟道开路输出, 需接上拉电阻

3.1.3

SD2303 的内部寄存器

SD2303 将时间数据和控制命令存储在不同地址的寄存器内,具体的地址分配如 表 4 所示。
表 4 SD2303 寄存器列表 内部地址 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 描 述 秒寄存器 分寄存器 时寄存器 周寄存器 天寄存器 月寄存器 年寄存器 时间调整 分定时 A 时定时 A 天定时 A 分定时 B 时定时 B 天定时 B 控制寄存器 1 控制寄存器 2 功 能

以 BCD 码形式计数与存储秒 以 BCD 码形式计数与存储分 以 BCD 码形式计数与存储时 以 BCD 码形式计数与存储周 以 BCD 码形式计数与存储天 以 BCD 码形式计数与存储月 以 BCD 码形式计数与存储年 晶振参数修正及外部晶振选择控制 存储定时器 A 的分数据 存储定时器 A 的时数据 存储定时器 A 的天数据 存储定时器 B 的分数据 存储定时器 B 的时数据 存储定时器 B 的天数据 闹铃使能、中断输出选择及周期性中断选择 时间显示格式选择、中断与报时标志及停振检测

(1)秒寄存器(内部地址 0x00) 。
D7 — 0 0 D6 S40 S40 — D5 S20 S20 — D4 S10 S10 — D3 S8 S8 — D2 S4 S4 — D1 S2 S2 — D0 S1 S1 — 操 作 写 读 默 认

秒计数范围为 0x00~0x59(BCD 码格式) ,当计数从 0x59 变为 0x00 时,分寄存 器值加 1.默认操作是指当 XSTP 位为 1(上电、掉电或者停振后再起振)时,执行读 操作。

11

(2)分寄存器(内部地址 0x01) 。
D7 — 0 0 D6 M40 M40 — D5 M20 M20 — D4 M10 M10 — D3 M8 M8 — D2 M4 M4 — D1 M2 M2 — D0 M1 M1 — 操 作 写 读 默 认

分计数范围为 0x00~0x59,当计数从 0x59 变为 0x00 时,时寄存器值加 1。 (3)时寄存器(内部地址 0x02) 。
D7 — 0 0 D6 — 0 0 D5 H20/P_A H20/P_A — D4 H10 H10 — D3 H8 H8 — D2 H4 H4 — D1 H2 H2 — D0 H1 H1 — 操 作 写 读 默 认

时计数范围为 0x01~0x12(12 小时制)或 0x00~0x23(24 小时制) 。当计数从 11PM 变成 12AM(12 小时制)或 0x23 变成 0x00(24 小时制)时,天寄存器值加 1。 (4)周寄存器(内部地址 0x03) 。
D7 — 0 0 D6 — 0 0 D5 — 0 0 D4 — 0 0 D3 — 0 0 D2 W4 W4 — D1 W2 W2 — D0 W1 W1 — 操 作 写 读 默 认

周计数范围为 0x00~0x06,其中 0x01~0x06 表示星期 1 至星期 6,0x00 表示星 期天。当天计数加 1 时,星期计数也加 1。 (5)天寄存器(内部地址 0x04) 。
D7 — 0 0 D6 — 0 0 D5 D20 D20 — D4 D10 D10 — D3 D8 D8 — D2 D4 D4 — D1 D2 D2 — D0 D1 D1 — 操 作 写 读 默 认

天计数范围为: 0x01~0x31(一月、三月、五月、七月、八月、十月、十二月) 0x01~0x30(四月、六月、九月、十一月) 0x01~0x29(闰年二月) 0x01~0x28(*年二月) (6)月寄存器(内部地址 0x05) 。
D7 — 0 0 D6 — 0 0 D5 D20 D20 — D4 D10 D10 — D3 D8 D8 — D2 D4 D4 — D1 D2 D2 — D0 D1 D1 — 操 作 写 读 默 认

月寄存器范围为 0x01~0x02,当计数从 0x12 变成 0x01 时,年寄存器值加 1. (7)月寄存器(内部地址 0x05) 。

12

D7 Y80 Y80 —

D6 Y40 Y40 —

D5 Y20 Y20 —

D4 Y10 Y10 —

D3 Y8 Y8 —

D2 Y4 Y4 —

D1 Y2 Y2 —

D0 Y1 Y1 —

操 作 写 读 默 认

年寄存器范围为 0x00~0x99,其中 0x00、0x04、0x08…0x92、0x96 为闰年。 (8)时间调整寄存器(内部地址 0x07) 。
D7 XSL_ XSL_ — D6 F6 F6 — D5 F5 F5 — D4 F4 F4 — D3 F3 F3 — D2 F2 F2 — D1 F1 F1 — D0 F0 F0 — 操 作 写 读 默 认

位 7:XSL_位为晶振选择为。SD2303 内置晶振,此位必须固定为 0。 位 6~位 0: 时间调整位。 时间调整电路是在当秒计数到 0x00、 0x20、 0x40 时刻, 根据预先设定的数据(F5~F0)改变 1 秒时钟内的计数个数。通常每 32768 个脉冲位 1 秒(对寄存器预定初值,才能激活整个调整电路) 。 当 F6 为 0 时,产生 1 秒的寄存器计数脉冲将增加为 32768+[(F5、F4、F3、F2、 F1、F0)-1]*2 个;当 F6 为 1 时,产生 1 秒的寄存器计数脉冲将增加为 32768-[(/F5、 /F4、/F3、/F2、/F1、/F0)+1]*2 个。 当(F6、F5、F4、F3、F2、F1、F0)预设为(*、0、0、0、0、*)时,产生 1 秒的寄存器计数脉冲个数不变。 当(F6、F5、F4、F3、F2、F1、F0)=(0、1、0、1、0、0、1)且当时钟运行 到 0x00、0x20、0x40 秒时刻时,寄存器计数脉冲变为 32768+(41-1)*2+32848 个; 当(F6、F5、F4、F3、F2、F1、F0)=(1、1、1、1、1、1、0)且当时钟运行 到 0x00、0x20、0x40 秒时刻时,寄存器计数脉冲变为 32768-(1+1)*2+32764 个; 当(F6、F5、F4、F3、F2、F1、F0)=(0、0、0、0、0、0、1)且当时钟运行 到 0x00、0x20、0x40 秒时刻时,寄存器计数脉冲个数不变; 因为每 20 秒增加或者减少的计数脉冲个数最少为 2 个,故时钟调整寄存器的最 小调整精度为 2/(32768*20)=3.015ppm。 时钟调整电路仅仅是调整时钟走时,并不影响晶振本身频率调整,故 32768Hz 的 脉冲输出不会改变。 (9)闹铃 A 分寄存器(内部地址 0x08) 。
D7 — — 0 D6 AM40 AM40 — D5 AM20 AM20 — D4 AM10 AM10 — D3 AM8 AM8 — D2 AM4 AM4 — D1 AM2 AM2 — D0 AM1 AM1 — 操 作 写 读 默 认

闹铃 A 分寄存器计数范围同分寄存器。
13

(10)闹铃 A 时定时器(内部地址 0x09) 。
D7 — 0 0 D6 — 0 0 D5 AH20/P_A AH20/P_A — D4 AH10 AH10 — D3 AH8 AH8 — D2 AH4 AH4 — D1 AH2 AH2 — D0 AH1 AH1 — 操 作 写 读 默 认

D5 位在 12 小时制中置 0 表示 AM,置 1 表示 PM;在 24 小时制中表示小时的十 位。在 12 小时制中,午夜的零点应该设置为 0x12,中午 0 点应该设置为 0x32。 (11)闹铃 A 周定时器(内部地址 0x0a) 。
D7 — — 0 D6 AW6 AW6 — D5 AW5 AW5 — D4 AW4 AW4 — D3 AW3 AW3 — D2 AW2 AW2 — D1 AW1 AW1 — D0 AW0 AW0 — 操 作 写 读 默 认

闹铃 A 周定时器的 AW6~AW0 位对应星期 6 至星期 1 以及星期天。如置位 AW6 和 AW0 位,表示在星期六和星期天闹铃起作用。当 AW6~AW0 全部位 0 时,关闭 闹铃。 (12)闹铃 B 分寄存器(内部地址 0x0b) 。
D7 — — 0 D6 BM40 BM40 — D5 BM20 BM20 — D4 BM10 BM10 — D3 BM8 BM8 — D2 BM4 BM4 — D1 BM2 BM2 — D0 BM1 BM1 — 操 作 写 读 默 认

闹铃 B 分寄存器范围同闹铃 A 寄存器。 (13)闹铃 B 时定时器(内部地址 0x0c) 。
D7 — 0 0 D6 — 0 0 D5 BH20/P_A BH20/P_A — D4 BH10 BH10 — D3 BH8 BH8 — D2 BH4 BH4 — D1 BH2 BH2 — D0 BH1 BH1 — 操 作 写 读 默 认

闹铃 B 时定时器范围同闹铃 A 时定时器。 (14)闹铃 B 周定时器(内部地址 0x0d) 。
D7 — — 0 D6 BW6 BW6 — D5 BW5 BW5 — D4 BW4 BW4 — D3 BW3 BW3 — D2 BW2 BW2 — D1 BW1 BW1 — D0 BW0 BW0 — 操 作 写 读 默 认

闹铃 B 周定时器范围同闹铃 A 周定时器。 (15)控制寄存器 1(内部地址 0x0e) 。
D7 AALE AALE 0 D6 BALE BALE 0 D5 SL2 SL2 0 D4 SL1 SL1 0 D3 TEST TEST 0 D2 CT2 CT2 0 D1 CT1 CT1 0 D0 CT0 CT0 0 操 作 写 读 默 认

位 7:AALE 为闹铃 A 使能位。AALE 置 1 时使能闹铃 A 中断,置 0 时禁止中断。

14

位 6:BALE 为闹铃 B 使能位。BALE 置 1 时使能闹铃 B 中断,置 0 时禁止中断。 位 5~位 4:SL2 和 SL1 位中断输出选择位,如表 5 所示。
表5 SL2 0 0 1 1 SL1 0 1 0 1 SD2303 中断输出选择 描 述

闹铃 A、闹铃 B 和周期性中断从 INTRA 输出,32k 时钟脉冲从 INTRB 输出 闹铃 A 和周期性中断从 INTRA 输出,32k 时钟脉冲和闹铃 B 从 INTRB 输出 闹铃 A 和闹铃 B 从 INTRA 输出,32k 时钟脉冲和周期性中断从 INTRB 输出 闹铃 A 从 INTRA 输出,闹铃 B、32k 时钟脉冲和周期性中断从 INTRB 输出

位 3:TEST 位为 SD2303 测试位。TEST 位置 0 时,SD2303 处于正常工作模式; TEST 位置 1 时,SD2303 工作于测试模式。一般 TEST 位应该置 0。 位 2~位 0:CT2 和 CT0 为周期性中断选择位。如表 6 所示。
表 6 SD2303 周期性终端选择 CT2 0 0 0 0 1 1 1 1 CT1 0 0 1 1 0 0 1 1 CT0 0 1 0 1 0 1 0 1 波形模式 — — 脉冲模式 脉冲模式 电*模式 电*模式 电*模式 电*模式 描 INTRA/INTRB 为高电* INTRA/INTRB 为低电* 2Hz 中断(占空比 50%) 1Hz 中断(占空比 50%) 每秒钟中断 每分钟中断(每分钟的 00 秒) 每小时中断(每小时的 00 分 00 秒) 每月中断(每月第一天的 00 时 00 分 00 秒) 述

脉冲模式中断时输出 2Hz 和 1Hz 的时钟脉冲,波形关系如图 8 所示。

图 8 脉冲中断波形输出

电*模式中断时输出每秒、每分、每小时或每月的中断波形,如图 9 所示。

15

图 9 电*中断波形输出

(16)控制寄存器 2(内部地址 0x0f) 。
D7 — 0 0 D6 — 0 0 D5 12/24 12/24 — D4 ADJ XSTP 1 D3 CLEN CLEN 0 D2 CTFG CTFG 0 D1 AAFG AAFG 0 D0 BAFG BAFG 0 操 作 写 读 默 认

位 5:12/24 位为时间格式选择位。12/24 位置 1 时为 24 小时制,置 0 时为 12 小 时制。 位 4:ADJ 位为秒调整位。ADJ 位置 1 时为秒调整操作,置 0 时表示正常工作。 XSTP 位检测晶振停振与否。在掉电或者晶振后该位自动置 1,检测该位可以判断时 钟数据的有效性。XSTP 置位后 XSL、F6~F0、CT2~CT0、AALE、BALE、SL2~S1、 SLEN 和 TEST 位全部复位,INTRA 停止输出而 INTRB 输出 32768Hz 的时钟脉冲。 正常工作时应将 XSTP 位写 0 复位。 位 3:CLEN 位为 32kHz 时钟输出使能位。当发生 CLEN 位置 1 时允许 32kHz 时 钟输出,置 0 时禁止 32kHz 时钟输出。 位 2:CFG 位为周期性中断标志位。当发生周期性中断时,该位置 1。在电*模 式下将 CTFG 位写 0 将中止中断过程。写入后 INTRA 或 INTRB 将变成高电*。 位 1 和位 0: AAFG 和 BAFG 位为闹铃 A 和闹铃 B 的中断标志位。 仅当 AALE/BALE 置 1 时,才能产生闹铃中断。当时钟时间和预设闹铃时间一致时,该位置 1。将 AAFG/BAFG 写 0 可以中止中断过程。写入后 INTRA 或 INTRB 将变成高电*。 AAFG/BAFG 与 INTRA/INTRB 的关系如图 10 所示。

16

图 10 闹铃中断波形图输出

3.1.4

SD2303 的数据传输

SD2303 采用 I2C 三线串口接口,可参考 I2C 协议中的串行数据传输标准,下面仅 给出 SD2303 的读写操作时序。SD2303 的 I2C 器件代码为 0x64。D0=1 表示读操作, D0=0 表示写操作。
D7 0 D6 1 D5 1 D4 0 D3 0 D2 1 D1 0 D0 R/W

(1)向 SD2303 寄存器写数据。 单片机向 SD2303 寄存器写数据时序如下: ● 单片机发出 START 开始信号。 ● 单片机送 7 位器件地址 0110010,第 8 位送写命令 0,然后收到 SD2303 的应答 信号 ACK。 ● 单片机送 1 字节数据,高 4 位为 SD2303 的寄存器地址,低 4 位为写传输模式 0000,然后收到 SD2303 的应答信号 ACK。 ● 单片机送 1 字节数据,发送完成后收到 SD2303 的应答信号。 ● 如果需要送多字节数据,重复上一步动作。 ● 单片机发出停止信号 STOP 结束 I2C 数据传输。 向 SD2303 寄存器 0x04 和 0x05 写数据的过程如图 11 所示。

图 11 SD2303 写数据时序
17

(2)从 SD2303 寄存器读数据。 单片机从 SD2303 寄存器读数据可以通过如下 3 种方式进行: a)从 SD2303 指定寄存器地址中读数据。 从 SD2303 指定寄存器地址中读数据时序如下: ● 单片机发出 START 开始信号。 ● 单片机送 7 位器件地址 0110010,第 8 位送读命令 0,然后收到 SD2303 的应答 信号 ACK。 ● 单片机送 1 字节数据,高 4 位为 SD2303 的寄存器地址,低 4 位为写传输模式 0000,然后收到 SD2303 的应答信号 ACK。 ● 单片机发出一个新的 START 开始信号。 ● 单片机送 7 位器件地址 0110010,第 8 位送写命令 1,然后收到 SD2303 的应答 信号 ACK。 ● 单片机接收 1 字节数据,接收完成后向 SD2303 发送应答信号 0。 ● 如果需要送多字节数据,重复上一步多年动作。 ● 单片机接收最后 1 字节数据,接收完成后向 SD2303 发送非应答信号 1。 ● 单片机发出停止信号 STOP 结束 I2C 数据传输。 从 SD2303 指定寄存器地址 0x04 开始读 3 字节数据的过程如图 12 所示。

图 12 SD2303 读数据时序

b)从 SD2303 指定寄存器地址中读数据。 从 SD2303 指定寄存器地址中读数据时序如下: ● 单片机发出 START 开始信号。 ● 单片机送 7 位器件地址 0110010,第 8 位送写命令 0,然后收到 SD2303 的应答 信号 ACK。

18

● 单片机送 1 字节数据,高 4 位为 SD2303 的寄存器地址,低 4 位为写传输模式 0100,然后收到 SD2303 的应答信号 ACK。 ● 单片机接收 1 字节数据,接收完成后向 SD2303 发送应答信号 0。 ● 如果需要送多字节数据,重复上一步多年动作。 ● 单片机接收最后 1 字节数据,接收完成后向 SD2303 发送非应答信号 1。 ● 单片机发出停止信号 STOP 结束 I2C 数据传输。 从 SD2303 指定寄存器地址 0x04 开始读 3 字节数据的过程如图 13 所示。

图 13

SD2303 读数据时序

c)直接读取数据(只能从 0x0f 地址开始读取) 。 直接读取数据的时序如下: ● 单片机发出 START 开始信号。 ● 单片机送 7 位器件地址 0110010,第 8 位送读命令 1,然后收到 SD2303 的应答 信号 ACK。 ● 单片机接收 1 字节数据,接收完成后向 SD2303 发送应答信号 0。 ● 如果需要送多字节数据,重复上一步多年动作。 ● 单片机接收最后 1 字节数据,接收完成后向 SD2303 发送非应答信号 1。 ● 单片机发出停止信号 STOP 结束 I2C 数据传输。 直接读取数据只能从 0x0f 地址开始,然后是地址 0x00、0x01?,如图 14 所示。

图 14

SD2303 读数据时序

19

3.2

温度检测电路设计 万年历种的温度检测采用带 SPI/三线串行接口的 DS1722 温度传感器芯片, 它与

STC89C52 单片机的连接如图 15 所示。

图 15

温度检测电路

3.2.1

温度传感器 DS1722 简介

DS1722 是美国 MAXIM 公司的一款 SPI/三线串行接口的 DS1722 温度传感器,无 需外围元件即可完成对环境温度的检测。她可通过 Motorola 公司倡导的 SPI 总线或 者三线串口方式同处理器进行通信。通信方式可自行选择。 DS1722 温度传感器的测量范围位-55℃~120℃, 精度为± 2℃。 DS1722 提供 8~ 12 位的可编程转换值,即分辨率从 1.0℃~0.0625℃。温度值直接以数字形式输出。 DS1722 可以工作在单次转换和自由(连续)转换模式下。当工作在单次转换模 式下时,每启动一次转换,DS1722 便将采集到的温度数据存储在寄存器里面;当工 作于自由转换模式下时,DS1722 连续采集温度数据,并将最*一次的采集数据存储 起来。
20

3.2.2

DS1722 的引脚配置

DS1722 的引脚配置如图 16 所示。

图 16

DS1722 引脚配置

表 7 给出了 DS1722 的引脚功能说明。
表 7 DS1722 引脚功能表 引脚编号 1 2 3 4 5 6 7 8 符 号 功 能

VDDD CE SCLK GND SDO SDI SERMODE VDDA

数字电源,供电范围:1.8V~5.5V 片选,当 DS1722 与微处理器通信时必须置低 串行时钟输入 地 串行数据输出 串行数据输入 SPI/三线串口模式选择 模拟电源,供电范围:2.66V~5.5V

DS1722 温度传感器采用 SPI/三线串行接口通信模式。 SERMODE 接 VCC 时, 当 选择 SPI 模式;当 SERMODE 接地时,选择三线串口模式。 在 SPI 模式下,SCLK、SDI 和 SDO 分别位 SPI 的串行时钟输入端、串行数据输 入端和串行数据输出端。在三线串口通信模式下,SDI 必须和 SDO 相连作为一个 I/O 口。 3.2.3 DS1722 的内部寄存器

DS1722 内部设置有 3 个寄存器,包含一个控制/状态寄存器和两个温度数据寄 存器。 (1)控制寄存器。
D7 1 D6 1 D5 1 D4 1SHOT D3 R2 D2 R1 D1 R0 D0 SD

控制/状态寄存器分配有 2 个地址。当写控制/状态寄存器时,访问地址为 0x80; 当读控制/状态寄存器时,访问地址为 0x00。 位 4: 1SHOT 为单次转换使能位。 如果 SD 位为 1 自由转换使能禁止)将 1SHOT ( ,
21

位写 1,将启动一次温度转换并存储数据。转换结束时 1SHOT 位被硬件清零。如果 SD 位为 0,对 1SHOT 位执行写操作无效。上电时 1SHOT 位为 0。 位 3~位 1:R2、R1、R0 位为 DS1722 温度转换分辨率选择位。如表 8 所示。 上电时(R2,R1,R0)=(0,0,1) ,即默认为 9 位分辨率。
表8 R2 0 0 0 0 1 R1 0 0 1 1 × R0 0 1 0 1 × SD2303 分辨率选择 分辨率 8位 9位 10 位 11 位 12 位 最大转换时间 0.075 秒 0.15 秒 0.30 秒 0.60 秒 1.20 秒

位 0:SD 位为 DS1722 自由转换模式选择位。当 SD=0 时,DS1722 将持续进行 温度转换并存储最*一次的转换值到温度数据寄存器。 SD 从 0 变为 1 时, 当 DS1722Z 直到完成当前转换后才回到低功耗状态。上电时 SD 位为 1。 (2)温度数据寄存器。
D7 S D6 26 2
-2

D5 25 2
-3

D4 24 2
-4

D3 23 0

D2 22 0

D1 21 0

D0 20 0

地址 0x02 0x01

温度数据寄存器由两个寄存器组成,访问地址分别为 0x02 和 0x01(读、写) 。 温度数据寄存器存放以摄氏温度为单位的温度数值。温度的整数位存储在 0x02 地址 的寄存器里,而小数位存储在 0x01 地址的寄存器里。其中 S 位为符号位,S=1 表示 零下温度。 表 9 列出了不同的温度数值以 12 位分辨率采样时在温度数据寄存器里面存储的 格式。如果以较低的分辨率采样时,相应的位将为 0。
温 度 +120℃ +25.0625℃ +10.125℃ +0.5℃ 0℃ -0.5℃ 表9 DS1722 温度数据存储格式 数字输出(二进制) 数字输出(十六进制) 0111 1000 0000 0000 0001 1001 0001 0000 0000 1010 0010 0000 0000 0000 1000 0000 0000 0000 0000 0000 1111 1111 1000 0000 0x7800 0x1910 0x0a10 0x0080 0x0000 0xff80

22

-10.125℃ -25.0625℃ -55℃

1111 0101 1110 0000 1110 0110 1111 0000 1100 1001 0000 0000

0xf5e0 0xe6f0 0xc900

3.2.4

DS1722 的数据传输过程

DS1722 可以通过 Motorola SPI 和三线串口方式同微处理器通信。当采用 SPI 通 信方式时,数据的最高位 MSB 最先被传送,而采用三线串口通信方式时数据的最低 位 LSB 被最先传送。 在 SPI 通信方式下,DS1722 为 SPI 从机,微处理器为主机。只有在片选引脚 CE 被置高后,移位时钟 SCLK 方被激活。在许多带 SPI 接口的微处理器中,时钟极性 CPOL 是可编程的,但 DS1722 的时钟极性 CPOL 则是当片选端 CE 有效时通过采样 SCLK 脚的电*来确定的,输入数据在内部选通时被锁存,输出数据在移位边沿被移 出。如表 10 所示。图 17 给出了不同 CPOL 时 DS1722 的数据传输时序。
操作模式 无效 写操作 读操作 表 10 SPI 工作方式时 DS1722 的状态表 CE SCLK SDI L H H 输入无效 CPOL=1* CPOL=0 CPOL=1 CPOL=0 输入无效 数据锁存 × SDO 高阻态 高阻态

下一位数据移位 ** * 时钟极性 CPOL 在微处理器的 SPI 控制寄存器中设置。

** 读数据操作数据被移出前高阻态。

图 17 不同时钟极性时的数据传出时序

微处理器以 SPI 方式与 DS1722 通信时,时钟相位 CPHA 必须置 1。SPI 方式下, DS1722 单字节数据读写时序如图 18 和 19 所示。

23

图 18 DS1722 单字节写时序

图 19 DS1722 单字节读时序

在三线串行通信模式时的操作与 SPI 时类似。三线串行模式时,SDI 和 SDO 相 连构成一个双向 I/O 口,数据的最低位 LSB 被最先传送。同 SPI 相似,每一次的数据 传输以地址开始,然后读或者写一字节数据。图 20 给出了三线串口通信单字节数据 传输的时序。

图 20

三线串口通信单字节数据传输的时序

3.3

显示电路设计 按照图 4 设计的控制面板,万年历需要显示 16 位的年、月、日、周、时、分和

温度数据。为了合理利用 STC89C52 的 I/O 口,显示电路设计采用了一片 4-16 线译 码器驱动 ULN2803 来控制数码管的显示,如图 21 所示。

24


D 101 D 102 11 D 103 7 D 104 4 D 105 2 D 106 1 D 107 10


11 D 0 D1 7 D2 4 D3 2 D4 1 D5 10 D6 5 3


D 301 D 302 D 303 7 D 304 4 D 305 2 D 306 1 D 307 10 11 12
6 5 4 3



11 D 0 D1 7 D2 4 D3 2 D4 1 D5 10 D6 5 3

5 3

A B C D E F G Dp

A B C D E F G Dp

A B C D E F G Dp

10

1 2 3 4 5 6 7 8 14 15 16 17 18 19 20 21 9 13

D 101 D 102 3 D 103 4 D 104 5 D 105 6D 10 106 D 107 11 12 13

PD 0 PD 1 PD 2 PD 3 PD 4 PD 5 PD 6 PD 7

(RX D ) (TX D) (IN T0 ) (IN T1 ) (OC 1 B ) (OC 1 A ) (IC P) (TO SC 2 )

PC 0 PC 1 PC 2 PC 3 PC 4 PC 5 (TO SC 1 ) P C6 (TO SC 2 ) P C7 A RE F A GN D A VC C

C LR C LK

C LR C LK

C LR C LK

A B

A B

9 8

1 2

9 8

1 2

9 8

X1

12

X2

G ND

1 ST C8 9 C 5 2

2

3

4

5

1 2

R ESE T

32 31 30

V CC

V CC

V CC

A B

22 23 24 25 26 27 28 29

A 1C ON 9 A2 A3 A4 A5 A6 A7

U6 7 4 h c1 6 4

U5 7 4 h c1 6 4

D 301 D 302 3 D 303 4 D 304 5 D 305 6 D 306 10 D 307 11 12 13
U4 7 4 h c1 6 4

PB 0 PB 1 PB 2 PB 3 PB 4 PB 5 PB 6 PB 7

(T0 ) (T1 ) (AIN 0 ) (AIN 1 ) (SS) (M OS I) (M IS O) (SC K)

(AD C 0 ) P A0 (AD C 1 ) P A1 (AD C 2 ) P A2 (AD C 3 ) P A3 (AD C 4 ) P A4 (AD C 5 ) P A5 (AD C 6 ) P A6 (AD C 7 ) P A7

V CC U0 40 39 38 37 36 35 34 33

R P1 1 2 3 4 5 6 7 8 9

C3 C2 C2 C1

C3 C2 C2 C1

C3 C2 C2 C1

V CC

12

12

12

9 8 6

9 8 6

9 8 6

6 5 4 3

2 1 2 1

6 5 4 3


D0 3D1 4D2 5D3 6D4 10 11 5 D 12 6 D 13



9 8 6

C3 C2 C2 C1

QA QB QC QD QE QF QG QH

QA QB QC QD QE QF QG QH

QA QB QC QD QE QF QG QH
6

A B C D E F G Dp

5 3



7

11

Q1 N PN A1 A2

Q2 N PN A3

Q3 N PN A4

Q4 N PN A5

Q5 N PN A6

Q6 N PN A7

Q7 N PN

图 21 显示电路

3.4

键盘及闹铃电路设计 万年历需要通过键盘完成时间校准和闹铃设置等任务。为简化设计,这里采用了

独立式键盘输入数据,如图 22 所示。STC89C52 的 PC3~PC0 在程序中设置为上拉 输入,这样,在没有按键按下时这些 I/O 口为高电*输入,当有按键按下时,对应的 I/O 口被拉低,检测 I/O 口电*状态即可判*醇聪掠敕瘛1ň缏凡捎 I/O 通过 三极管驱动蜂鸣器实现。

25

图 22 键盘和报警电路

26

4 软件设计
4.1 软件结构设计 万年历系统控制程序从功能上来说或包含系统初始化程序、 实时时钟日历芯片的 读写程序、温度传感器芯片的读写程序、键盘和显示程序及其他一些辅助事务处理程 序。 4.1.1 主程序

主程序主要完成系统初始化 (包括 I/O 口初始化、 SD2303 芯片的初始化和 DS1722 芯片的初始化) 、按键检测和处理、时钟数据的读取和显示、温度数据的读取和显示 以及根据条件判断是否需要进行定时报警等工作,以完成人机交互的功能。 系统主程序的流程图如图 23 所示。

图 23 主程序流程
27

4.1.2

按键检测和处理程序

按键检测和处理程序位设置时间和闹铃提供人机接口。 万年历提供 7 个独立式的 按键接口,通过采集按键的电*状态来检测按键的按下与否。在按键检测程序中提供 了延时防抖动功能。按键检测程序只有在检测到“时间设置”键或者“闹铃设置”键 被按下后方进入处理程序。处理程序结束的条件为检测到“确认”键被按下。 按键检测程序通过点亮数码管的小数点提示正在进行设置的是哪一位数据。 处理 程序提供了对闹铃时间设置的合法性检测,而不提供对时间设置的合法性检测。只有 合法的闹铃时间设置方能启动闹铃功能,任何非法的闹铃时间设置将关闭闹铃功能。 案件检测与处理的程序流程如图 24 所示。

图 24 按键检测和处理程序流程

28

5 系统集成测试与仿真
5.1 系统集成测试 电子万年历系统的测试分为 4 部分:STC89C52 主机电路测试、键盘显示电路的 测试、实时时钟电路的测试和温度检测电路的测试。对各部分的测试应该编制各自的 测试程序。 在完成单片机电路测试后,首先应该进行按键和数码管的显示测试。在电子万年 历系统的设计中采用了 16 位数码管的动态显示和 7 位独立的按键设计。在主程序中 给出了显示和按键检测的程序,由于按键没有接上拉电阻,在编写测试程序时必须将 接按键的 I/O 口设置位带上拉的输入方式,这样才能保证按键状态是正确检测。设计 中采用的是共阴型数码管,如果在设计中采用共阳型的数码管,必须修改显示程序才 能正确显示数据。 在主程序中给出了实时时钟芯片与 STC89C52 单片机的数据传输函数。 可以依据 这些函数编写测试程序。 在主程序中同样给出了温度传感器与 STC89C52 单片机的数据传输函数, 可以依 据这些函数编写测试程序。 5.2 系统在线仿真 5.2.1 仿真软件介绍 仿真采用 Proteus ISIS 仿真软件来仿真。首先,先大概介绍下 Proteus 软件。这里 我才用的是 Proteus7.1 版本的。 Proteus ISIS 是英国 Labcenter 公司开发的电路分析与实物仿真软件。它运行于 Windows 操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的 特点是:①实现了单片机仿真和 SPICE 电路仿真相结合。具有模拟电路仿真、数字 电路仿真、单片机及其外围电路组成的系统的仿真、RS232 动态仿真、I2C 调试器、 SPI 调试器、键盘和 LCD 系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析 仪、 信号发生器等。 ②支持主流单片机系统的仿真。 目前支持的单片机类型有: 68000 系列、 8051 系列、 AVR 系列、 PIC12 系列、 PIC16 系列、 PIC18 系列、 Z80 系列、 HC11 系列以及各种外围芯片。③提供软件调试功能。在硬件仿真系统中具有全速、单步、 设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件 仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如 Keil C51 uVision2 等软件。④具有强大的原理图绘制功能。总之,该软件是一款集单片机
29

和 SPICE 分析于一身的仿真软件,功能极其强大。 5.2.2 Keil 与 proteus 结合仿真

在 proteus 中绘制硬件电路图。这里就不多做介绍。绘制硬件图如图 25 所示:

图 25 仿真硬件原理图

调用 keil 生成的 hex 文件添加到 Proteus ISIS 中。方法如下:双击图中的单片机 弹出对话框,如图 26 所示。

图 26 添加 hex 文件开始仿真

添加成功后,就可以运行程序,实施仿真。 5.2.3 仿真结果

程序无误后添加到 Proteus 中后仿真结果如图 27 所示:
30

公元: 年
6 5 4 3 5A 5B 5C 5D 5E 5F 5G

阳历:
5A 5B 5C 5D 5E 5F 5G 2 1





3A 3B 3C 3D 3E 3F 3G

图 27 仿真结果图
3A 3B 3C 3D 3E 3F 3G 4A 4B 4C 4D 4E 4F 4G 4 3 3G 4G 3C 3D 4C 4D 3B 3E 4B 4E 3A 4A 3F 4F X 10 11 12 13 10 11 12 13 3 4 5 6 3 4 5 6

阴历:
3A 3B 3C 3D 3E 3F 3G 6 5


RP1
1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 20 21 22 23 24 25 26 27 P3.0 P3.1 39 38 37 36 35 34 33 32 2 3 4 5 6 7 8 9 RESPACK-8


U3
1D

时间:
U4
1D

6 5 4 3 2 1

2 1

5G

5C

5D

5B

5E

5A

5F

10

11

12

U2
19 XTAL1

13

3

4

5

6

Y

U5
74LS164
SRG8 SRG8

18 XTAL2

C1/->

C1/->

SRG8

C1/->

&

&

R

R

9 RST

8

1 2

P3.1 8

1 2

R

P3.1 8

29 30 31 PSEN ALE EA

U1
8 1 VCC1 X1 VCC2 5 7 6 2
1 2 3 4 5 6

1 2 3 4 5 6 7 8 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7

RST SCLK I/O X2 DS1302

20 3

Q7
2N2222

21

Q8 22 2N2222

Q9
2N2222 23

Q10
2N2222

24

Q11
2N2222

25

Q12
2N2222

7

26

Q13

2N2222

STC89C52

P3.0 1 P3.0 2

9

9

P3.1

X X

Y Y

9

&

1D

74LS164

74LS164

31

5.2.4

仿真结果分析

经过 proteus 的在线仿真,现分析如下: (1) 本次课题硬件和软件设计均无设计上的问题。结果都可以仿真出来。 (2) 经过 proteus 的在线仿真,发现从设计到仿真直到做出成品来还是有很大的差 距。因为,在线仿真毕竟不同于现实中做成品。 (3) 由于 proteus 软件仿真库中有些元器件没有, SD2303 和 DS1722。 如: 并且 proteus 中自己建立库难度非常大,所以上述温度显示没有仿真到。 (4) 仿真中出现了和现实做板子之间不一致的问题。如:定时、驱动能力和功耗在 proteus 中没有体现出来,因为 proteus 中单片机可以不用晶振完全“裸跑”。 而在现实中这些都是必须要考虑的问题。 以上几点是我在仿真中出现的问题,在以后的设计中将注意此类问题。

32

[参考文献] [1]李光飞,楼然苗,胡佳文等.单片机课程设计实例指导 [M].北京:北京航空航天大学出版 社,2004. [2] 杨欣,王玉凤,刘湘黔.51 单片机应用从零开始[M].北京:清华大学出版社,2002. [3] 王传新.电子技术基础实验-分析、调试、综合设计[M].北京:高等教育出版社,2004. [4]万福君.单片微机原理系统设计与应用(第二版)[M].合肥:中国科学技术大学出版社,2001. [5] 梅丽凤.单片机原理及接口技术[M].北京:清华大学出版社,2004. [6] 高峰.单片微型计算机原理与接口技术[M].北京:科学出版社,2003. [7] 童诗白,华成英.模拟电子技术基础(第三版)[M].北京:高等教育出版社,2001. [8] 全国大学生电子设计竞赛组委会.第五届全国大学生电子设计竞赛获奖作品选编[M].北京: 北京理工大学出版社,2001. [9] 刘文涛.基于 C51 语言编程的 MCS-51 单片机实用教程[M].北京:原子能出版社,2004. [10]童本敏.TTL 集成电路[M].北京:电子工业出版社,1985. [11]毕满清等.电子技术实验与课程设计[M].北京:机械工业出版社,1995. [12]柯节成.简明电子元器件手册[M].北京:高等教育出版社,1991. [13]吴运昌.模拟集成电路原理与应用[M].广州:华南理工大学出版社,1995. [14]何希才,伊兵,杜煜.实用电子电路设计[M].北京:电子工业出版社,1998. [15]电子学名词审定委员会.电子学名词[M].北京:科学出版社,1993. [16]Susan A.R. Garrod,Robort J.Borns. Digital Logic-Analysis, Application & Design[M]. Holt Rinehart and Winston,Inc,1991. [17]Davide Johnson Johnl Hiburn. Rapid Practical Designs of Active Filters[M]. JOHN WILEY & SONS,1975. [18]M. Herpy. Analog Intergrated Circuits[M]. WILEY, 1980.

33

附 录:
万年历系统主要程序如下: //************************FileName:万年历.C**********************// #include <io8535v.h> #include <macros.h> #define uchar unsigned char #define uint unsigned char #define SD2303 0x64 //寄存器定义文件 //使用到宏 //数据类型定义 //数据类型定义 //SD2303 器件 I2C 识别码

uchar Table[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x38,0x76}; //显示数据表 0 1 2 3 4 5 6 7 8 9 L H

uchar Data[4]={0,0,0,0}; uchar Enter_Flag; uchar F_Flag;

//DS1722 //确定 //数据应答标志

void DelayMs(uint i) {uchar j; for(;i!=0;i--) {for(j=2000;j!=0;j--) {;}} }

//延时函数 1

void Display(uchar *p) {uchar i,sel=0x00; for(i=0;i<16;i++) {PORTC=sel; PORTA=Table[p[i]]; DelayMs(10); sel=sel<<1; } }

//显示函数

void NOPNOP(uchar i)
34

//延时函数 2

{for(;i!=0;i--) NOP();}

void main(void) {uchar i; uchar time[16]={2,0,0,4,1,2,2,7,1,1,7,3,0,0,0,0}; uchar Set_Time[7]={0x50,0x30,0x20,0x03,0x05,0x01,0x05}; //初始化时间 uchar SD,DS; uchar SD2303_Controller1=0x00; uchar SD2303_Controller2=0x20; DDRA=0xff; DDRC=0xff; DDRD=0x80; PORTD=0x7F; DDRB=0xF3; PORTB=0xF3; Write_1byte(SD2303,0x0e,SD2303_Controller1);//写控制字 Write_1byte(SD2303,0x0f,SD2303_Controller2);//写控制字 Write_Nbyte(SD2303,0x00,Set_Time,7); SPCR=0b01011100; DSWrite_Byte(0x80,0xf0); while(1) {Key_Process(); Read_Nbyte(SD2303,0x00,Set_Time,7); time[2]=Set_Time[6]>>4; time[3]=Set_Time[6]&0x0f; time[4]=Set_Time[5]>>4; time[5]=Set_Time[5]&0x0f; time[6]=Set_Time[4]>>4; time[7]=Set_Time[4]&0x0f; time[8]=Set_Time[3];
35

2005-01-05 Wed 20-30-50

//禁止中断 //时间格式:24 小时制 //A 口输出 //C 口输出 //D 口最高位输出,其他带上拉输入

//B 口带第 2、3 位带上拉输入,其他输出

//初始化时间

//DS1722

8 位分辨率自由转换模式

//按键处理 //读取时间 //年高位; //年低位; //月高位; //月低位; //日高位; //日低位; //星期;

time[9]=Set_Time[2]>>4; time[10]=Set_Time[2]&0x0f; time[11]=Set_Time[1]>>4; time[12]=Set_Time[1]&0x0f; time[13]=Set_Time[0]>>4; time[14]=Set_Time[0]&0x0f; Read_Nbyte(SD2303,0x0f,&SD,1); if(SD&0x02) PORTD=PORTD|0x80; else PORTD=PORTD&0x7F;

//时高位; //时低位; //分高位; //分低位; //秒高位; //秒低位; //读取中断标志位 //响铃 1 分钟 //关闭闹铃 //读取温度值

DS=DSRead_Byte(0x02); Convert(DS,time); Display(time); } }

//时间显示

36





本研究及学位论文是在我的导师程兴国老师的亲切关怀和悉心指导下完成的。 他 严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。 程老师不仅在学业上给我以精心指导, 同时还在思想、 生活上给我以无微不至的关怀, 在此谨向程老师致以诚挚的谢意和崇高的敬意。 我还要感谢在一起愉快的度过毕业论 文小组的同学们,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑, 直至本文的顺利完成。 本论文从选题到完成,每一步都是在程兴国程老师的精心指导下完成的,他严肃 的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。每一 步都倾注了程老师大量的心血。老师渊博的专业知识,严谨的治学态度,朴实无华、 *易*人的人格魅力令我敬佩。在此,谨向程老师表示崇高的敬意和衷心的感谢! 大学本科四年,十四门专业课,加上无数的选修,我有幸得以聆听襄樊学院许多 优秀教师的精彩课程,学到了专业知识并明白了许多待人接物与为人处世的道理。在 困难时的援手、迷茫时的指点、失败时的安慰、成功时的祝福,师生之谊是长辈的关 怀又似朋友之间的情谊。 我还要感谢在一起愉快的度过毕业论文小组的同学们, 正是由于你们的帮助和支 持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。 在论文即将完成之际,我的心情无法*静,从开始进入课题到论文的顺利完成, 有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!最 后我还要感谢培养我长大含辛茹苦的父母,谢谢你们! 最后,再次对关心、帮助我的老师和同学表示衷心地感谢!只字片语难以表达, 幻化为一句感谢和祝福: 祝福老师身体康安!祝福同学们工作顺心!祝福大家一切顺利!

37


相关推荐

最新更新

猜你喜欢