




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科生毕业论文(设计)打印专用纸基于AT89S51单片机的电子时钟(带温度显示)设计摘要:本设计以数字集成电路技术为基础,单片机技术为核心。软件设计采用模块化结构,C语言编程。系统通过LCD显示数据,可以显示日期(年、月、日、时、分、秒)以及温度。在内容安排上首先描述系统硬件工作原理,着重介绍了各硬件接口技术和各个接口模块的功能;其次,详细的阐述了程序的各个模块和实现过程。关键词:单片机;电子时钟;温度传感器;DS1302;DS18B20;LCD1602基于AT89S51单片机的电子时钟(带温度显示)设计摘要11 设计要求22 方案论证与设计22.1 用可编程逻辑器件设计22.1.1控制器部分32.2 显示部分的方案选择32.3 系统设计32.3.1 晶体振荡器电路.32.3.2 分频器电路.32.3.3 时间计数器电路.32.3.4 时钟电路.42.3.5 复位电路 . 42.3.6复位电路的可靠性设计.42.3.7 按键部分.53.3.9 根据各模块的功能互相连接成电子时钟的控制电路53各硬件介绍63.1 AT89S51的引脚说明73.2 发光二极管指示电路设计83.3 LCM1602简介9 3.5 DS1302 简介104 系统硬件设计所需的器材.115 系统软件总体设计116 主程序流程图147 安装制作 .148 调试与检测安全 .149结束语15前言 电子时钟是实现对年,月,日,时,分,秒数字显示的计时装置,广泛用于个人家庭,车站, 码头,办公室,银行大厅等场所,成为人们日常生活中的必需品。数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。钟表的数字化给人们生产生活带来了极大的方便,在此基础上完成的电子时钟精度高,功能易于扩展。可扩展成为诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等电路。所有这些,都是以钟表数字化为基础的。因此,研究数字时钟及扩大其应用有着非常现实的意义。本设计就是数字时钟简单的扩展应用。1 设计要求本设计准备实现的功能: (1) 显示日期功能(年、月、日、时、分、秒以及) (2) 可通过按键切换年、月、日及时、分、秒的显示状态(3) 可随时调校年、月、日或时、分、秒(4) 可每次增减一进行时间调节(5) 可动态完整显示年份,实现真正的万年历显示(6) 可显示温度2 方案论证与设计2.1控制器部分方案论证 方案一:可采用ALTERA公司的FLEX10K系列PLD器件。设计起来结构清晰,各个模块,从硬件上设计起来相对简单,控制与显示的模块间的连接也会比较方便。但是考虑到本设计的特点,EDA在功能扩展上比较受局限,而且EDA占用的资源也相对多一些。从成本上来讲,用可编程逻辑器件来设计也没有什么优势。方案二:凌阳16位单片机有丰富的中断源和时基。它的准确度相当高,并且C语言和汇编兼容的编程环境也很方便来实现一些递归调用。I/O口功能也比较强大,方便使用。用凌阳16位单片机做控制器最有特色的就是它的可编程音频处理,可完成语音的录制播放和识别。这些都方便对设计进行扩展,使设计更加完善。成本也相对低一些。但是,在控制与显示的结合上有些复杂,显示模组资源相对有限,而且单片机的稳定性不是很高,而且就需要完成万年历这个不太复杂的设计可以不必用凌阳16位单片机来完成,采用51单片机既能够实现既定功能,成本也不高。综合考虑最后选择用51单片机来作为中心控制器件。硬件控制电路主要用了AT89S51芯片处理器、LCD显示器等。根据各自芯片的功能互相连接成电子万年历的控制电路。软件控制程序主要有主控程序、电子万年历的时间控制程序、时间显示及星期显示程序等组成。主控程序中对整个程序进行控制,进行了初始化程序及计数器、还有键盘功能程序、以及显示程序等工作,时间控制程序是电子万年历中比较重要的部分。时间控制程序体现了年、月、日、时、分、秒及星期的计算方法。时间控制程序主要是定时器0计时中断程序每隔10ms中断一次当作一个计数,每中断一次则计数加1,当计数100次时,则表示1秒到了,秒变量加1,同理再判断是否1分钟到了,再判断是否1小时到了,再判断是否1天到了,再判断是否1月到了,再判断是否1年到了,若计数到了则相关变量清除0。先给出一般年份的每月天数。如果是闰年,第二个月天数不为28天,而是29天。再用公式sv1 +(y1/4(y1/100+(y1/400+ d计算当前显示日期是星期几,当调节日期时,星期自动的调整过来。闰年的判断规则为,如果该年份是4或100的整数倍或者是400的整数倍,则为闰年;否则为非闰年。在我们的这个设计中由于只涉及100年范围内,所以判断是否闰年就只需要用该年份除4来判断就行了。温度的显示主要是靠ds18b20采集现在的温度数据,CPU读取数据进行显示,当各自的条件得不到满足时,对应的显示器状态就不发生改变,只是在满足条件的情况下,显示器的状态才变化。图1 单片机控制电路Fig.1 SCM Control circuit 2.2 显示部分的方案论证方案一:采用8段数码管虽经济实惠,但操作比液晶显示来说略显繁琐。方案二:液晶显示方式。液晶显示效果出众,可以运用菜单项来方便操作,比较简单,所以,最后选择液晶显示方案。图2 液晶显示电路Fig.2 lcm1602 circuit2.3数字温度计设计方案论证2.3.1方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。2.3.2 方案二 (1).进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。 (2).方案二的总体设计框图温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89S51,温度传感器采用DS18B20,用LCD1602显示温度2.4 系统设计2.4.1 晶体振荡器电路 晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。不管是指针式的电子钟还是数字显示的电子钟都使用了晶体荡器电路。图3 DS1302电路Fig.3 ds1302 circuit2.4.2 分频器电路分频器电路将高频方波信号经分频后得到1Hz的方波信号供秒计数器进行计数,分频器实际上也就是计数器。2.4.3 时间计数器电路 时间计数电路由秒个位和秒十位计数器,分个位和分十位计数器及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器,分个位和分十位计数器为60进制计数器而根据设计要求,时个位和时十位计数器为12进制计数器。2.4.4 时钟电路内部时钟电路如图所示,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就产生自激振荡。定时元件通常石英晶体和电容组成的并联谐振回路,晶体振荡器选择12MHZ,电容采用30PF。 图4 时钟电路 Fig.4 Clock circuit2.4.5 复位电路 影响单片机系统运行稳定性的因素可大体分为外因和内因两部分: (1)外因 射频干扰,它是以空间电磁场的形式传递在机器内部的导体(引线或零件引脚)感生出相应的干扰,可通过电磁屏蔽和合理的布线/器件布局衰减该类干扰; 电源线或电源内部产生的干扰,它是通过电源线或电源内的部件耦合或直接传导,可通过电源滤波、隔离等措施来衰减该类干扰 。(2)内因 振荡源的稳定性,主要由起振时间频率稳定度和占空比稳定度决定 起振时间可由电路参数整定稳定度受振荡器类型温度和电压等参数影响复位电路的可靠性。2.4.6复位电路的可靠性设计复位是单片机的初始化操作。单片机启运运行时,都需要先复位,其作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。 复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开 关或电源插头分-合过程中引起的抖动而影响复位。图5 RC复位电路 Fig.5 RC Reset Circuit2.4.7 按键部分本设计总的用了四个按扭开关作为键盘,其中一个是复位键,另三个中的其中两个是调整时间增加、减少的键,第三个是切换年、月、日及时、分、秒的显示状态并在所切换的显示状态下配合加减两个键调整时间。图6 按键电路Fig.6 Key circuit3各硬件介绍3.1 AT89S51的引脚说明AT89S51系列单片机中有PDIP,PLCC,TQFP多种封装形式。本设计采用的是PDIP封装40管脚的单片机,各引脚如图2-2所示。图9 AT89S51的PDIP封装引脚图Fig.9 AT89S5140个引脚中, 4组8位共32个I/O口,正电源和地线两根,外置石英振荡器的时钟线两根,现在对这些引脚的功能加以说明:(1)Pin9:RESET/Vpd复位信号复用脚,当AT89S51通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统开始复位。而RESET由高电平下降为低电平后,系统即从0000H地址单元开始执行程序。(2)Pin29:PESN当访问外部程序存储器时,此脚输出负脉冲选通信号,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。(3)Pin30:ALE/PROG 地址锁存允许信号端。单片机上电后,ALE引脚不断向外输出正脉冲信号, ALE信号可以用作对外输出时钟或定时信号。(4)Pin31:EA/Vpp程序存储器的内外部选通线,89S51单片机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。3.2 发光二极管指示电路设计发光二极管简称为LED。由镓(Ga)与砷(AS)、磷(P)的化合物制成的二极管,当电子与空穴复合时能辐射出可见光,因而可以用来制成发光二极管, 在电路及仪器中作为指示灯,或者组成文字或数字显示。磷砷化镓二极管发红光,磷化镓二极管发绿光,碳化硅二极管发黄光。它是半导体二极管的一种,可以把电能转化成光能;常简写为LED。发光二极管与普通二极管一样 是由一个PN结组成,也具有单向导电性。当给发光二极管加上正向电压后,从P区注入到N区的空穴和由N区注入到P区的电子,在PN结附近数微米内分别与N 区的电子和P区的空穴复合,产生自发辐射的荧光。不同的半导体材料中电子和空穴所处的能量状态不同。当电子和空穴复合时释放出的能量多少不同,释放出的能 量越多,则发出的光的波长越短。常用的是发红光、绿光或黄光的二极管。设计中,我使用了1个发光二极管作为电源的指示。为了避免供给发光二极管的电流过大,使用1K的电阻进行限流。3.3 LCD1602简介 图11 LCM1602 Fig.11 LCM1602LCM1602采用标准的16脚接口,其中: 第1脚:VSS为地电源 第2脚:VDD接5V正电源 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RSRW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可读忙信号,当RS为高电平RW为低电平时可以写入数据.第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第714脚:D0D7为8位双向数据线。 第1516脚:空脚 3.4 DS1302 简介1 DS1302 的结构及工作原理DS13021是美国DALLAS 公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿功能,工作电压宽达2.55.5V。采用三线接口与CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31的用于临时性存放数据的RAM 寄存器。DS1302 是DS1202 的升级产品,与DS1202 兼容,但增加了主电源后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。1.1 引脚功能表及内部结构图DS1302 的引脚及内部结构如图1 所示,引脚功能如表1 所示。1.2 DS1302 的控制字节说明DS1302 的控制字如图2 所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302 中位6 如果为0,则表示存取日历时钟数据,为1 表示存取RAM数据;位至位1 指示操作单元的地址;最低有效位(位0)如为0 表示要进行写操作,为1 表示进行读操作,控制字节总是从最低位开始输出。1.3 复位通过把 输入驱动置高电平来启动所有的数据传送。 输入有两种功能:首先,接通控制逻辑,允许地址命令序列送入移位寄存器;其次, 提供了终止单字节或多字节数据的传送手段。当 为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中置 为低电平,则会终止此次数据传送,并且I/O 引脚变为高阻态。上电运行时,在Vcc2.5V 之前, 必须保持低电平。只有在SCLK 为低电平时,才能将RST 置为高电平。1.4 数据输入输出在控制指令字输入后的下一个SCLK 时钟的上升沿时数据被写入DS1302,数据输入从低位即位0 开始。同样,在紧跟8 位的控制指令字后的下一个SCLK 脉冲的下降沿读出DS1302 的数据,读出数据时从低位0 位至高位7,数据读写时序见图。1.5 DS1302 的寄存器DS1302 共有12 个寄存器,其中有7 个寄存器与日历、时钟相关,存放的数据位为BCD 码形式。其日历、时间寄存器及其控制字见表2。此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302 与RAM 相关的寄存器分为两类,一类是单个RAM单元,共31 个,每个单元组态为一个8 位的字节,其命令控制字为COHFDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM 寄存器,此方式下可一次性读写所有的RAM 的31 个字节,命令控制字为FEH(写)、FFH(读)。3.5 DS1302 简介3.5.1.温度传感器DS18B20DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现位的数字值读数方式。 TO92封装的DS18B20的引脚排列见下图,其引脚功能描述见表1。(底视图) DS18B20表1DS18B20详细引脚功能描述序号名称引脚功能描述1GND地信号2DQ数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。3VDD可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5;零待机功耗;温度以或位数字;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; DS18B20采用脚PR35封装或脚SOIC封装,其内部结构框图如图2所示。C64 位ROM和单线接口高速缓存存储器与控制逻辑温度传感器高温触发器TH低温触发器TL配置寄存器8位CRC发生器Vdd I/O 图2 DS18B20内部结构64位ROM的结构开始位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器和,可通过软件写入户报警上下限。DS18B20温度传感器的内部存储器还包括一个高速暂存和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为字节的存储器,结构如图3所示。头个字节包含测得的温度信息,第和第字节和的拷贝,是易失的,每次上电复位时被刷新。第个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图3所示。低位一直为,是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为,用户要去改动,R1和0决定温度转换的精度位数,来设置分辨率。温度 LSB温度 MSBTH用户字节1TL用户字节2配置寄存器保留保留保留CRC 图3 DS18B20字节定义由表1可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。高速暂存的第、字节保留未用,表现为全逻辑。第字节读出前面所有字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第、字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625LSB形式表示。当符号位时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2是一部分温度值对应的二进制温度数据。表1 DS18B20温度转换时间表 DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、T字节内容作比较。若TH或TTL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将55所对应的一个基数分别置入减法计数器、温度寄存器中,计数器和温度寄存器被预置在55所对应的一个基数值。减法计数器对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器的预置值减到时,温度寄存器的值将加,减法计数器的预置将重新被装入,减法计数器重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。表2一部分温度对应值表温度/二进制表示十六进制表示+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00000191H+10.1250000 0000 1010 000100A2H+0.50000 0000 0000 00100008H00000 0000 0000 10000000H-0.51111 1111 1111 0000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1100 1001 0000FC90H另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。图4 DS18B20与单片机的接口电路3.5.2 DS18B20时序DS18B20的复位时序 DS18B20的读时序对于DS18B20的读时序分为读0时序和读1时序两个过程。对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。DS18B20的写时序对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。4 系统硬件设计所需的器材5V电源 3V电源AT89S51单片机1个液晶显示器1个DS1302 1个DS18B20 一个电阻 1 K的2个、4.7K的2个4.7欧排阻8550三极管晶振12M的一个 32768K的一个电容(30P的两个)LED二极管1个22f电容1个轻触开关5个5 系统软件总体设计 系统的软件设计采用汇编语言,对单片机进行编程实现各项功能。程序在WindowsXP环境下采用Keil软件编写。软件控制程序主要有主控程序、电子时钟的时间控制程序h和温度显示程序组成。主控程序中对整个程序进行控制,进行了初始化程序还有键盘功能程序、以及显示程序和时间控制程序是电子时钟中比较重要的部分。时间控制程序体现了年、月、日、时、分、秒的计算方法。6 主程序流程图 开始单片机读DS1302数据单片机送数据到LCD1602单片机判断按键单片机处理按键调显示数据结束图16 主流程框图Fig.16 The process flow chart 源程序/ 使用说明:按s1进入日期设置;进入设置后进行光标左移;/ 按s2进入时间设置;设置完成后进行确认;/ 按s3进行减;/ 按s4进行加;/ /#include#define uint unsigned int#define uchar unsigned char/sbit rw = P26;/sbit rs = P25;/1602 IO口位定义sbit en = P27;/sbit rst = P35; /sbit sclk = P36;/1302 IO口位定义sbit io = P34; /sbit key1 = P10;/sbit key2 = P11;/独立按键位定义sbit key3 = P12;/sbit key4 = P13;/ /sbit DQ = P22;/uchar tempL=0; /临时变量低位uchar tempH=0; /临时变量高位uint temperature;uint hour, minute, second, year, month, day;uint key = 0;uchar tab_num = 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x2d; /对应字符为:0 1 2 3 4 5 6 7 8 9 : - uchar tab_time = 1,2,10,3,4,10,5,6;uchar tab_date = 2,0,1,0,11,0,9,11,2,7;/ 延时函数,延时z毫秒 *void delay(uint z)uint x, y;for(x=0;xz;x+)for(y=0;y110;y+);/*/*函数功能:延时子程序入口参数:k出口参数:*/void delay18b20(unsigned int k) unsigned int n; n=0; while(n 480ms)DQ=1; /拉高数据线delay18b20(14); /等待(1560ms) /*函数功能:向DS18B20读一字节数据入口参数:出口参数:dat*/ReadOneChar(void) unsigned char i=0; unsigned char dat=0;for (i=8;i0;i-) DQ=1;delay18b20(1);DQ=0; dat=1;DQ=1;if(DQ)dat|=0x80;delay18b20(4);return(dat);/*函数功能:向DS18B20写一字节数据入口参数:dat出口参数:*/WriteOneChar(unsigned char dat) unsigned char i=0; for(i=8;i0;i-) DQ=0; DQ=dat&0x01;delay18b20(5);DQ=1;dat=1;delay18b20(4);/*函数功能:向DS18B20读温度值入口参数:出口参数:temperature*/uint ReadTemperature(void) Init_DS18B20(); /初始化WriteOneChar(0xcc); /跳过读序列号的操作WriteOneChar(0x44); /启动温度转换delay18b20(125); /转换需要一点时间,延时Init_DS18B20(); /初始化WriteOneChar(0xcc); /跳过读序列号的操作WriteOneChar(0xbe); /读温度寄存器(头两个值分别为温度的低位和高位)tempL=ReadOneChar(); /读出温度的低位LSBtempH=ReadOneChar(); /读出温度的高位MSB /温度转换,把高低位做相应的运算转化为实际温度temperature=(tempH*256)+tempL)*5/8; delay18b20(200);return(temperature);/=1302写一个字节=void write_byte(uchar dat)uchar i, dat_w;dat_w = dat;for(i=0;i 1;sclk = 0;sclk = 1;sclk = 0;/=/=1302读一个字节=uchar read_byte()uchar i, k;k = 0;for(i=0;i 1;if(io)k = k|0x80;sclk = 1;sclk = 0;sclk = 0;return (k);/=/=1302把数据写入地址=void write_add(uchar add, uchar dat)rst = 0;sclk = 0;rst = 1;write_byte(add);write_byte(dat / 10 4) | (dat % 10);sclk = 0;rst = 0;/=/=1302从地址读出数据=uchar read_add(uchar add)uchar temp, dat1, dat2;rst = 0;sclk = 0;rst = 1;write_byte(add);temp = read_byte();sclk = 0;rst = 0;dat1 = temp / 16;dat2 = temp % 16;temp = dat1 * 10 + dat2;return (temp);/=/=1302时间初始化=void ds1302_init()write_add(0x8e,0x00);/打开写保护,写入时间;write_add(0x80,50);/初始化-秒 50;write_add(0x82,59);/初始化-分 59;write_add(0x84,23);/初始化-时 23;write_add(0x86,31);/初始化-日 31;write_add(0x88,12);/初始化-月 12;write_add(0x8c,10);/初始化-年 2010;write_add(0x8e,0x80);/关闭写保护,禁止写入。/=/=1302读出时间=void ds1302()write_add(0x8e,0x00);/打开写保护,读出时间;second = read_add(0x81);/从1302读出时间-秒;minute = read_add(0x83);/从1302读出时间-分;hour = read_add(0x85);/从1302读出时间-时;day = read_add(0x87);/从1302读出时间-日;month = read_add(0x89);/从1302读出时间-月;year = read_add(0x8d);/从1302读出时间-年;write_add(0x8e,0x80);/关闭写保护,禁止读出;/=/写命令函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村金融服务创新与普惠金融发展研究报告(2025年)
- 维保合同解约协议书范本
- 火灾救人受伤赔偿协议书
- 猫宠物买卖合同协议模板
- 村民入股企业合同协议书
- 甘肃农业大学实习协议书
- 深圳劳动合同续订协议书
- 阴阳合同免责声明协议书
- 洗浴中心赔偿协议书模板
- 绿点合同解除协议书范本
- GB/T 8905-2012六氟化硫电气设备中气体管理和检测导则
- GB/T 1665-2008增塑剂皂化值及酯含量的测定
- 甘肃地质灾害危险性评估规程DB62-2023
- GA/T 1073-2013生物样品血液、尿液中乙醇、甲醇、正丙醇、乙醛、丙酮、异丙醇和正丁醇的顶空-气相色谱检验方法
- GA 6-2004消防员灭火防护靴
- 临床心电向量图-沈絮华课件
- 肝门部胆管癌诊疗治疗指南
- 《概率论与数理统计》-教学教案
- 《紫闺祕书》杏溪浣香主人撰演示教学
- 中国服装发展史(完整版)
- 丽声北极星分级绘本第四级下 The Camping Trip课件
评论
0/150
提交评论