带温度显示万年历--单片机课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计说明书
课程名称: 《单片机技术》
设计题目:万年历
院(部):电子信息与电气工程学院
学生姓名: *******
学号:************
专业班级:************
指导教师:*******
20**年5月23日
课程设计任务书
万年历
摘要:设计了一个带温度显示的万年历电路系统,该电路具有年、月、日、星期、时、分、秒、闹钟显示和调整功能,并且还能显示温度和按键鸣叫、整点鸣叫、定时闹钟鸣叫等功能。
其中显示部分采用LCD1602显示,时钟部分采用DS1302时钟芯片,温度部分采用DS18B20单线温度传感器。
报时鸣叫采用有源蜂鸣器并用三极管驱动。
软件方面我们采用C语言编程,利用Keil uVision4软件编写C语言程序并且生成HEX文件。
先将程序在Proteus仿真,通过之后再烧录到单片机中。
该设计的优点是充分利用了LCD1602的显示功能完成了万年历应该具有的功能并且还扩展了温度和闹钟。
不足之处是收到LCD1602显示功能的限制没能显示农历日期,而且报时部分只是发出滴滴声而不是语音报时。
关键词:万年历;LCD1602;温度传感器(DS18B20);时钟芯片(DS1302)
目录
1.设计背景 (1)
1.1时钟的用途及精度的需求 (1)
1.2万年历的使用现状及设计目的 (1)
2.设计方案..............................................................................12.1任务分析 (1)
2.2方案选择和论证 (2)
2.2.1显示模块选择方案和论 (2)
2.2.2时钟模块的方案选择和论证 (2)
2.2.3按键控制模块的方案选择和论证 (2)
2.2.4温度采集模块方案选择 (3)
2.2.5方案的整体框图 (3)
2.2.6设计流程图程序部分的拟定案 (4)
3.方案实施 (5)
3.1.1整体电路及其分析 (5)
3.1.2电源电路 (6)
3.1.3单片机最小系统 (6)
3.1.4蜂鸣器及驱动电路 (7)
3.1.5时钟芯片DS1302电路 (7)
3.1.6温度采集芯片DS18B20电路 (8)
3.1.7键盘控制电路……………………………………………………………
8
3.1.8L CD1602控制电路 (9)
3.2软件仿真........................................................................103.2.1P rot eus仿真软件介绍.........................................................10 3.2.2电路仿真调试 (11)
3.3 电路的焊接与调试……………………………………………………12
4.结果与结论 (14)
5.收获与致谢........................................................................14 6.参考文献 (15)
7.附件.................................................................................15 7.1电路原理图 (15)
7.2 Proteus仿真图..................................................................1 6 7.3电路工作中实物图 (17)
7.4元器件清单 (19)
7.5源程序清单……………………………………………………………20
1.设计背景
1.1时钟的用途及精度的需求
时间,对人们来说是非常宝贵的,准确的掌握时间和分配时间对人们来说至关重要。
随着时间的流逝,科学技术的不断发展和提高,人们对时间计量的精度要求越来越高,应用越来越广。
怎样让时钟更好、更方便、更精确的显示时间,这就要求人们不断设计研发出新型的时钟。
高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校。
数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
1.2万年历的使用现状及设计目的
如今万年历已经在人们生活中广泛的使用,它不仅是记录日期和时间的工具,而且也成为了一种装饰品。
现在的万年历可以说是多种多样,外观精美。
放在家里既可以计时也可作为风景壁画,因此越来越受到大众消费者的喜爱。
本次课程设计通过利用STC89C52单片机和DS1302芯片以及外围的按键和LCD 显示器等部件,设计一个基于单片机的电子时钟。
设计的电子时钟通过液晶显示器显示,并能通过按键对时间以及闹钟进行设置。
目的来模拟真实产品中万年历的工作原理,具有很强的实用性。
2.设计方案
2.1任务分析
目的是设计一个带温度显示的万年历电路系统,该电路具有年、月、日、星期、时、分、秒、闹钟显示和调整功能,并且还能显示温度和按键鸣叫、整点鸣叫、定时闹钟鸣叫等功能。
其中显示部分准备采用LCD1602显示,时钟部分准备采用DS1302时钟芯片,温度部分准备采用DS18B20单线温度传感器。
报时鸣叫采用有源蜂鸣器并用三极管驱动。
软件方面我们采用C语言编程,利用Keil uVision4软件编写C语言程序并且生成HEX文件。
先将程序在Proteus仿真,通过之后再烧录到单片机中。
2.2方案选择和论证
2.2.1、显示模块选择方案和论证
方案一:
采用点阵式数码管显示。
点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且难度也相对较高,所以不用此种作为显示。
方案二:
采用LED数码管动态扫描。
LED数码管价格便宜,对于显示数字最合适,但功耗较大,且显示容量不够,所以也不用此种方案。
方案三:
采用LCD液晶显示屏。
液晶显示屏的显示功能强大,可显示大量文字,显示多样,清晰可见,且价格适中,所以采用了LCD数码管作为显示。
2.2.2时钟模块的方案选择和论证
方案一:
直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。
采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。
所以不采用此方案。
方案二:
采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA.
2.2.3按键控制模块的方案选择和论证(宋体四号,加粗)
方案一:
直接加减:使用7按键,1按键切换闹钟,6按键对时分秒分别加减,控制方式相当简单,但需要较多按键与I/O口,功能一般,成本较高。
方案二:
矩阵键盘:使用16按键对时分秒直接设置,能最为灵活的对数字钟进行设置,功能强大,但控制方式相对困难,成本较高,需要较多按键与I/O口。
方案三:
换位调整:使用4按键,1设置闹钟,1键设置调整时间,1键调整,1键确定,此种控制方式相对简单,占用I/O口少,成本低廉,但功能一般。
经过反复比较,在3种方案中选取了第3种——换位调整,此方案成本低,功能已经足够满足数字钟的需要,而且硬件软件均比较简单。
2.2.4温度采集模块方案选择(宋体四号,加粗)
DS18B20数字温度传感器接线方便,独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。
耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
因此DS18B20完全满足设计要求。
2.2.5方案的整体框图(宋体四号,加粗)
图1 整体方框图
图2设计流程图
3.方案实施
3.1.1原理图设计及工作原理分析(宋体四号,加粗)
图3 整体原理图
我们首先构成单片机的最小系统,使单片机能正常工作,在程序中首先对LCD1602、DS1302、DS18B20进行初始化,由CPU完成对DS1302产生的各种时钟数据的读取,然后将数据写至LCD1602,以显示数据,达到可视化的效果。
对于课程设计的拓展部分,我们可以利用DS18B20温度传感器来测试周围环境的温度,由CPU完成对数据的读取,然后通过CPU将数据写至LCD1602,以显示温度数据,达到可视化的效果。
通过键盘扫描子程序通过测试按键是否闭合来调整各种时间数据和闹钟已达到校准和定时的目的。
在按键的同时调用蜂鸣器程序,驱动蜂鸣器响来作为按键提示音,另外我们还扩展了整点报时提示音和闹钟提示音等。
3.1.2电源电路(宋体四号,加粗)
我们采用了USB和变压器双电源供电:
图4 变压器供电电路
变压器输出的9V交流电经桥堆2W10后变成有较大波动的的直流电,然后经过滤波电容和微调电容后变成直流电,再经过L7805三端稳压器输出5V直流电。
7805输出端的电容起到了防干扰和微调作用。
图5 USB供电电路
3.1.3单片机最小系统(宋体四号,加粗)
单片机采用了上电自动复位和按键复位的双复位,利用12MHZ晶振作为单片机的外部晶振来驱动单片机工作。
其中两个33pf的电容用于晶振的启动。
由于单片机的P
0口是准双向IO口,所以需要排阻RP1作为该口的上拉电阻。
图6 单片机最小系统
3.1.4蜂鸣器及驱动电路(宋体四号,加粗)
我们采用的有源蜂鸣器,由于单片机的输出电流较小所以我们采用PNP形的三极管作为驱动电路,来驱动蜂鸣器发声,当单片机给低电平时蜂鸣器响。
图7 蜂鸣器电路
3.1.5时钟芯片DS1302电路(宋体四号,加粗)
时钟芯片采用双电源,当系统断电之后由3V的电源—电池供电。
保证了系统断电之后时钟继续工作,当系统再次上电之后时钟能显示正确的时间和日期。
图8 时钟电路
3.1.6温度采集芯片DS18B20电路(宋体四号,加粗)
图9 温度采集电路
3.1.7键盘控制电路(宋体四号,加粗)
该设计采用的是独立按键,S1为时间设置,S2为时间或者日期调整,S3为确定键,S4为闹钟设置。
图10 按键控制电路
3.1.8LCD1602控制电路(宋体四号,加粗)
LCD1602是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
第1脚:VSS为电源地。
第2脚:VDD接5V电源正极。
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高。
第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
第6脚:E(或EN)端为使能(enable)端。
第7~14脚:D0~D7为8位双向数据端。
第15~16脚:空脚或背灯电源。
15脚背光正极,16脚背光负极。
图11 LCD1602液晶显示电路
3.2软件仿真
3.2.1 仿真软件介绍(宋体四号,加粗)
Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU 的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。
因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。
对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。
(1)proteus 的工作过程ﻫ运行proteus 的ISIS 程序后,进入该仿真软件的主界面。
在工作前,要设置view 菜单下的捕捉对齐和system下的颜色、图形界面大小等项目。
通过工具栏中的p(从库中选择元件命令)命令,在pick devices 窗口中选择电路所需的元件,放置元件并调整其相对位置,元件参数设置,元器件间连线,编写程序;在source 菜单的Definecode generation tools 菜单命令下,选择程序编译的工具、路径、扩展名等项目;在source 菜单的Add/removesource files命令下,加入单片机硬件电路的对应程序;通过debug 菜单的相应命令仿真程序和电路的运行情况。
(2)Proteus软件所提供的元件资源Proteus软件所提供了30 多个元件库,数千种元件。
元件涉及到数字和模拟、交流和直流等。
ﻫ(3)Proteus 软件所提供的仪表资源
对于一个仿真软件或实验室,测试的仪器仪表的数量、类型和质量,是衡量实验室是否合格的一个关键因素。
在Proteus软件包中,不存在同类仪表使用数量的问题。
Proteus 还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似但功能更多。
ﻫ(4)Proteus 软件所提供的调试手段
Proteus 提供了比较丰富的测试信号用于电路的测试。
这些测试信号包括模拟信号和数字信号。
对于单片机硬件电路和软件的调试,Proteus 提供了两种方法:一种是系统总体执行效果,一种是对软件的分步调试以看具体的执行情况。
ﻫ对于总体执行效果的调试方法,只需要执行debug 菜单下的execute 菜单项或F12 快捷键启动执行,用debug菜单下的pause animation 菜单项或pause 键暂停系统的运行;或用debug 菜单下的stop animation 菜单项或shift-break 组合
键停止系统的运行。
其运行方式也可以选择工具栏中的相应工具进行。
ﻫ对于软件的分步调试,应先执行debug 菜单下的start/restart debugging 菜单项命令,此时可以选择stepover、step into 和step out命令执行程序(可以用快捷键F10、F11 和ctrl+F11),执行的效果是单句执行、进入子程序执行和跳出子程序执行。
在执行了start / restart debuging 命令后,在debug菜单的下面要出现仿真中所涉及到的软件列表和单片机的系统资源等,可供调试时分析和查看。
3.2 Proteus电路仿真与调试
图12 Proteus下的仿真电路图
本次课程设计我们小组采用分工合作的方式,把任务分成了四个模块:硬件部分、软件部分、仿真调试、实物的制作与调试。
我们首先拟定实现的功能方案,然后小组讨论制定系统的整体框图。
采用功能模块化、任务具体化、工作协调化的方式,充分发挥小组成员各自的的优势。
本次设计我主要负责仿真与调试模块,因为我之前没有接触过Proteus的仿真,因
此在协调小组工作之余我开始学习Proteus仿真软件的使用。
可以说仿真是软件和硬件的组合体,首先要对硬件有充足的了解,明白其中各个模块的功能,而且对软件也要有透彻的了解。
因为当仿真结果与预期的结果不一致时,在确保硬件设计合理的基础上只能是软件的编写有误,因此需要对软件进行修改。
在仿真的时候出现的问题让我不知所措,刚开始竟然连液晶都不亮。
经检查后发现原来是液晶背光的电源与地接反了。
经调整后,液晶亮了,但是什么都不显示。
经小组商讨后,我决定用分模块的方式,首先对各个模块分开测试。
在修改程序的同时,我学会编程软件KEIL的使用,提高了我的编程能力和软件测试的技巧,第一步:我测试单片机的最小系统,看看单片机是否工作。
我写了一个小程序,将4个IO口的电平全部拉低发现单片根本就不工作,IO口的引脚电平还是默认的高电平。
我首先判定是单片机的外部晶振出了问题,经检查后发现是晶振的起震电容选取的不合适,经修改后单片机正常工作了。
第二步:测试蜂鸣器模块,我们是通过PNP型三极管来驱动蜂鸣器发声的,所以需要单片机给个低电平才能使三极管导通,经测试三极管能正常工作。
第三步:测试液晶的初始化程序,让其开显示并且光标闪烁,然后测试液晶的写入程序,经测试后发现该模块的程序均正常。
第四步:测试DS1302的读写程序,通过单片机读取DS1302时钟芯片的数据,然后将数据处理后送到液晶显示器液晶能够正常显示,但是与预期的显示位置有差异,经修改写入的地址后,能达到预期的目标。
第五步:DS18B20温度传感器数据的读写,当单片机对其数据进行读入是发现根本就没反应,经过讨论和测试后发现是它的读写时序不对,于是我们对比DS18B20的数据手册,然后进行单步调试确保时序与之对应,然后再次读取它的数据,这次终于成功了。
最后将修改过的主程序载入单片机发现各个部分的功能都能实现了。
软件仿真部分圆满成功。
3.3焊接与调试(宋体四号,加粗)
我们小组采取分工合作的方式将任务分成了四部分:硬件部分、软件部分、软件仿真与调试、实物的制作与调试。
我主要是负责硬件的制作与调试。
由于硬件制作是最后一步,所以我之前一直在协助组员之间的工作,负责任务的分配与协调,在此期间我学会了Proteus仿真软件的使用和一些调试的方法,可以说对我以后的硬件电路的调试也是非常有用的。
而且在硬件电路设计的时候我明白了各个芯片的使用和各个模块的功能,对以后的焊接与调试也是至关重要的,在此期间我又进一步熟悉了Altiumdes
igner原理图绘制软件的使用。
在与小组成员讨论软件设计流程的时候我明白软件设计的要点和注意事项,明白了软件各个模块的作用和它们之间的执行顺序以及怎样协调工作。
通过学习我明白系统开发的流程,了解了需要用到的工具软件。
当硬件和软件设计及仿真的工作都完成后就轮到我的制作了,由于这次采用的是万用板,可以说元件的布局是非常重要的一部分,我首先对电路进行布局,在布局的同时为了布线的方便对芯片的引脚的位定义进行了局部的调整,在确保无误后开始焊接。
可以说焊接是个耐心和细致的工作,特别是用万用板制作,由于它的布线大部分采用的明线,所以看起来会非常乱,一不小心就会出错。
还有这次用的万用板是两个插孔在一起的那种,由于从背面插元器件,看不到正面的焊盘是否连接。
刚开始焊接的时候就出现了元件引脚相连的情况,而且有的焊盘在重焊的时候还发生了焊盘脱落的情况。
这引起了我的重视,在以后的元件放置的时候我很注意焊盘的位置,防止焊盘相连的情况再次发生。
我用了整整一天的时间进行焊接,又用了一天的时间进行调试,最后功能完全实现,画上了圆满的句号。
在调试的过程中也遇到了不少的问题,我采用和软件调试类似的方法分模块测试。
第一步:测试单片机的最小系统,看看单片机是否工作。
我写了一个小程序,将4个IO口的电平全部拉低发现单片根本就不工作,IO口的引脚电平还是默认的高电平。
经检查后发现是晶振的起震电容选取的不合适,经修改后单片机正常工作了。
第二步:测试液晶的初始化程序,让其开显示并且光标闪烁发现液晶显示非常暗,后来发现是液晶的背光没有接,接上背光后液晶亮了并且工作正常。
第三步:DS18B20温度传感器数据的读写,当单片机对其数据进行读入是发现读取的温度与实际有差别,经过讨论和测试后发现是温度的变量数据类型用的uchar型,改成uint型的后温度读取正确。
第四步:测试DS1302的读写程序,通过单片机读取DS1302时钟芯片的数据,终于显示了结果,可是现实的结果并不是自己设定的日期,后来才发现在设置初值时,将顺序搞乱了,重新整理后,上面显示正确的结果。
第五步:测试蜂鸣器模块,我们是通过PNP型三极管来驱动蜂鸣器发声的,所以需要单片机给个低电平才能使三极管导通,经测试三极管能正常工作。
最后将修改过的主程序载入单片机发现各个部分的功能都能实现了。
硬件调试与制作部分圆满成功。
ﻫ
4 结果与结论
完成了用LCD1602显示的带温度显示的万年历的预期的全部功能功能。
具有年、月、日、星期、时、分、秒、温度等显示功能;具备年、月、日、星期、时、分、秒校准功能;具有闹钟显示、调节设定、整点鸣叫功能。
制作过程中将程序烧到板上时,LCD1602不能显示结果,经过排查,发现是接触不良,重新将其接好后,再次烧录程序。
终于显示了结果,可是现实的结果并不是自己设定的日期,后来才发现在设置初值时,将顺序搞乱了,重新整理后,上面显示正确的结果。
该设计的缺点是没能显示农历和语音报时功能,这也是受到LCD1602显示功能的影响。
如果换成LCD12864显示就能充分显示农历日期,再加上语音芯片实现语音报时功能就更好了。
5 收获与致谢
为了完成此次课设,我再次翻阅了所学的理论知识,对题目有了一定的理解后,开始相关的设计。
整个课设的难处在于程序设计部分。
首先,这次课设我们都要用到KE IL编译软件,虽然很早就接触到了这种软件,但只是会一点皮毛。
这个课设要用到很多新的功能,运用起来有一定的困难,不过最后通过查询一些资料,能较好地掌握这些知识。
主要的困难在后面的芯片程序设计部分。
我们首先查阅芯片手册,研究其操作的时序图,然后按照时序图写程序。
首先,对于DS1302时钟芯片,其初始化设置以及CPU读取时间数据,均需要熟悉相应的引脚功能和运用相应的函数,学会运用这些函数耗费了我不少时间,为此我专门复习了一下以前学习的C语言知识。
掌握了DS1302的使用方法后,我开始学习LCD的使用方法,与前面一样,我复习了以前的知识,熟悉了其引脚功能,为后面的程序编写积累了知识。
这也在一定程度上提高了我们对时序图的了解,也提高了我们的编程能力。
另外在做拓展部分是,还掌握了DS18B20的使用方法,此次课程设计着实让我学到了很多硬件和软件方面的知识。
通过此次课设,我对单片机的C语言编程有了初步的掌握,熟悉了几种芯片的使用方法,同时提高了动手操作的能力,理论和实践都有了提高。
课设做完后,也发现了自己的一些不足,平时很少自己动手设计程序,以至于用的时候有很多困难,在以后的时间里,我会多设计一些电路,提高自己的动手实践能力。
在此还要感谢设计中帮助过我的老师和同学。
6. 参考文献
[1]童诗白.模拟电子技术基础[M].北京:高等教育出版社,2005.
[2]阎石.数字电子技术(第五版)[M].北京:高等教育出版社,2005.
[3]邱关源,罗先觉.电路(第五版)[M].北京:高等教育出版社,2006.
[4]周灵彬,任开杰.基于Proteus的电路与PCB设计[M].北京:电子工业出版社,2010.
[5]穆秀春,冯新宇,王宇.AltiumDesigner原理图与PCB设计[M].北京:电子工业出版社,2011.
[6]郭天祥.51单片机C语言教程[M].北京:电子工业出版社,2012.
[7]张毅刚,彭喜元,彭宇.单片机原理及应用[M].北京:高等教育出版社,2010.
[8]李升.单片机原理与接口技术[M].北京:北京大学出版社,2011.
7.附件
7.1 电路原理图
图13整体电路原理图
7.2Proteus仿真图
图14 正常工作状态下
图15 闹钟设置状态
图16调时状态7.3 实物图
图17 正常工作状态下
图18 调时状态
图19闹钟设置状态
7.4 元器件清单
7.5源程序清单
#include<reg52.h>//52单片机头文件,规定了52单片机的寄存器和IO口等
#include<intrins.h>//_nop_空指令及左右循环移位子函数库
#define uchar unsigned char//宏定义
#define uint unsigned int//宏定义
sbit lcden=P2^6;//定义下面通过lcden来操作P2^7口,1602液晶使能控制端sbit lcdwr=P2^5;//定义下面通过lcdrw来操作P2^5口,1602读写选择端
sbit lcdrs=P2^4;//定义选数据寄存器选指令寄存器控制端
sbit sda=P1^1;//定义DS1302数据总线
sbit rst=P1^2;//DS1320复位
sbit sck=P1^0;//定义时钟总线
sbits1=P3^0;//定义设置按钮
sbit s2=P3^1;//定义调时按钮
sbit s3=P3^2;//定义确定按钮
sbit s4=P3^3;
sbit DQ =P2^0; //定义DS18B20通信端口
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
sbit BELL=P1^4;
char fen,shi,miao,ri,yue,nian,zhou,s1num,s2num,s4num,flag1,flag2,lshi,lfen;
uchar code table[]={" 2013- - "};//要写入1602液晶的数据
uchar codealarm[]={"CLOCK SETTINGS "};//要写入1602液晶的数据uchar code alarm1[]={" : "};//要写入1602液晶的数据uchar code table1[]={" : : . "};//字库中的字可直接以外加""号的形式直接写入
uchar code table2[]={"Wan NianLi !"};//欢迎界面
uchar code table3[]={"Wo Men Jie Zuo!!"};//欢迎界面
//*****************星期编码表**********************************
uchar code Weeks[][3]={{"SUN"},{"MON"},{"TUE"},{"WED"},{"THU"},{"FRI"},{"SAT"},{"SUN"}};
uchar i,j;
//*********************短暂延时********************************
void delay0(uintz)
{ ﻩﻩﻩﻩ
ﻩwhile(z--);
}
//*********************毫秒延时********************************
void delay(uintz)
{ﻩﻩﻩ
ﻩuint x,y;
for(x=z;x>0;x--)
ﻩfor(y=110;y>0;y--);
}
//DS18B20初始化函数
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位
delay0(8);//稍做延时
ﻩDQ = 0; //单片机将DQ拉低
ﻩdelay0(80); //精确延时大于480us
DQ = 1; //拉高总线
delay0(14);
x=DQ; //稍做延时后如果x=0则初始化成功 x=1则初始化失败
ﻩdelay0(20);
}
//DS18B20读一个字节
uchar ReadOneChar(void)
{
unsigned char i=0;
ﻩunsigned chardat= 0;
for (i=8;i>0;i--){
ﻩDQ=0; // 给脉冲信号
ﻩﻩdat>>=1;
ﻩDQ = 1; //给脉冲信号
ﻩif(DQ) dat|=0x80;
ﻩdelay0(4);
ﻩ}
ﻩreturn(dat);
}
//DS18B20写一个字节
void WriteOneChar(unsigned char dat) {
unsignedchar i=0;
ﻩfor (i=8; i>0; i--){
ﻩﻩDQ= 0;
DQ = dat&0x01;
delay0(5);
DQ = 1;
ﻩdat>>=1;
ﻩ}
}
//DS18B20读取温度
uint ReadTemperature(void)
{
ﻩunsigned char a=0;
unsigned char b=0;
ﻩunsigned int t=0;
float tt=0;
ﻩInit_DS18B20();
ﻩWriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
Init_DS18B20();
ﻩWriteOneChar(0xCC); //跳过读序号列号的操作
ﻩWriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度
ﻩa=ReadOneChar();
b=ReadOneChar();
ﻩt=b;
t<<=8;
ﻩt=t|a;
tt=t*0.0625; //将温度的高位与低位合并
t= tt*10+0.5; //对结果进行4舍5入
ﻩreturn(t);
}
/*********************蜂鸣器函数************************************************/
void didi()
{ ﻩ
uchar i;
for(i=0;i<60;i++)
{
BELL= 0;
ﻩdelay(1);。