版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘摘 要要 在当代繁忙的工作与生活中,时间与我们每一个人都有非常密切的关系,每 个人都受到时间的影响。为了更好的利用我们自己的时间,我们必须对时间有一 个度量,因此产生了钟表。钟表的发展是非常迅速的,从刚开始的机械式钟表到 现在普遍用到的数字式钟表,即使现在钟表千奇百怪,但是它们都只是完成一种 功能计时功能,只是工作原理不同而已,在人们的使用过程中,逐渐发现了 钟表的功能太单一,没有更大程度上的满足人们的需求。因此,数字电子时钟的 出现成为必然。 数字钟是采用数字电路实现对.时,分.数字显示的计时装置,广泛用于个人家庭, 车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字
2、集成 电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的 报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、 自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等, 所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着 非常现实的意义。 在此设计中所设计的钟表不但具有普通钟表的功能,它还能实现多个额外的 功能:温度测量、年,月,日,星期。 关键词:单片机,电子时钟,DS1302,DS18B20,LCD1602 目录目录 第一章第一章 绪绪 论论
3、 .1 1 第二章第二章 系统硬件电路设计系统硬件电路设计 .3 3 第 1 节 单片机控制系统原理.3 第 2 节 模块电路设计与比较.4 一、 时钟方案选择.4 二、 温度检测方案选择.4 三、 显示模块的选择.4 四、 其他设计的考虑.4 第 3 节 各功能模块硬件设计及实现.5 一、 单片机控制系统.5 二、 DS1302 实时时钟芯片 .10 三、 温度模块.14 四、 1602 液晶显示器 .16 第 4 节 电路总图.20 第三章第三章 系统程序设计系统程序设计 .2121 第 1 节 主程序流程图.21 第 2 节 中断服务程序.22 第四章第四章 程序程序 .2323 第 1
4、 节 系统程序设计.23 第五章第五章 总结总结 .3535 第六章第六章 参考文献参考文献 .3636 第一章第一章 绪绪 论论 本设计主要分为硬件电路设计和软件实现两大部分。硬件电路设计采用模块 设计:中央处理电路、时钟电路、温度测量电路三大部分;软件采用 C 语言编程 实现,设计采用按功能模块划分,包括:主程序、显示程序、温度测量程序、时 钟程序等。 在中央处理器上我们采用 AT89S52 单片机,该单片机是集 CPU ,RAM ,ROM , 计数和多种接口于一体的微控制器。自 20 世纪 70 年代问世以来,以其极高的性 能价格比,受到人们的重视和关注。它体积小、重量轻、抗干扰能力强、
5、环境要 求不高、价格低廉、可靠性高、灵活性好、开发较为容易,广泛应用于智能生产 和工业自动化上。 在时间功能上主要依靠实时时钟芯片 DS1302 来完成大部分功能,DS1302 是 具有涓细电流充电能力的低功耗实时时钟电路,它以其接口简单、价格低廉、使 用方便,被广泛地采用。它的主要特点是采用串行数据传输,可为掉电保护电源 提供可编程的充电功能,并且可以关闭充电功能。采用普通 32.768kHz 晶振。所 以用此款芯片来实现时间功能是完全能满足电路的要求。 温度方面工作由数字式温度传感器 DS18B20 来完成,这款温度传感器是具有 线路简单,体积小,方便易用等特点,温度测量范围为55125,
6、可编程 为 9 位12 位 A/D 转换精度,测温分辨率可达 0.0625,被测温度用符号扩展的 16 位数字量方式串行输出。选用这个芯片使电路简化,提高了效率。 本课题通过 MCS-51 单片机来设计,采用 C 语言进行编程,可以实现以下一 些功能:小时、分、秒和年、月、日的显示,定时报警功能。本设计的电子时钟 系统由时钟电路,LCD 显示电路,定时报警电路,按键调整电路四部分组成。51 单片机通过软件编程,在 LCD1602 液晶屏上实现小时、分、秒和年、月、日的显 示;利用时钟芯片 DS1302 来实现计时,定时功能;通过两个按键开关,一个用 于时钟的调节,一个用于闹钟的调节,来实现参数
7、设置和调节功能;到达设置的 闹钟时间时,由蜂鸣器发声,起报警作用。本次设计的电子时钟,经过对比测试, 发现实际计时的走时精度较高,可满足多种场合的应用需求。 本文详细介绍了 AT89S52 单片机的基本原理,分析了 AT89S52 各个管脚的 功能及它在设计电路中的作用。本文论述了 LCD1602 液晶屏和时钟芯片 DS1302 的工作原理及其软件设计过程。 第二章第二章 系统硬件电路设计系统硬件电路设计 第第 1 节节 单片机控制系统原理单片机控制系统原理 方案一方案一:采用 CPLD 可编程逻辑器件作为主控制器控制外围电路进行电压、 频率测量,时钟控制、温度测量、键盘和 LED 控制、报警
8、控制。此方案逻辑电 路复杂,且灵活性较低,不利于各种功能的扩展,在测电压时将通过 A/D 测得的 数值转化为电压有效值时有一定的困难。 方案二方案二:采用 AT89S52 单片机来实现系统的控制。键盘四个独立按键控制, 时钟芯片采用 DS1302,温度传感器采用 DS18B20。此系统硬件简洁,将复杂的 硬件功能用软件实现,因此系统控制灵活,能很好地满足本题的基本要求和扩展 要求。此方案基本原理框图如图 2.1 所示。 比较以上两种方案的优缺点,方案二 简洁、灵活、可扩展性好,能完全达到设计要求,故采用第二种方案。 液晶显示 部分 DS18B20 温度传感器 部分 AT89S52 单片机 DS
9、1302 实时时钟部分 键盘输入部分 图图 2.1. 系统方框图系统方框图 第第 2 节节 模块电路设计与比较模块电路设计与比较 一、一、 时钟方案选择时钟方案选择 方案一方案一:要求显示小时和分钟,因此可以用门电路组合构成时钟发生器,但 此方案硬件复杂,稳定性低,且不易控制。 方案二方案二:采用带 RAM 的时钟芯片 DS1302。该芯片可以进行时分秒的计数, 具有 100 年日历,可编程接口,还具有报警功能和掉电保存功能,并且可以对其 方便的进行程序控制,能很好的符合要求。故采用方案二。 二、二、 温度检测方案选择温度检测方案选择 方案一方案一:采用热电偶或热敏电阻作感温元件,但热电偶需冷
10、端补偿,电路设 计复杂,热敏电阻虽然精度较高,但需要标准稳定电阻匹配才能使用,而且重复 性、可靠性都比较差。 方案二方案二:采用集成温度传感器 DS18B20 。该传感器结构简单,不需外接电 路,数据传输采用 one-wire。总线,可用一根 I/O 数据线即供电又传输数据,在 -10 -+85范围内精度为0.5,分辨率较高,重复性和可靠性好。故采用方 案二。 三、三、 显示模块的选择显示模块的选择 方案一方案一:采用数码管显示。数码管亮度高、体积小、重量轻,但其显示信息 简单、有限,在本题目中应用受到很大的限制。 方案二方案二:采用液晶显示。液晶显示功耗低,轻便防震。采用液晶显示界面友 好清
11、晰,操作方便,显示信息丰富。 四、四、 其他设计的考虑其他设计的考虑 闹铃响可采用蜂鸣器来模拟一些音乐,实现闹铃的效果。也可采用音乐模块 来更简单,更实用的效果,在此本设计出于器件规模的考虑特采用蜂鸣器来模拟 闹铃。 第第 3 节节 各功能模块硬件设计及实现各功能模块硬件设计及实现 本设计以单片机 AT89S52 为控制核心,由实时时钟部分、显示部分、键盘输 入部分、温度采集部分等部分组成。其中实时时钟采用 DS1302 可实现年月日时 分秒等时间信息的采集和闹钟功能。温度检测模块由 DS18B20 集成温度传感器 对现场环境温度进行实时检测。键盘采集部分由四个独立按键组成,可实现时间 显示、
12、闹钟设置、环境温度测量等功能。 硬件设计是整个系统的基础,要考虑的方方面面很多,除了实现此设计基本 功能以外,主要还要考虑如下几个因素:系统稳定度;器件的通用性或易选 购性; 软件编程的易实现性;系统其它功能及性能指标;因此硬件设计至 关重要。现从各功能模块的实现逐个进行分析探讨。 一、一、 单片机控制系统单片机控制系统 AT89S52 单片机 AT89S52 是美国 ATMEL 公司生产的低电压,高性能的 CMOS8 位单片机片 内 8Kbytes 的可反复擦写的只读程序存储器(PEROM)和 128bytes 的随机存储器 (RAM) ,器件采用 ATMEL 公司的高密度、非易失存储技术生
13、产,兼容标准 MCS-51 指令系统,片内置通用 8 位中央处理器(CPU)和 Flash 存储单元,功能 强大。AT89S52 单片机可为你提供许多高性价的应用场合,可灵活的应用于各种 控制领域。 主要性能参数: 与 MCS-51 产品指令系统的全兼容 4k 字节可重擦写 Flash 闪速存储器 1000 次可擦写周期 全静态操作:0Hz-24MHz 三级加密程序存储器 1288 字节内部 RAM 32 个可编程 I/O 口线 2 个 16 位定时/计数器 5 个中断源 可编程串行 UART 通道 低功耗空闲和掉电模式 AT89S52 功能特性描述: AT89S52 提供以下标准功能:4k
14、字节 Flash 闪速存储器,128 字节内部 RAM,32 个 I/O 口线,两个 16 位定时/计数器,一个 5 向量中断结构,一个全双 工串行通信口, 片内震荡器及时钟电路。同时,AT89S52 可降至 0Hz 的静态逻辑操作,并支 持两种软件的可选的节电工作模式。空闲方式停止 CPU 的工作,但允许 RAM, 定时/计数器,窜行通信口及中断系统继续工作。掉电方式保存 RAM 中的内容, 但震荡器停止工作并禁止所有部件工作直到下一个硬件复位。 (1)AT89S52 引脚功能说明: Vcc:电源电压 GND:地 P0 口:PO 口是一组 8 位漏极开路行双向 I/O 口,也既地址/数据总线
15、复用口。 可作为输出口使用时,每位可吸收电流的方式驱动 8 个 TTL 逻辑电路,对端口写 “1”可作为高阻抗输入输入端用。在访问外部数据存储器时,这组口线分时转换地 址(低 8 位)和数据总线复用,在访问期间激活内部上拉电阻。在 Flash 编程时, PO 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求接上拉电 阻。 P1 口:P1 口是一个内部上拉电阻的 8 位双向 I/O 口,P1 的输入缓冲级可驱 动(吸收或输出电流)4 个 TTL 逻辑门电路。对端口写“1”,通过内部的上拉电 图图 2.2. 单片机引脚图单片机引脚图 阻把端口拉到高电平,此时可作输出口。作输入口时,因为内
16、部存在上拉电阻, 某个引脚被外部信号拉低时输出一个电流(I) 。Flash 编程和程序校验期间,P1 口接收 8 位地址。 P2 口:P2 口是一个带有内部上拉电阻的 8 位双向 I/O 口,P2 的输入缓冲极 可以驱动(输入或输出电流)4 个 TTL 逻辑门电路。对端口“1”,通过内部的上 拉电阻把端口拉到高电平,此时和作为输出口,作输出口时,因为存在内部上拉 电阻,某个引脚被外部信号拉低时会输出一个电流。在访问外部存储器或 1 位地 址的外部数据存储器(例如执行 MOVXDPTR 指令)时,P2 口送出高 8 位地址 数据。在访问 8 位地址的外部数据存储器(如执行 MOVXRI 指令)时
17、,P2 口 线的内容(也既特殊功能寄存器(SFR)区中 R2 寄存器的内容) ,在整个访问期 间不改变。Flash 编程或校验时,P2 亦接收高地址和其他控制信号。 P3 口:P3 口是一组带有内部上拉电阻的 8 位双向 I/O 口,P1 的输入缓冲级 可驱动(吸收或输出电流)4 个 TTL 逻辑门电路。对 P3 口写入“1”时,它们被内 部上拉电阻拉高并可作为输出端口。作输出端口时,被外部拉低的 P3 口将用上 拉电阻输出电流。P3 口除可作为一般的 I/O 口线外,更重要的用途是它的第二功 能如表 2.1 所示: 表表 2.1 AT89S52 端口:端口: P3 口还接收一些用于 Flas
18、 闪速存储器编程和程序校验的控制信号 ALE/当访问外部程序存储器或数据存储器时,ALE(地址锁存允许) PROG 输出脉冲用于锁存地址的低 8 位字节,即使不访问外部字节,ALE 仍时钟震荡频 率的 1/6 输出固定的正脉冲信号,因此它可对外输出时钟脉冲或用于定时目的。 要注意的是:每次访问外部存储器时将跳过一个 ALE 脉冲。对 Flash 存储器编程 期间,该引脚还要输入编程脉冲() 。如有必要,可通过对特殊功能寄存 PROG 器(SFR)区中的 8EH 单元的 D0 位置位,可禁止 ALE 操作。该位置位后,只有 一条 MOVX 和 MOVC 指令可激活。 此外,此引脚会被微弱拉高,单
19、片机执行外部程序时,应该置 ALE 无效 RST:复位输出。当震荡器工作时,RST 引脚出现两个机器周期以上高电平 使机器复位。 :程序存入允许()输出的是外部程序存储器的读选通信号,当 PSENPSEN AT89S52 由外部程序取指令(或数据)时,每个机器周期两次有效,既输 PSEN 出两个脉冲。在此期间,当访问外部数据存储器,这两次有效的信号不出 PSEN 现。 EA/VPP:外部访问允许。欲使 CPU 仅访问外部程序存储器(地址为 0000H- -FFFFH) ,EA 端必须保持低电平(接地) 。要注意的是:如果加密位 LB1 被编程, 复位时内部会锁存 EA 端状态。Flash 存储
20、器编程时,该引脚加上+12V 的编程允 许电源 Vpp,当然这必须是该器件是使用 12V 的编程电压 Vpp。 XTAL1:震荡器反向放大器及内部时钟的输入端。 XAAL2:震荡器反向放大器的输出端。 图图 2.32.3 内部震荡电路内部震荡电路 时钟震荡器:AT89S52 中有一个构成内部震荡器的高增益 由于外部时钟信号是通过一个 2 分频的触发器后作为内部时钟信号的所以外 部时钟的占空比没有特殊要求,但最小高电平持续的时间和最大低电平持续的时 间应符合产品技术条件的要求。 表表 2.2 AT89S52 寄存器寄存器 寄存器内容寄存器内容 PC0000HTMOD00H ACC00HTCOM0
21、0H B00HTH000H PSW00HTLO00H SP07HTH100H0 DPTR0000HTH100H P1P30FFHSCON00H IPxxx00000SBUF不定 IE0 xxx00000PCON0 xxx00000 其中单片机最小系统的电路图如图 2.4 所示。 图图 2.4 单片机最小系统单片机最小系统 二、二、 DS1302 实时时钟芯片实时时钟芯片 DS1302 是 DALLAS 公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和 31 字节静态 RAM,可以通过串行接口与单片机进行通信。实时时钟/日历电路提 供秒、分、时、日、星期、月、年的信息,每个月的天数和闰年的天
22、数可自动调 整,时钟操作可通过 AM/PM 标志位决定采用 24 或 12 小时时间格式。DS1302 与 单片机之间能简单地采用同步串行的方式进行通信,仅需三根 I/O 线:复位 (RST) 、I/O 数据线、串行时钟(SCLK) 。时钟/RAM 的读/写数据以一字节或多 达 31 字节的字符组方式通信。 DS1302 工作时功耗很低,保持数据和时钟信息时,功耗小于 1mW。DS1302 的 内部结构如图 2.5 所示,主要组成部分为:移位寄存器、控制逻辑、振荡器、实 时时钟以及 RAM。虽然数据分成两种,但是对单片机的程序而言,其实是一样 的,就是对特定的地址进行读写操作 图图 2.5 D
23、S1302 的内部结构图的内部结构图 DS1302 含充电电路,可以对作为后备电源的可充电电池充电,并可选择充 电使能和串入的二极管数目,以调节电池充电电压。不过对我们目前而言,最需 要熟悉的是和时钟相关部分的功能,对于其它参数请参阅数据手册。 DS1302 的工作原理的工作原理 DS1302 工作时为了对任何数据传送进行初始化,需要将复位脚(RST)置为 高电平且将 8 位地址和命令信息装入移位寄存器。数据在时钟(SCLK)的上升 沿串行输入,前 8 位指定访问地址,命令字装入移位寄存器后,在之后的时钟周 期,读操作时输出数据,写操作时输出数据。时钟脉冲的个数在单字节方式下为 8+8(8 位
24、地址+8 位数据) ,在多字节方式下为 8 加最多可达 248 的数据。 DS1302 的寄存器和控制命令的寄存器和控制命令 对 DS1302 的操作就是对其内部寄存器的操作,DS1302 内部共有 12 个寄存 器,其中有 7 个寄存器与日历、时钟相关,存放的数据位为 BCD 码形式。此外, DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与 RAM 相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器以外的寄存器。 日历、时间寄存器及控制字如表 2.3 所示: 表表 2.3:日历、时钟寄存器与控制字对照表:日历、时钟寄存器与控制字对照表 最后一位 RD/W 为“
25、0”时表示进行写操作,为“1”时表示读操作。 DS1302 内部寄存器列表如表 2.4 所示: DS1302 内部的 RAM 分为两类,一类是单个 RAM 单元,共 31 个,每个单 元为一个 8 位的字节,其命令控制字为 COHFDH,其中奇数为读操作,偶数为 76543210 寄存器名称 1RAM/CKA4A3A2A1A0RD/W 秒寄存器1000000 分寄存器1000001 小时寄存器1000010 日寄存器1000011 月寄存器1000100 星期寄存器1000101 年寄存器1000110 写保护寄存器1000111 慢充电寄存器1001000 时钟突发寄存器1011111 命令
26、字各位内容 寄存器名称 写读 取值范围 76543210 秒寄存器80H81H00-59CH10SECSEC 分寄存器82H83H00-59010MINMIN 小时寄存器84H85H01-12 或 00-2312/240AHRHR 日期寄存器86H87H01-28,29,30,310010DATEDATE 月份寄存器88H89H01-1200010MMONTH 周寄存器8AH8BH01-0700000DAY 年份寄存器8CH8DH00-9910YEARYEAR 表表 2.4. DS1302 内内部部寄寄存存器器列列表表 写操作;再一类为突发方式下的 RAM,此方式下可一次性读写所有的 RAM
27、的 31 个字节,命令控制字为 FEH(写) 、FH(读) 。 我们现在已经知道了控制寄存器和 RAM 的逻辑地址,接着就需要知道如何 通过外部接口来访问这些资源。单片机是通过简单的同步串行通讯与 DS1302 通 讯的,每次通讯都必须由单片机发起,无论是读还是写操作,单片机都必须先向 DS1302 写入一个命令帧,这个帧的格式如表 2.1 所示,最高位 BIT7 固定为 1,BIT6 决定操作是针对 RAM 还是时钟寄存器,接着的 5 个 BIT 是 RAM 或时 钟寄存器在 DS1302 的内部地址,最后一个 BIT 表示这次操作是读操作抑或是写 操作。 物理上,DS1302 的通讯接口由
28、 3 个口线组成,即 RST,SCLK,I/O。其中 RST 从低电平变成高电平启动一次数据传输过程,SCLK 是时钟线,I/O 是数据 线。请注意,无论是哪种同步通讯类型的串行接口,都是对时钟信号敏感的,而 且一般数据写入有效是在上升沿,读出有效是在下降沿(DS1302 正是如此的, 但是在芯片手册里没有明确说明) ,如果不是特别确定,则把程序设计成这样: 平时 SCLK 保持低电平,在时钟变动前设置数据,在时钟变动后读取数据,即数 据操作总是在 SCLK 保持为低电平的时候,相邻的操作之间间隔有一个上升沿和 一个下降沿。 DS1302 的命令字结构图 图图 2.6 DS1302 的命令字结
29、构的命令字结构 图图 2.7 DS1302 部分原理图部分原理图 三、三、 温度模块温度模块 本设计中我在温度模块中采用的是 DS18B20 温度传感器,DSl8B20 是 DALLAS 公司生产的一线式数字温度传感器。它将地址线、数据线和控制线合为 一根双向串行传输数据的信号线,允许在这根信号线上挂接多个 DSl8B20;因此, 单片机只需通过一根 IO 线就可以与多个 DSl8B20 通信。每个芯片内还有一个 64 位的 ROM,其中存有各个器件自身的序列号,作为器件独有的 ID 号码。 DSl8B20 简化了测温器件与计算机的接口电路,使得电路简单,使用更加方便。 DSl8B20 的特性
30、如下: (1)测温范围:一 55 至十 125; (2)转换精度:9 至 12 位二进制数(包括符号 1 位),可编程确定转换精度的位数; (3)测温分辨率:9 位精度为 05,12 位精度为 0.0625; (4)转换时间:9 位精度为 9375ms,10 位精度为 1875ms,12 位精度为 750ms; (5)具有非易失性上、下限报警设定的功能。 预置斜率累加器 计数比较器 预置 温度寄存器 减到 0减法计数器 2高温度系数振荡器 减到 0 减法计数器 1低温度系数振荡器 停止 增加 图图 2.7 内部测温电路图内部测温电路图 DS18B20 的测温原理如图 2.7 所示,图中低温度系
31、数晶振的振荡频率受温度 的影响很小,用于产生固定频率的脉冲信号送给减法计数器 1,高温度系数晶振 随温度变化其振荡频率明显改变,所产生的信号作为减法计数器 2 的脉冲输入, 图中还隐含着计数门,当计数门打开时,DS18B20 就对低温度系数振荡器产生的 时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡 器来决定,每次测量前,首先将-55 所对应的基数分别置入减法计数器 1 和温 度寄存器中,减法计数器 1 和温度寄存器被预置在-55所对应的一个基数值。减 法计数器 1 对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器 1 的 预置值减到 0 时温度寄存器的值将加
32、1,减法计数器 1 的预置将重新被装入,减 法计数器 1 重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到 减法计数器 2 计数到 0 时,停止温度寄存器值的累加,此时温度寄存器中的数值 即为所测温度。图 2.7 中的斜率累加器用于补偿和修正测温过程中的非线性,其 输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至 温度寄存器值达到被测温度值,这就是 DS18B20 的测温原理。 使用 DSl8B20 时应注意以下事项: (1)由于 DSl8B20 的测温分辨力提高到 12 位,因此它对时序及电特性参数要 求较高需严格按照 DSl8B20 的时序要求进行操作。
33、(2)DSl8B20 作三线制应用时,应将 UDD、IO、GND 端焊接牢固;作两线 制应用时,应将 UDD 与 GND 连在一起焊牢。若 UDD 端漏焊或者虚焊,传感器就 只能输出十 850的温度数据。 (3)测温电缆线可采用带屏蔽层的 4 芯双绞线,其中两根线分别接信号线与地线, 另两根线依次接 UDD 和地线,屏蔽层在源端单点接地。 四、四、 1602 液晶显示器液晶显示器 1602 字符型型液晶是一种用 57 点阵图形来显示字符的液晶显示器,根据显 示的容量可以分为 1 行 16 个字、2 行 16 个字、2 行 20 个字等,最常用的为 2 行 16 个字,即我们马上要学习的 160
34、2 液晶模块,下面(图 2.8)就是 TC1602 液晶模 块的正面照片。 图图 2.8 1602 实物图实物图 带背光的液晶模块 TC1602EL,TC1602EL 采用标准的 16 脚接口,其引脚 功能如下: 第 1 脚:VSS 为电源地,接 GND。 第 2 脚:VDD 接 5V 正电源。 第 3 脚:VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接 地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个 10K 的 电位器调整对比度。 第 4 脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择 指令寄存器。 第 5 脚:RW 为读写信号线,高电平时进行读操
35、作,低电平时进行写操 作。当 RS 和 RW 共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 RW 为高电平时可以读忙信号,当 RS 为高电平 RW 为低电平时可以写入数据。 第 6 脚:E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执 行命令。 第 714 脚:D0D7 为 8 位双向数据线。 第 15 脚:BLA 背光电源正极(+5V)输入引脚。 第 16 脚:BLK 背光电源负极,接 GND。 TC1602 液晶模块内带标准字库,内部的字符发生存储器(CGROM)已经存储了 192 个 57 点阵字符,32 个 510 点阵字符。另外还有字符生成 RAM(CGRA
36、M)512 字节,供用户自定义字符。 1602 液晶模块内部的控制器共有 11 条控制指令。它的读写操作、屏幕和光 标的操作都是通过指令编程来实现的。 指令 1:清显示,指令码 01H,光标复位到地址 00H 位置 指令 2:光标复位,光标返回到地址 00H 指令 3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左 移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效 指令 4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示, 低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光 标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁
37、 指令 5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光 标 指令 6:功能设置命令 DL:高电平时为 4 位总线,低电平时为 8 位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示 5x7 的点阵字符, 高电平时显示 5x10 的点阵字符 指令 7:字符发生器 RAM 地址设置 指令 8:DDRAM 地址设置 指令 9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块 不能接收命令或者数据,如果为低电平表示不忙。 指令 10:写数据 指令 11:读数据 下面是 TC1602 液晶模块的一些主要技术参数: 1、逻辑工作电压(VDD):+4.5 +
38、5.5V 2、LCD 驱动电压(VDD - VL):+4.5 +13.0V 3、工作温度(Ta): 0 60C(常温)/-20 75 C(宽温) 4、工作电流: 0; i-) DS1302_IO = ACC0; /相当于汇编中的 RRC DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC 1; unsigned char DS1302OutputByte(void) /实时时钟读取一字节(内部函数) unsigned char i; for(i=8; i0; i-) ACC = ACC 1; /相当于汇编中的 RRC ACC7 = DS1302_IO; DS13
39、02_CLK = 1; DS1302_CLK = 0; return(ACC); void Write1302(unsigned char ucAddr, unsigned char ucDa) DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr); / 地址, 命令 DS1302InputByte(ucDa); / 写 1Byte 数据 DS1302_CLK = 1; DS1302_RST = 0; unsigned char Read1302(unsigned char ucAddr)/读取 DS13
40、02 某地址的数据 unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr|0 x01);/ 地址,命令 ucData = DS1302OutputByte(); / 读 1Byte 数据 DS1302_CLK = 1; DS1302_RST = 0; return(ucData); void DS1302_GetTime(SYSTEMTIME *Time) /获取时钟芯片的时钟数据 unsigned char ReadValue; ReadValue = Read
41、1302(DS1302_SECOND); Time-Second = (ReadValue ReadValue = Read1302(DS1302_MINUTE); Time-Minute = (ReadValue ReadValue = Read1302(DS1302_HOUR); Time-Hour = (ReadValue ReadValue = Read1302(DS1302_DAY); Time-Day = (ReadValue ReadValue = Read1302(DS1302_WEEK); Time-Week = (ReadValue ReadValue = Read1302
42、(DS1302_MONTH); Time-Month = (ReadValue ReadValue = Read1302(DS1302_YEAR); Time-Year = (ReadValue void DateToStr(SYSTEMTIME *Time) /将时间年,月,日,星期数据转换成液晶 显示字符串,放到数组里 DateString if(hide_year2) /这里的 if,else 语句都是判断位闪烁,2 就不显示,输出字符串为 2007/07/22 Time-DateString0 = 2; Time-DateString1 = 0; Time-DateString2 =
43、Time- Year/10 + 0; Time-DateString3 = Time- Year%10 + 0; else Time-DateString0 = ; Time-DateString1 = ; Time-DateString2 = ; Time-DateString3 = ; Time-DateString4 = /; if(hide_monthDateString5 = Time- Month/10 + 0; Time-DateString6 = Time- Month%10 + 0; else Time-DateString5 = ; Time-DateString6 = ;
44、 Time-DateString7 = /; if(hide_dayDateString8 = Time- Day/10 + 0; Time-DateString9 = Time- Day%10 + 0; else Time-DateString8 = ; Time-DateString9 = ; if(hide_weekWeek%10 + 0; /星期的数据另外放 到 week_value数组里,跟年,月,日的分 开存放,因为等一下要在最后显示 else week_value0 = ; week_value1 = 0; Time-DateString10 = 0; /字符 串末尾加 0 ,判
45、断结束字符 void TimeToStr(SYSTEMTIME *Time) /将时,分,秒数据转换成液晶显示字符 if(hide_hourTimeString0 = Time- Hour/10 + 0; Time-TimeString1 = Time- Hour%10 + 0; else Time-TimeString0 = ; Time-TimeString1 = ; Time-TimeString2 = :; if(hide_minTimeString3 = Time- Minute/10 + 0; Time-TimeString4 = Time- Minute%10 + 0; else
46、 Time-TimeString3 = ; Time-TimeString4 = ; Time-TimeString5 = :; if(hide_secTimeString6 = Time- Second/10 + 0; Time-TimeString7 = Time- Second%10 + 0; else Time-TimeString6 = ; Time-TimeString7 = ; Time-DateString8 = 0; void Initial_DS1302(void) /时钟芯片 初始化 unsigned char Second=Read1302(DS1302_SECOND)
47、; if(Second /写入允许 Write1302(0 x8c,0 x07);/写入初始化 值 07/07/25.星期:3.时间: 23:59:55 Write1302(0 x88,0 x07); Write1302(0 x86,0 x25); Write1302(0 x8a,0 x07); Write1302(0 x84,0 x23); Write1302(0 x82,0 x59); Write1302(0 x80,0 x55); Write1302(0 x8e,0 x80); /禁止写入 /*ds18b20 子程序 */ /*ds18b20 延迟子函数(晶振 12MHz )*/ voi
48、d delay_18B20(unsigned int i) while(i-); /*ds18b20 初始化函数 */ void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ 复位 delay_18B20(8); /稍做延时 DQ = 0; /单片机将 DQ 拉低 delay_18B20(80); /精确延时 大于 480us DQ = 1; /拉高总线 delay_18B20(14); x=DQ; /稍做延时后 如果 x=0 则初始化成功 x=1 则初始化 失败 delay_18B20(20); /*ds18b20 读一个字节 */ un
49、signed char ReadOneChar(void) uchar i=0; uchar dat = 0; for (i=8;i0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0 x80; delay_18B20(4); return(dat); /*ds18b20 写一个字节 */ void WriteOneChar(uchar dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat delay_18B20(5); DQ = 1; dat=1; /*读取 ds1
50、8b20 当前温度 */ void ReadTemp(void) unsigned char a=0; unsigned char b=0; unsigned char t=0; Init_DS18B20(); WriteOneChar(0 xCC); / 跳 过读序号列号的操作 WriteOneChar(0 x44); / 启动温 度转换 delay_18B20(100); / this message is wery important Init_DS18B20(); WriteOneChar(0 xCC); /跳过读序 号列号的操作 WriteOneChar(0 xBE); /读取温度
51、寄存器两个就是温度 delay_18B20(100); a=ReadOneChar(); /读取温度 值低位 b=ReadOneChar(); /读取 温度值高位 temp_value=b4; void temp_to_str() /温度数据转换成 液晶字符显示 TempBuffer0=temp_value/10+0; /十位 TempBuffer1=temp_value%10+0; /个位 TempBuffer2=0 xdf; /温度符号 TempBuffer3=C; TempBuffer4=0; void Delay1ms(unsigned int count) unsigned int
52、i,j; for(i=0;icount;i+) for(j=0;j0;delay-) for(i=0;i0 x59) /超过 59 秒, 清零 temp=0; break; case 2: temp=Read1302(DS1302_MINUTE);/读 取分数 temp=temp+1; /分数加 1 up_flag=1; if(temp0 x59) /超过 59 分, 清零 temp=0; break; case 3: temp=Read1302(DS1302_HOUR);/读取 小时数 temp=temp+1; /小时数加 1 up_flag=1; if(temp0 x23) /超过 23 小时,清零 temp=0; break; case 4: temp=Read1302(DS1302_WEEK);/读取 星期数 temp=temp+1; /星期数加 1 up_flag=1; if(temp0 x7) temp=1; break; case 5: temp=Read1302(DS1302_DAY); /读 取日数 temp=temp+1; /日数加 1 up_flag=1; if(temp0 x31) temp=1; break; case 6: temp=Read1302(DS1302_MONTH);/读 取月数 temp=t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省枣庄市2026届高三5月模拟考试生物学试题(含答案)
- 部编版二年级语文口语表达计划
- 2026年幼儿园语言讲述活动类
- 2026年我上幼儿园班本
- 2026年幼儿园祖国妈妈过生日
- 2026年幼儿园认识蔬菜和水果
- 湖南省芷江县岩桥中学2026届中考语文押题卷含解析
- 2026届南京市联合体重点中学中考二模历史试题含解析
- 2026届湖北省竹溪县市级名校中考英语最后一模试卷含答案
- 2026届湖北省孝感市汉川市中考语文全真模拟试题含解析
- 智能制造产业园项目可行性研究报告(仅供参考)
- 危险化学品装卸车要求
- 2024-2025学年人教版(2024)七年级英语下册Unit 5 Here and now Section A 1a ~ pronunciation 教案
- 2025年中央纪委国家监委驻中国国家铁路集团有限公司招聘笔试参考题库附带答案详解
- 《公路波纹钢结构涵洞标准图集》(征求意见稿)
- 企业并购的机遇与挑战分析
- 射线检测专业知识考试题库(含答案)
- 2024年全国统一高考数学试卷(理科)甲卷含答案
- 湖北省襄阳市2023-2024学年小升初语文试卷(含答案)
- 黑龙江省建筑工程施工质量验收标准(建筑地面工程)
- 第八课 良师相伴 亦师亦友
评论
0/150
提交评论