下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录1 课题背景1.1 系统设计1.2 总体方框图2 设计方案简述2.2DS18B20数字温度传感器2.2.1 DS18B20的性能特点错误!未定义书签。.2 .2DS18B20的管脚分布223 DS18B20的内部结构和工作方式2.3 AT89C52 单片机2.41602型 LCD2.4.1 1602型LCD的特性2.4.2 1602型 LCD 的操作控制2.5 DS1302 模块分析2.6 zigbee无线发送模块3.1 温度采集模块3.2 单片机控制系统3.3 温度和时间显示模块3.4软件设计3.4.1 DS18B20的温度采集程序3.5 系统主程序4 设计结果及分析4.1 测试环境及工
2、具4.2 测试方法和测试结果5 总结附录一 系统总电路图附录二 实验结果测试图附录三 系统源代码摘要本次单片机课程设计本人设计了智能数字温度计,其功能主要有,可以测试温度, 精确到小数点后三位;其次还附加了时钟功能,其可以显示秒到年的具体时间;并且本 人还利用了 zigbee无线传输模块,将采集到的温度值无线发送到电脑上。具体设计 在下面详细分析。关键词:温度计;ds18b20, zigbee模块,ds1302,89c521课题背景1.1系统设计本课程设计的任务是设计一个数字温度计。由于在生产生活中都有很多领域需要测量温度,所以温度计的好坏即测量灵敏度,测温范围,稳定度以及实用性和适用性就显
3、得尤为重要。传统温度计通常利用固体、液体、气体受温度的影响而热胀冷缩等的现象 为设计的依据,因此这种方法无论从设计原理还是视觉读数都有很大的误差。本次课程 设计以DS18B20作为数字温度传感器,其具有线性优良、性能稳定、灵敏度高、抗干 扰能力强、使用方便等优点,可以大大提高测量温度的精度,并且该设计还具备了无线 传输功能,采集到的温度可实时地传送到电脑,有利于对温度设备的远程监控,和远程 控制,这是未来智能设备(包括智能家居)的发展方向。001.2总体方框图2 设计方案简述2.1 数字温度计设计方案论证 由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被 测温度变化的电
4、压或电流采集过来, 进行 A/D 转换后,就可以用单片机进行数据的处理, 在显示电路上,就可以将被测温度显示出来,这种设计需要用到 A/D 转换电路,其中还涉 及到电阻与温度的对应值的计算,感温电路比较麻烦。而且在对采集的信号进行放大时容易 受温度的影响出现较大的偏差。2.1.2 方案二进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是 非常容易想到的,所以可以采用一只温度传感器 DS18B20此传感器,可以很容易直接 读取被测温度值,进行转换,电路简单,精度高,软硬件都以实现,而且使用单片机的接口 便于系统的再扩展,满足设计要求。从以上两种方案, 很容易看出, 采用方案
5、二, 电路比较简单, 费用较低, 可靠性高, 软件设计也比较简单,故采用了方案二。2.2 DS18B20 数字温度传感器DS18B20温度传感器是美国DALLAS半导体公司生产的DS18B20型单线智能温度 传感器 ,属于新一代适配微处理器的智能温度传感器 ,与传统的热敏电阻等测温元件相 比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现 9-12 位的数字 值读数方式。可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和 大型设备中。它具有体积小,接口方便,传输距离远等特点。2.2.1 DS18B20 的性能特点DS18B20从功能和技术的角度来说有以下性能特点:采用
6、单总线专用技术,既可通过串行口线,也可通过其它 I/O 口线与微机接口,无 须经过其它变换电路,直接输出被测温度值( 9 位二进制数,含符号位)测温范围为-55C至+125T,测量分辨率最小为0.0625C内含 64 位经过激光修正的只读存储器 ROMDS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只 三极管的集成电路内适配各种单片机或系统机测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力用户可分别设定各路温度的上、下限适应电压范围宽,3.05.5V,在寄生电源方式下可由数据线供电222 DS18B20的
7、管脚分布独特的一线接口,只需要一条口线通信 多点能力,简化了分布式温度传感应用 无 需外部元件 可用数据总线供电,电压范围为 3.0 V至5.5 V无需备用电源 测量温度范 围为-55T至+125C,华氏相当于是-10 T至+85 T范围内精度为土 0.5 T。其引脚排列见图2和表1。12 3图2 DS18B20的管脚分布图表1 DS18B20的管脚分布说明2.3.3 DS18B20的内部结构和工作方式序号名称引脚功能描述1Vcc可选择的Vcc引脚。当工作于寄生电 源时,此引脚必须接地。2DQ数据输入/输出引脚。开漏单总线接 口引脚。当被用着在寄生电源下,也 可以向器件提供电源。3GND地信号
8、。DS1820主要包括寄生电源、温度传感器、64位激光ROM单线接口、存放中间数据的高速暂存器(内含便笺式RAM ), 用于存储用户设定的温度上下限值的 TH和TL触发器存储与控制逻辑、8位循环冗余 校验码(CRC)发生器等七部分内部,其内部结构框图如图3所示。6图始8位是产品CR-<一 一 _ 一 二64位ROM的结构幵 有48位,最后恳位是前面56RO的 件写入户报警产T3 DS篇益部结储器与控制类型的编号T接着是每个器件的惟一的序号,共 C检验码。漏度扌报警触发器存储器与控制号,祁限。DS18B20温度传感器,此时温度传和器L,可通过软是采用电源供 种疋寄B20可以采用两种方式供电
9、,一种 玄2脚作为信号线,3脚接电源。另一器与单片机的接口电路 速518寸DS18B20的1脚接地缓十单再鳥小"弋,为保证在有种 低温触发8B20L时钟周期生电源供車方式,单片机端口接单线总线个编OSFET管来完器件中 减法计匸成对总纟内提供足够的电流,可用勺测温原理是这这样的很小,用于产生固定频率的振荡频率明显(改变,所产门,当计数门打开时,DS18B20就对低成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55r所对应的一个基数分别置入减法计数器 1、温度寄存器中,计数器1和温度寄存器被预 置在-55 r所对应的一个基数值。减法计数器 1对低温度系数晶振
10、产生的脉冲信号进行 减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1IIIDS18B20 白勺脉冲信号送给生的信号作为减法计数戋的上拉。本实验采用第一种 低温度系:数晶振的勺振荡频寄存|温度的影响数器 器 2 的温度系数振荡器产生的时钟脉冲进行计数进而完1;高温度系数晶振随温度变化其的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计 数,如此循环直到减法计数器计数到 0时,停止温度寄存器的累加,此时温度寄存器中 的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍关闭就 重复上述过程,直到温度寄存器值大致等于被测温度值。由
11、于DS18B20的单线通讯功能是分时完成的,它有严格的时隙概念,因此读写时 序很重要。系统对DS18B20的各种操作按协议进行,操作协议为:初始化 DS18B20发 复位脉冲写ROM功能指令发存储器操作命令处理数据。DS18B20有六条控制命 令如表2所示:指令约定代码操作说明温度转换44H启动DS18B20S行温度转换读暂存器BEH读暂存器9个字节内容写暂存器P 4EH将数据写入暂存器的TH TL字节复制暂存器48H把暂存器的TH TL字节写到WRAM中重新调UramB8H把E2RAM中的TH TL字节写到暂存器 TH TL字节1读电源供电方式B4H启动DS18B2C发送电源供电方式的信号给
12、主 CPU表2 DS18B20的控制指令2.3 AT89C52AT89C52是此次课程设计的核心部分。其管脚图如下:AT89C521 脚图AT89C52是低功耗、高性能的CMOS位单片机。片内带有8KB的Flash存储器,且 允许在系统内改写或用编程器编程。另外,AT89C52的指令系统和引脚与80C52完全兼 容。AT89C52各管脚功能如下:VCC供电电压;GND接地;P0 口: P0 口为一个8位漏级开路双向I/O 口,每脚 可吸收8TTL门电流。;P1 口: P1 口是一个内部提供上拉电阻的 8位双向I/O 口,P1 口缓冲器能接收输出4TTL门电流;P2 口: P2 口为一个内部上拉
13、电阻的8位双向I/O 口, P2 口缓冲器可接收,输出4个TTL门电流,当P2 口被写“ T时,其管脚被内部上拉电 阻拉高,且作为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流;P3口: P3 口管脚是8个带内部上拉电阻的双向I/O 口,可接收输出4个TTL门电流。当 P3 口写入“ T后,它们被内部上拉为高电平,并用作输入;P3 口管脚功能:P3.0是RXD(串行输入口); P3.1是TXD(串行输出口); P3.2是/INT0 (外部中断0); P3.3 是/INT1 (外部中断1); P3.4是T0(记时器0外部输入);P3.5是T1 (记时器1外部 输入);P3.6是/W
14、R(外部数据存储器写选通);P3.7是/RD(外部数据存储器读选通); P3 口同时为闪烁编程和编程校验接收一些控制信号。RST复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG当访问外部存储器时,地 址锁存允许输出电平用于锁存地址的地位字节。/PSEN外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次 /PSEN有效。但在访问外部数据存储 器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间 外部程序存储器(0000H-FFFFH,不管是否有内部程序存储器。XTAL1反向振荡放大 器的输入及内部时钟
15、工作电路的输入。XTAL2来自反向振荡器的输出。2.4 1602 型 LCD本温度计的读数的显示是通过1602型LCD实现的,其具有微功耗、体积小、显示 内容丰富、超薄轻巧的特点,常用在袖珍式仪表和低功耗应用系统中。2.4.1 1602 型 LCD 的特性1602 型 LCD 归纳起来有以下 6 大特点:+5V 电压,对比度可调内含复位电路 提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能 有 80 字节显示数据存储器 DDRAM 内建有192个5X7点阵的字型的字符发生器 CGROM8 个可由用户自定义的 5X7 的字符发生器 CGRAM2.4.2 1602 型 LCD 的
16、操作控制1602液晶模块内部的字符发生存储器(CGROM)已经存储了 160个不同的点阵字符 图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每 一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H), 显示时模块把地址 41H 中的点阵字符图形显示出来,我们就能看到字母“ A”。因为 1602识别的是 ASCII 码,试验可以用 ASCII 码直接赋值,在单片机编程中还 可以用字符型常量或变量赋值, 如'A'。以下是1602的16进制ASCII码表地址:读的时 候,先读左边那列,再读上面那行,如:感叹号 '!
17、'的ASCII为0x21,字母B的ASCII 为 0x42。附加功能模块2.5 DS1302 模块分析DS1302的RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据 传送。当RST为高电平时,所有的数据传送被初始化,允许对 DS1302进行操作。如果 在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。其管脚图如下:DS1302 管脚图各引脚功能:Vcc1为后备电源,VCC2为主电源,X1和X2是振荡源,SCLK为输入端RST 输入有两种功能:首先, RST 接通控制逻辑,允许地址 /命令序列送入移位寄 存 器 ; 其 次 , RST 提 供 终
18、 止 单 字 节 或 多 字 节 数 据 的 传 送 手GXDGND13女电池c?rcuOgnd“|LC5atA3*P26P28-1302GXDDs1302部分电路图2.6 zigbee无线发送模块Zigbee是基于,ZigBee节点所属类别主要分三种, 分别是协调器(Coodinator)、路 由器(Router)、终端(End Device)。统一网络中至少需要一个协调器,也只能有1个协调器,负责各个节点16位地址分配(自动分配)。理论上可以连上65536个节点,可以实行 多方组网。3详细设计3.1温度采集模块温度采集模块的核心即是温度传感器 DS18B20,其接线方法和引脚排列已在上文详
19、 述。因此可以设计出图5所示温度采集模块电路图。图5温度采集模块本次设计所采用的温度传感器为 Dallas半导体公司的数字化温度传感器,它是世界 上第一片支持 一线总线”接口的温度传感器。一线器件”体积更小、适用电压更宽、更经济。并且分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DSI8B20数字温度计提供9位(二进制)温度读数,指示器件的温度信息经过单线接 口送入 DSl8B20或从DSl8B20送出,因此从主机 CPU至U DSI8B20仅需一条线,当 DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速
20、暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625C/LSB形式表示。当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S= 1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数 值。3.2单片机控制系统单片机控制系统的电路图如图 6所示,这样便实现了对 DS18B20的信息采集、反 馈以及对LCD的控制。图6单片机控制模块3.3温度和时间显示模块温度显示和时间显示都主要是通过 1602型LCD实现,1602型LCD采用标准的16 脚接口,其中:第1脚:VSS为电源地第2脚:VDD接5V电源
21、正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对 比度最高(对比度过高时会 产生 鬼影”使用时可以通过一个10K的电位器调整对比 度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄 存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端。第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。显示电路是使用的LCD1602液晶显示,这种显示最大的优点就是使用字符型显示, 可以显示两行,第一行显示日期与当前时间,第二行显示
22、当前温度,当DS18B20出现显示错误时第二行温度不显示会出现错误提示,此款液晶功耗低,操作方便,显示相当 清晰。图7显示模块电路图3.4软件设计本章从设计思路、软件系统框图出发,先介绍整体的思路后,再逐一分析各模块程 序算法的实现,最终编写出满足任务需求的程序。3.4.1 DS18B20的温度采集程序DS18B20器件要求采用严格的通信协议,以保证数据的完整性。该协议定义了几种信号 类型:复位脉冲,应答脉冲时隙;写 0,写1时隙;读0,读1时隙。与DS18B20的通 信,是通过操作时隙完成单总线上的数据传输。发送所有的命令和数据时,都是字节的 低位在前,高位在后。该模块的系统流程1r初始化r
23、温度转换命令1F读18B20温度F存储1T返回开始3图8温度采集模块的系统流程图计算温度子程序厂,计算温度子程序将RAM中读取值进行 开始码的转换运算,并进行温度值正负的判 定,其程序流程图下图所示DS18B20的初始1先将数据线置高电平“1。0N温度零下?2. 延时(该时间要求的不是很严格,但是尽可能的短一点)3. 数据线拉到低一“0。4. 延时750微秒(该时间的时度值取可以码置标志960微秒)。5数据线拉到高电平,6.延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由所返回的低电平 “1。置“+”标志DS18B200”据该状态可以来确定它的存在,但是应注意不能无限的进行 等待,
24、不然会使程序进入死循环计算以要进行度寸BCD)值7. 若CPU读到了数据线上的低电平“0后,还要做延时,其延时的时间从发出的高电平算起(第 5步的时间算起)最少要8. 将数据线再次拉高到高电平“1后结束。计算整数位温度BCD值480微秒。开始3.5系统主程序首先要根据系统的总体功能和键盘设置选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。采用C语言编写代码,鉴于篇幅限制及DS18B20的应用已经规范和成熟,本文仅 就主程序流程图和显示子程序流程图及其代码进行说明。主程序流程图主程序通过调用温度采集子程序完成温度数据采集,然后调用温度转换子程序转
25、换读取温度数据,调用 显示子程序进行温度显示和判断温度数据。下面给出流程图Zigbee模块将温度发送给电脑4设计结果及分析4.1测试环境及工具测试温度:20-50摄氏度。(模拟不同温度值环境)测试仪器及软件:数字万用表,标准温度计20-100摄氏度4.2测试方法和测试结果使电路运行,观察系统硬件检测是否正常。系统自带测试表格数据,观察显示数据 是否相符合即可。采用温度传感器和温度计同时测量水温变化情况,目测显示电路是否正常。并记录 温度值,与实际温度值比较,得出系统的温度指标。得到下表结果标准温度C)测试温度(C)误差(C)20.2120.250.0425.1025.32-0.2235.023
26、5.200.18亍39.9739.960.0145.0044.850.1550.0049.890.11平均误差C) :0.1001表3温度测试结果由此可知该数字温度计的误差在 1%左右。5总结和心得经过一个星期的设计和制作,本人制作的多功能温度计也已完成,挺有收获的。之 前虽然运用过52单片机,但多模块功能混合实现还是第一次,本人首先设计了硬件电 路,最后写程序实现了软件的设计。在调试过程中也发现和解决了好些问题。经过此次课程设计,我真正体会到要理论联系实际,把我们所学的理论知识用到 实际当中,通过多动手去提高自己的技能,光靠理论不动手是提高不了的。还有,程序 一定要多看多模仿着写才有提高。总
27、之,此次课程设计不仅巩固了单片机方面的理论知 识,同时也提高的自己的动手能力、分析问题和解决问题的能力。参考文献1 张琳娜,刘武发传感检测技术及应用中国计量出版社,19992 马忠梅籍顺心张凯马岩.单片机的C语言应用程序设计-修订版.北京航空航天 大学出版社,1998.103 胡汉才.单片机原理及接口技术.清华大学出版社,19964 阎石.数字电子技术基础.北京航空航天大学出版社,2006. 黄河.基于DS18B20的单总线数字温度计.国防工业出版社,20026 彭泓.汪玉凤.粮仓温湿度智能控制系统J.中国科技信息,20067 童诗白,华程英.模拟电子技术基础(第四版)M.北京:高等教育出版社
28、,2009.附录一系统总电路图图附一系统总电路图附录二实验结果测试图1. 时钟显示2. 温度显示3温度通过无线模块发送到电脑附录三系统源代码1主函数部分#in clude<reg52.h>#i nclude "stdio.h"#i nclude "ds1302.h"#include "18b20.h"#include "delay.h"#include "1602.h"#define overtemp 50sbit P20=P2P;定义锁存使能端口段锁存sbit P2仁P2X;/位锁
29、存sbit P35 = P3A5;/这是为了关闭开发板上的点阵实际应用去掉 sbit S17=P0A4;/ 独立按键sbit S18=P0A5;sbit S19=P0A6;sbit S20=P0A7;sbit feng=P2A0;bit ReadTimeFlag;/ 定义读时间标志bit SetFlag;/更新时间标志位unsigned char time_buf216; unsigned int ReadTemperature(void);unsigned char KeyScan(void);void Init_Timer0(void);/ 定时器初始化 void UART_Init(vo
30、id);/*主函数*/void main (void)unsigned char i,a=1,num,b=0,c=0;int temp1;定义显示区域临时存储数组/初始化液晶/延时有助于稳定/清屏/定时器 0 初始化/ds1302 初始化/串口初始化/首次读取时间unsigned char temp16;/ 定义显示区域临时存储数组 float temperature;char displaytemp16;/CD_Init();DelayMs(20);LCD_Clear();Init_Timer0();Ds1302_Init();UART_Init();写入一个初始值Ds1302_Read_T
31、ime();if(time_buf12+time_buf17)=0) / 如果所有参数都为 0, Ds1302_Write_Time();while (1)/主循环 num=KeyScan();switch(num)case 1:a+;if(a=3)a=1;break; / 选择显示case 2:b+;if(b=7)b=0;break;/b 为 1, 2,3,4,5,6,时分别对 分时日周月年加调 case 3:c+;if(c=7)c=0;break;/b 为 1, 2,3,4,5,6,时分别对 分时日周月年/case 4:/ break; / 分减 1default:break;if(num
32、=4)if(c=0)switch(b)case 2:time_buf14+;if(time_buf14=24)time_buf14=0;Ds1302_Write_Time();break; / 正常时间 小时加 1 case 1:time_buf15+;if(time_buf15=60)time_buf15=0;Ds1302_Write_Time();break;/ 分加 1case 3:time_buf13+;if(time_buf13=32)time_buf13=1;Ds1302_Write_Time();break; / 日 加 1case 4:time_buf17+;if(time_b
33、uf17=8)time_buf17=1;Ds1302_Write_Time();break; / 周加 1case 5:time_buf12+;if(time_buf12=13)time_buf12=1;Ds1302_Write_Time();break; / 月加case 6:time_buf11+;if(time_buf11=100)time_buf11=12;Ds1302_Write_Time();break; / 年加default:break;if(b=0)switch(c)case 2:time_buf14-;if(time_buf14=255)time_buf14=23;Ds13
34、02_Write_Time();break; / 小时减 1case 1:time_buf15-;if(time_buf15=255)time_buf15=59;Ds1302_Write_Time();break;/ 分减 1case 3:time_buf13-;if(time_buf13=255)time_buf13=31;Ds1302_Write_Time();break; / 日减 1case 4:time_buf17-;if(time_buf17=255)time_buf17=7; Ds1302_Write_Time();break; /zhoucase 5:time_buf12-;i
35、f(time_buf12=255)time_buf12=12;Ds1302_Write_Time();break; /yue jian 1 case 6:time_buf11-;Ds1302_Write_Time();break; /nian jiandefault:break;if(SetFlag) / 如果接收到串口信息则更新时钟for(i=0;i<8;i+)time_buf1i=time_buf22*i*10+time_buf22*i+1;/ 数据整合,如 2 个数 1 和 5 整合成 15Ds1302_Write_Time();/ 接收更新的时间然后写入 ds1302SetFla
36、g=0; /时钟信息更新后标志位清零if(ReadTimeFlag=1) / 定时读取 ds1302 定时时间到 则标志位置 1,处理过时间参数标志位清零 ReadTimeFlag=0; /标志位清零if(a=1) LCD_Clear();/ 清屏LCD_Write_Char(13,1,0x01);/ 写入温度右上角点 LCD_Write_Char(14,1,'C'); / 写入字符 C/ ReadTempFlag=0;temp1=ReadTemperature()if (a=2)LCD_Clear();/ 清屏Ds1302_Read_Time();/ 读取时间参数 if(in
37、t)time_buf15=0)feng=0; elsefeng=1;sprintf(temp,"DATE %02d-%02d-%02d %d",(int)time_buf11,(int)time_buf12,(int)time_buf13,(int)tim e_buf17);/ 年月日周LCD_Write_String(0,0,temp);/ 显示第一行sprintf(temp,"TIME %02d:%02d:%02d",(int)time_buf14,(int)time_buf15,(int)time_buf16);/ 时分秒 LCD_Write_St
38、ring(0,1,temp);/ 显示第二行2.ds1302 驱动部分#include "ds1302.h"unsigned char time_buf18 = 20,12,12,10,16,55,00,6;/ 空年月日时分秒周 unsigned char time_buf8 ;/空年月日时分秒周/*向 DS1302 写入一字节数据 */ void Ds1302_Write_Byte(unsigned char addr, unsigned char d) unsigned char i;RST_SET;/写入目标地址: addraddr = addr & 0xFE
39、;/最低位置零for (i = 0; i < 8; i +)if (addr & 0x01)IO_SET;else IO_CLR;SCK_SET;SCK_CLR;addr = addr >> 1;/写入数据: dfor (i = 0; i < 8; i +) if (d & 0x01) IO_SET;else IO_CLR;SCK_SET;SCK_CLR; d = d >> 1;/停止 DS1302 总线RST_CLR;/*从 DS1302 读出一字节数据 */ unsigned char Ds1302_Read_Byte(unsigned
40、char addr) unsigned char i; unsigned char temp; RST_SET;/写入目标地址: addr addr = addr | 0x01;/ 最低位置高 for (i = 0; i < 8; i +)if (addr & 0x01) IO_SET; else IO_CLR;SCK_SET;SCK_CLR;addr = addr >> 1; /输出数据: temp for (i = 0; i < 8; i +)temp = temp >> 1;if (IO_R) temp |= 0x80;else temp &a
41、mp;= 0x7F;SCK_SET;SCK_CLR;RST_CLR; /停止 DS1302 总线 return temp;/*向 DS1302 写入时钟数据 */ void Ds1302_Write_Time(void) unsigned char i,tmp;for(i=0;i<8;i+) /BCD 处理 tmp=time_buf1i/10; time_bufi=time_buf1i%10; time_bufi=time_bufi+tmp*16; Ds1302_Write_Byte(ds1302_control_add,0x00);/ 关闭写保护Ds1302_Write_Byte(ds
42、1302_sec_add,0x80);/暂停/Ds1302_Write_Byte(ds1302_charger_add,0xa9);/涓流充电Ds1302_Write_Byte(ds1302_year_add,time_buf1);/ 年Ds1302_Write_Byte(ds1302_month_add,time_buf2);/ 月Ds1302_Write_Byte(ds1302_date_add,time_buf3);/ 日Ds1302_Write_Byte(ds1302_day_add,time_buf7);/ 周Ds1302_Write_Byte(ds1302_hr_add,time_
43、buf4);/ 时Ds1302_Write_Byte(ds1302_min_add,time_buf5);/ 分Ds1302_Write_Byte(ds1302_sec_add,time_buf6);/ 秒Ds1302_Write_Byte(ds1302_day_add,time_buf7);/ 周Ds1302_Write_Byte(ds1302_control_add,0x80);/ 打开写保护/*从 DS1302 读出时钟数据 */ void Ds1302_Read_Time(void) unsigned char i,tmp; time_buf1=Ds1302_Read_Byte(ds1
44、302_year_add);/ 年time_buf2=Ds1302_Read_Byte(ds1302_month_add);/月time_buf3=Ds1302_Read_Byte(ds1302_date_add);/ 日time_buf4=Ds1302_Read_Byte(ds1302_hr_add);/ 时time_buf5=Ds1302_Read_Byte(ds1302_min_add);/ 分time_buf6=(Ds1302_Read_Byte(ds1302_sec_add)&0x7F;/ 秒 time_buf7=Ds1302_Read_Byte(ds1302_day_add
45、);/ 周for(i=0;i<8;i+) /BCD 处理tmp=time_bufi/16;time_buf1i=time_bufi%16; time_buf1i=time_buf1i+tmp*10;/*DS1302 初始化*/void Ds1302_Init(void)RST_CLR;/RST 脚置低SCK_CLR;/SCK 脚置低Ds1302_Write_Byte(ds1302_sec_add,0x00); 3.1602 驱动部分#include "1602.h"#include "delay.h"sbit RS = P2A3;/ 定义端口sbi
46、t RW =卩2人2;sbit EN = P2A1;#define RS_CLR RS=0#define RS_SET RS=1#define RW_CLR RW=0#define RW_SET RW=1#define EN_CLR EN=0#define EN_SET EN=1#define DataPort P1/*判忙函数*/bit LCD_Check_Busy(void)DataPort= 0xFF;RS_CLR;RW_SET;EN_CLR;_nop_();EN_SET;return (bit)(DataPort & 0x80);/*写入命令函数*/ void LCD_Writ
47、e_Com(unsigned char com) while(LCD_Check_Busy(); / 忙则等待RS_CLR;RW_CLR;EN_SET;DataPort= com;_nop_();EN_CLR;/*写入数据函数*/void LCD_Write_Data(unsigned char Data)while(LCD_Check_Busy(); / 忙则等待RS_SET;RW_CLR;EN_SET;DataPort= Data;_nop_();EN_CLR;/*清屏函数*/void LCD_Clear(void)LCD_Write_Com(0x01);DelayMs(5);/*写入字符
48、串函数*/void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) if (y = 0)LCD_Write_Com(0x80 + x);/表示第一行elseLCD_Write_Com(0xC0 + x);/表示第二行while (*s)LCD_Write_Data( *s);s +;/*写入字符函数*/void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) if (y = 0)LCD_Write_Com(0x80 + x);elseLCD_Write_Com(0xC0 + x);LCD_Write_Data( Data);/*初始化函数*/void LCD_In
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 车辆贷款协议书(20篇)
- 医患关系中“患”的内涵
- 中班科学领域认识蔬菜说
- 供电所运维试题及答案
- 学校学生宿舍安全卫生规范化管理方案
- 2025年临床执业医师《内科学》冲刺题
- 冶金企业安全生产法律法规岗前培训试题及答案
- 医疗机构突发公共卫生事件应急条例培训试题及答案
- 医疗机构医疗卫生人员职业道德培训试题及答案
- 医疗设备报废处置管理制度
- 2026瑞木镍钴管理(中冶)有限公司校园招聘笔试模拟试题及答案解析
- 2025南京特殊教育师范学院单招《英语》题库检测试题打印附参考答案详解(典型题)
- 骨科电钻的清洗流程
- 牙科蜡型制作培训课件
- 河南省2025年中考真题化学试卷(含答案)
- DB45∕T 2364-2021 公路路基监测技术规范
- CD30阳性弥漫大B细胞淋巴瘤
- 航空热处理标准
- 2025年公务员考试行测逻辑推理试题库及答案(共200题)
- 职业演变与人才观念
- 《阳光成长-心理健康导航》中职生心理健康全套教学课件
评论
0/150
提交评论