温度测量及时钟显示的课程设计
基于单片机的带温度显示的数字钟设计(c51语言编程)【开题报告】

开题报告电气工程及其自动化基于单片机的带温度显示的数字钟设计(c51语言编程)一、课题研究意义及现状1980年因特尔公司推出了MCS-51单片机,近30年来,其衍生系列不断出现,从Atmel加入FLASH ROM,到philips加入各种外设,再到后来的Cygnal推出C8051F,使得以8051为核心的单片机在各个发展阶段的低端产品应用中始终扮演着一个重要的角色,其地位不断升高,资源越来越丰富,历经30年仍在生机勃勃地发展,甚至在SoC时代仍占有重要的一席之地。
单片机具有体积小、功能强、低功耗、可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域智能仪表、机电一体化、实时控制、国防工业普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。
C语言已经成为当前举世公认的高效简洁而又贴近硬件的编程语言之一。
将C语言向单片机8051上移植十余20世纪80年代的中后期,经过几十年的努力,C语言已成为专业化单片机上的实用高级语言。
C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。
此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。
与汇编语言相比,C51在功能、结构、可读性、可维护性上有明显的优势,因而易学易用。
另外C51可以缩短开发周期,降低成本,可靠性,可移植性好。
因此,使用C语言进行程序设计已成为软件开发的一个主流,用C语言进行8051单片机程序设计是单片机开发与应用的必然趋势。
随着人们生活水平的提高,对物质需求也越来越高,人们已不再满足于钟表原先简单的报时功能,希望出现一些新的功能,诸如环境温度显示、日历的显示、重要日期倒计时、显示跑表功能等,用以带来更大的方便。
而所有这些,又都是以数字化的电子时钟为基础的,不仅应用了数字电路技术,而且还加入了需要模拟电路技术和单片机技术。
电子技术课程设计数字温度计

课程名称:电子技术课程设计设计题目:院系:专业:年级:姓名:指导教师:XXXX大学XX校区XX 年X月X日课程设计任务书专业: 姓名: 学号:开题日期: XX年X月X日完成日期:XX年X月X日题目: 数字温度计一、设计的目的1、设计一个简易的数字温度计满足一定的测量范围并通过LED显示出来;2、了解常用电子器件的类型和特性,并掌握合理选用的原则;3、进一步熟悉电子仪器的使用方法;4、学会撰写课程设计总结报告;5、培养独立分析问题和解决实际问题的能力;6、培养严肃认真的工作作风和严谨的科学态度。
二、设计的内容及要求1、测温范围为—30℃~+120℃,精度为±0.5℃;2、LED数码管直读显示,当温度为“负”则最高位显示“—”号,最低位显示单位“C”;3、当温度不在测量范围内(<—30℃或>+120℃)时,蜂鸣器报警且发光二极管闪烁。
三、指导教师评语四、成绩:指导教师(签章)年月日摘要:本设计以AT89C51单片机为核心,DS18B20数字式温度传感器为温度传感器,7段LED数码管构成显示电路;单片机控制DS18B20进行温度采集,在接收DS18B20传回数据后进行处理,通过74LS245驱动数码管显示实时温度的动态显示。
由于采用的是可编程器件作为控制核心,与传统的温度计相比该温度计具有示数直观,精度可调,功能易扩展等优点。
关键词:数字温度计、AT89C51 、DS18B20 、74LS245 、LED设计背景随着人们生活水平的不断提高,数字化无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,科学技术向着数字化、智能化控制方向发展,其中数字温度计就是一个典型的例子。
数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用。
温度计是常用的热工仪表,常用于工业现场作业过程的温度测量,在工业生产过程中,不仅需要了解当前温度读数,而且还希望能了解过程中的温度变化情况。
温度测量显示电路设计.doc

目录一摘要......................................................1 二设计目的与意义.............................................1三方案论证与确定.............................................23.1系统方案的确定..................................................23.2传感器方案的确定................................................33.3测量显示方案的确定..............................................3 四系统工作原理分析...........................................4 五电路制作与调试..........................................10六附录...................................................16七参考文献...............................................27一.摘要在现今科技高速发展的时代,各行各业对控制和测量的要求越来越高,其中,温度测量和控制在很多行业中都有比较重要的应用,尤其在工业上,如炼钢时对温度高低的控制。
要控制好温度,测量是前提,测量的精度影响着后续工序的进行,因此温度测量的方法和选取就显得相当重要了。
针对各种温度测量方案的讨论分析后,我们组决定以AT89S52为核心,采用DS18B20温度传感器进行温度信号的检测,并通过LCD液晶显示测量所得温度,外加红外遥控调节设置温度测量的上下限数值(默认温度上下限为10℃~24℃),在所测温度到达所设上下限数值时,蜂鸣器启动报警提示。
综合课程设计--温度测量系统

基于AT89c51单片机温度测量系统目录一、研究意义 (2)二、系统设计要求、目的 (2)2.1、设计任务与要求 (2)2.2、实验目的 (2)三、系统设计方案 (3)3.1、总系统电路图 (3)3.2、各模块设计思想和电路原理图................................................................3-7四、系统工作基本流程 (7)五、软件设计程序代码.............................................................................................8-9六、实验数据对比与效果分析 (10)6.1、系统输入 (10)6.2、实验效果分析..........................................................................................10-12七、输入—输出结果分析 (12)八、参考资料 (13)一、研究意义在现代化的工农业生产和日常生活中,温度、电流、电压、压力、流量、流速和开关量都是常用的主要被控参数。
例如:在冶金工业、化工生产、电力工程、造纸行业、农业生产、机械制造和食品加工等诸多领域中,人们都需要对各类加热炉、热处理炉、反应炉、锅炉和温室中的温度进行检测,来达到有效的测量、控制和调节作用。
而在变电所、银行、温室等场所,需要一个非常明显的显示装置可以显示出现在的具体时间、安全运行天数、现场的温度、湿度值等。
这样可以给人们的生活生产带来很大的方便。
随着电子技术和微型计算机的迅速发展,微机测量和控制技术得到了迅速的发展和广泛的应用。
单片机具有处理能强、运行速度快、功耗低等优点,应用在温度测量与控制方面,控制简单方便,测量范围广,精度较高。
因此,基于单片机的温度测量系统的研究具有重大意义。
单片机课程设计方案—数字温度计

1 课题任务、功能要求说明及总体方案介绍1.1 课题目的随着社会的发展,温度的测量及控制变得越来越重要。
本文采用单片机STC89S52设计了温度实时测量及控制系统。
单片机STC89S52 能够根据温度传感器DS18B20 所采集的温度在数码管上实时显示,通过控制从而把温度控制在设定的范围之内。
所有温度数据均通过4位数码管LED显示出来。
系统可以根据时钟存储相关的数据。
通过该课程的学习使我们对计算机控制系统有一个全面的了解、掌握常规控制算法的使用方法、掌握简单微型计算机应用系统软硬的设计方法,进一步锻炼同学们在微型计算机应用方面的实际工作能力。
1.2 功能要求说明设计一个具有特定功能的数字温度计。
该数字温度计上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
测量温度范围0℃~99℃,测量精度小数点后两位,可以通过开始和结束键控制数字温度计的工作状态。
1.3 设计课题总体方案介绍及工作原理说明1.3.1设计课题总体方案(1>根据设计要求,选择AT89C52单片机为核心器件。
(2>温度检测器件采用DS18B20数字式温度传感器。
与单片机的接口为P3.6引脚。
(3>键盘采用独立式按键,由三个按键组成,分别是:设置键<SET),加一建<+1),确认键<RET)。
(4>SET键<上下限温度设置键):当该键按下时,进入上下限温度设置功能。
通过P0.1引脚接入。
(5>+1键<加一调整键):在输入上下限温度时,该键按下一次,被调整位加一。
通过P0.2引脚接入。
(6>RET键<确认键):当该键按下时,指向下一个要调整的位。
通过P0.3引脚接入。
1.3.2 工作原理说明本课题以是80S52单片机为核心设计的一种数字温度控制系统,利用温度传感器DS18B20可以直接读取被测温度值,进行转换的特性,模拟温度值经过DS18B20处理后转换为数字值,然后送到单片机中进行数据处理,并与设置的温度报警限比较,超过限度后通过扬声器报警。
电子时钟带温度显示

摘要本文介绍了一款基于AT89S51单片机控制的带有温度显示的电子钟的设计,通过多功能数字钟带有温度的设计思路,详细叙述了系统硬件、软件的具体实现过程。
论文重点阐述了数字钟硬件中MCU模块、温度模块、时钟模块、显示模块和相关控制模块等的模块化设计与制作;软件同样采用模块化的设计,包括中断模块、温度模块、时间调整模块设计,并采用简单流通性强的C语言编写实现。
本设计实现了时间的修改功能和年、月、日和星期的显示和温度显示功能。
关键词:单片机; C语言编程; DS1302时钟芯片;DS18B20;温度传感器前言单片微型计算机是随着超大规模集成电路技术的发展而诞生的,由于它具有体积小、功能强、性价比高等特点,所以广泛应用于电子仪表、家用电器、节能装置、军事装置、机器人、工业控制等诸多领域,使产品小型化、智能化,既提高了产品的功能和质量,又降低了成本,简化了设计。
本文主要介绍由单片机控制的带有温度显示的电子钟的设计。
随着人们生活水平的日益提高,人们对生活的要求越来越高,原有的事物已经不能满足人们的生活需求了,一些带有新功能的事物已经在慢慢的取代旧事物。
就像电子钟一样,人们用电子钟不仅仅只是看时间了,人们还需要看温度了。
越来越多的新功能更贴近人们的生活了,所以也越来越受人们所喜欢。
带有温度的的电子钟可以使人们随时都可以了解温度的变化。
1.系统实现功能、设计方案论证及芯片介绍1.1. 设计要求本设计准备实现的功能:(1) 万年历(2) 三键调时(设置键,+键,-键)(3) 可每次增减一进行时间调节(4) 按键蜂鸣器提示(5) 温度显示2. 方案论证与设计2.1. 设计方案论证方案一:用主芯片为AT89C51的单片机控制实现,使用单片机内部的定时计数器实现时间的设定,使用按键进行时间的调整和定时,按键有蜂鸣器提示,温度传感器使用DALLAS公司生产的单总线式数字温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配处理器等优点,特别适用于构成多点温度测控系统,可直接将温度转化成串行数字信号(提供9位二进制数字)给单片机处理,且在同一总线上可以挂接多个传感器芯片。
智能仪器课程设计报告

智能型温度测量仪报告题目:智能型温度测量仪院别:机电工程与自动化专业:生产过程自动化技术班级: xxx姓名: xxxXxxXxx指导老师: xxx目录引言................................................. 错误!未定义书签。
一、系统设计任务及要求........................................... - 2 -1.1系统设计任务 (2)1.2系统设计的基本要求 (2)1.3系统概述 (2)二、系统总体设计................................................. - 2 -整体设计方案的确定 (2)三、硬件电路设计及工作原理....................................... - 3 -3.1参数采集模块设计 (3)3.2显示温度模块和显示时钟介绍 (3)3.3具体硬件电路原理分析 (4)四、软件设计...................................................... - 7 -4.1主程序流程图 (7)4.2DS18B20温度读取程序(如图9) (8)4.3DS18B20温度传感器初始化 (8)4.4读出温度子程序 (9)4.5DS18B20的读写时序 (10)4.6按键流程图 (12)五、主要技术指标的测量........................................... - 12 -六、结论......................................................... - 13 -结束语........................................................... - 14 -附录:硬件原理图.................................................. - 15 -引言:温度是日常生活、工业、医学、环境保护、化工、石油等领域最常遇到的一个物理量,也是工业控制中主要的被控参数之一。
单片机原理与应用实验报告——温度测量显示及设定

《单片机原理与应用》课程实验报告院系:班级:学生:学号:指导教师:设计时间:哈尔滨工业大学1 实验的目的、内容和设备1.1 实验的目的单片机综合实验的目的是训练单片机应用系统的编程及调试能力,通过对一个单片机应用系统进行系统的编程和调试,掌握单片机应用系统开发环境和仿真调试工具及仪器仪表的实用,掌握单片机应用程序代码的编写和编译,掌握利用单片机硬件仿真调试工具进行单片机程序的跟踪调试和排错方法,掌握示波器和万用表等杆塔工具在单片机系统调试中应用。
1.2 实验内容实验的内容是利用APP001开发板实现一个温度测量显示和控制的单片机应用系统,利用APP001开发板上的温度传感器测量温度,通过键盘输入一个稳定设定值,当测量温度高于设定温度时发出声音报警,开启散热风扇开关,并在LCD上显示实时温度值,设定温度值和散热风扇的开关状态,其中日期和时间利用单片机的定时器来产生,并能通过键盘来设定。
通过该实验学习和掌握以下的内容:1)MPLAB开发环境的使用,程序编写和排错及软件仿真2)利用MPLAB和ICD2对程序进行在线仿真和调试3)使用万用表和示波器等仪器对硬件系统进行测量和调试4)PIC18F452单片机的I/O和PWM驱动及编程方法5)PIC18F452单片机LCD和键盘接口及编程方法6)PIC18F452单片机的USART编程及与PC机的通讯方法7)利用Timer1外接32.768kHz的晶振产生RTC1.3 实验设备1)运行MPLAB的PC机2)示波器、万用表3)直流电源4)ICD2仿真器5)APP001多功能实验板2 总体设计2.1 硬件总体设计系统组成方案图1系统框图2.2 软件总体设计图2主程序框图图3 中断程序框图3 硬件设计1)散热风扇开发输出控制:实验中我们利用一个LED来模拟风扇状态,当散热风扇开关打开时,LED被点亮发光,当散热风扇关闭时,LED不发光。
开发板上的指示灯D11由RB2,低电平亮,高电平灭。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子工艺课程设计报告题目温度测量及时钟显示的设计姓名季琪源学号 20092305914院系滨江学院专业电子信息工程组员季琪源、邢卫国二O一二年五月南京信息工程大学电子信息工程系,南京 210044基于AT89S52单片机温度测量及时钟显示设计摘要:本设计主要是温度测量及时钟显示的设计,由单片机AT89S52芯片和DS18B20芯片及1602液晶显示为核心,辅以必要的电路来设计制作完成。
它是低功耗、高性能的CMOS型8位单片机。
片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。
另外, AT89S52的指令系统和引脚与51完全兼容,片内有128B 的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。
由于其功能的实现主要通过软件编程来完成,降低了硬件电路的复杂性,而且其成本也有所降低,所以在该设计中采用单片机利用AT89S52。
并且AT89S52单片机结合1602液晶显示器的设计,在显示方面比数码管更简单,不用送段码和位码只需键入所要输出的数字或单词即可。
关键字:AT89S52、DS18B20、数字钟一、引言:数字钟是采用数字电路实现对时分秒数字显示的计时装置,广泛用于个人家庭、办公室等公共场所,已成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体与振荡器的广泛应用,使得数字钟的精度远远超过老式钟表,而且大大地扩展了钟表原先的报时功能,这些的实现都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
二、设计目的与要求2.1设计目的⑴.进一步掌握单片机的原理及其功能。
学会利用单片机做一些简单的电子设计与制作。
⑵.熟悉DS18B230温度传感器的作用及其原理,会利用其进行温度的测量。
⑶.通过此次的电路焊接和调试提高自己的动手及其分析问题的能力。
2.2设计要求1.以MCS-51系列单片机为核心器件,组成一个电子时钟系统。
2.系统显示器由4位LED数码管组成,分别显示时间值的小时和分,以24h (小时)计时方式。
3.能够使用按键开关随时对当前时间进行调整。
2.3系统的主要功能通过DS18B20进行温度的测量,再由一条I/0数据端口与单片机进行通信,最后将结果显示在数码管上,实现温度检测的功能,另外在单片机上编写一个时钟程序同时在显示器上显示出来,实现时钟显示的功能。
小组分工情况邢卫国主要负责软件部分,主要工作是编写程序,画电路图。
季琪源主要负责焊接电路与报告的撰写,一起完成了本次课程设计的任务。
三、设计方法步骤及设计原理3.1原理框图为了实现LED显示器的数字显示,可以采用静态显示法和动态显示法。
由于静态显示法需要数据锁存器等硬件,接口复杂一些。
考虑时钟显示只有4位,且系统没有其他复杂的处理任务,所以决定采用动态扫描法实现LED的显示。
单片机采用易购的AT89S52系列,这样单片机可具有足够的空余硬件资源实现其它的扩充功能。
图3—1总设计方框图3.2原理说明采用AT89S52单片机,最小化应用设计;采用共阴七段LED显示器,P0口输出段码数据,P1.0~P1.7口作列扫描输出,P2.0,P2.1,P2.2,P2.3,P2.4,口接五个按钮开关,用以调时功能设置,P2.5口接温度传感器用于温度的测量。
为了提供共阴LED数码管的驱动电压,用9013三极管作电源驱动输出。
采用12MHz晶振,有利于提高通信波特率的准确性。
为了提高驱动能力在P0口,P1口和数码管之间要接上9013三极管,Proteus中不需接也可以正常显示,复位电路和晶振电路没接不影响仿真。
整体线路设计如下:图3—2总设计原理图3.3晶振及复位电路3.4 系统仿真点击仿真后默认显示时间按下P2.3口上的开关后切换显示温度按下P2.4口上的开关后切换显示时间四、软件流程图及程序设计(1)主程序本设计中,计时采用定时器T0中断完成,其余状态循环调用显示子程序,当端口开关按下时,转入相应功能程序。
(2)LED显示子程序数码管显示的数据存放在内存单元wei[0]- wei[7]中。
其中 wei [0]- wei [1]存放时数据,wei [2]- wei [3]存放分数据,wei [4]- wei [5]存放秒数据,每一地址单元内均为十进制BCD码。
由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应码段存放在ROM表(tab[11]中。
显示时,先取出wei [0]- wei [7]中的某一数据,然后查得对应的显示用码段,并从P0口输出,P3口将对应的数码管选中供电,就能显示该地址单元的数据值。
(3)定时器T0中断服务程序定时器T0用于时间计时。
中断进入后,时钟计时累计中断达1秒时,对秒计数单元进行加1操作。
在计数单元中采用十进制BCD码计数,满60进位,T0中断服务程序执行。
流程见下图:图4—1主程序流图图4—2子程序流图图4—4 温度转换流程图图4—3 读温度流程图四、系统调试及总结分析(附上实物照片)单片机应用系统的调试包括硬件和软件两部分,但是他们并不能完全分开。
一般的方法是排除明显的硬件故障,再进行综合调试,排除可能的软/硬件故障。
1.系统性能测试与功能说明走时:默认为走时状态,按24小时制分别显示“时时.分分.秒秒”,时间会按实际时间以秒为最少单位变化。
走时调整:按一下minute加一分;对时进行调整,按一下hour加一小时,从而达到快速设定时间的目的。
2.系统时钟误差分析时间是一个基本物理量,具有连续、自动流逝、不重复等特性。
我国时间基准来自国家授时中心,人们日常使用的时钟就是以一定的精度与该基准保持同步的。
结合时间概念和误差理论,可以定义电子钟的走时误差S=S1-S2,S1表示程序实际运行计算所得的秒;S2表示客观时间的标准秒。
S>0时表示电子钟秒单元数值刷新滞后,即走时误差为“慢”;反之,S<0表示秒单元数值的刷新超前,即走时误差为“快”。
本次设计的单片机电子钟系统中,其误差主要来源包括晶体频率误差,定时器溢出误差,延迟误差。
晶体频率产生震荡,容易产生走时误差;定时器溢出的时间误差,本应这一秒溢出,但却在下一秒溢出,造成走时误差;延迟时间过长或过短,都会造成与基准时间产生偏差,造成走时误差。
3.软件调试问题及解决软件程序的调试一般可以将重点放在分模块调试上,统调是最后一环。
软件调试可以采取离线调试和在线调试两种方式。
前者不需要硬件仿真器,可借助于软件仿真器即可;后者一般需要仿真系统的支持。
本次课题,Keil软件来调试程序,通过各个模块程序的单步或跟踪调试,使程序逐渐趋于正确,最后统调程序。
五、注意事项与心得体会1.实习中的连线问题:使用了为了提供共阴LED数码管的驱动电压,用74LS244作电源驱动输出。
由P0口输出驱动数码管的段选择,而P3口的输出接上2803芯片驱动数码管的位选择。
在连线时要注意芯片端口号和引脚号的区别,所以我参考了老师给我们的芯片资料,感觉非常有用,不但帮我们完成了线路图的连接,而且对于我们以后的学习也是非常有用的。
对于数码管的段端口号和位端口号的确定有一定的困难,开始连线时我没有自己确定端口号,而是直接参考王老师连得电路图,感觉非常困难,后来我想到数码管就是由一个一个的二极管组成的,我为什么不用外用表自己来测量呢?这样既可以完成实验操作,而且还可以提高自己动手解决问题的能力。
弄清原理后我很快确定好了数码管各个端口号对应的芯片引脚。
P1.0,P1.1和P1.2是开关调节按钮,具体功能下面叙述,连线比较简单。
对于这次连线总的来说还是比较简单的,可能一个看起来很复杂的电路图,如果我们能够弄清楚原理,那么就非常简单。
同样对于我们学习也是这样的,遇到困难不能退缩,如果那样的话,那么也许我们永远不能够解决问题。
2.程序的编写过程我们在大一时学习了C语言,当时不知道它有什么具体的作用,无非不就是编写一些简单无聊的程序。
通过这次单片机的实习,我充分认识到C语言的强大功能。
现在有点后悔当初没有好好学习这门语言。
上学期学习单片机基础知识时我们主要是应用汇编语言编写程序,但是对于一些大型复杂的程序,可能汇编语言会很复杂。
如何解决这个问题呢?实习老师向我们讲解了C51语言的强大功能,让我们到图书馆找一些资料学习一下。
经过两个星期的系统学习,我基本掌握了编程思想和一般的方法。
3.心得体会这是我又一次用单片机做成功的小制作硬件。
在制作过程中,我对51单片机的了解进一步的加深,对KEIL软件的使用更加灵活,对Proteus模拟软件有了初步的了解。
查阅相关电子毕业论文网站,对论文的书写也有了流程框架。
我学到了许多自己以前没有接触过的知识,真是受益匪浅。
经过一次次的使用Proteus也是我在学习单片机中不可缺少的系统仿真软件工具,它是现在市场上用来软件仿真最为重要的之一。
在写报告时Microsoft –word也是不可缺少的办公软件,以前我对这个软件很陌生,通过这次的报告的编写,我对它的运用得到了进一步的认识。
附录:#include"reg52.h"unsigned char tempL=0,tempH=0; // 设置全局变量unsigned int temperature;unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};unsigned char code tab1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//带小数点的数unsigned char wei[]={0x10,0x20,0x40,0x80,0x01,0x02,0x04,0x08};unsigned int dua[]={0,0,10,0,0,10,0,0};unsigned int dispbuf[]={0,0,0};unsigned int hour=12;unsigned int minite=0;unsigned int second=0;unsigned int tcnt=0;sbit key1=P2^0;sbit key2=P2^1;sbit key3=P2^2;sbit key4=P2^3;sbit key5=P2^4;sbit DQ=P2^5; //数据传输线接单片机的相应的引脚/******************************************************************/void delay(int x) //延时程序{whil e(x--);}//**********************************************//初始化程序void Init_DS18B20(void){unsigned char x=0;DQ=1; //DQ先置高delay(8); //稍延时DQ=0; //发送复位脉冲delay(85); //延时(>480us)DQ=1; //拉高数据线delay(14); //等待(15-60us)x=DQ; //delay(20);}//**********************************************//读一个字节ReadOneChar(void){unsigned char i=0;unsigned char dat=0;for(i=8;i>0;i--){DQ=1;delay(1);DQ=0;dat>>=1;DQ=1;if(DQ)dat|=0x80;delay(4);}return(dat);}//*********************************************** //写一个字节void WriteOneChar(unsigned char dat){unsigned char i=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;delay(5);DQ=1;dat>>=1;}delay(4);}//****************************** ReadTemperature(void){Init_DS18B20();WriteOneChar(0xcc);WriteOneChar(0x44);delay(125);Init_DS18B20();WriteOneChar(0xcc);WriteOneChar(0xbe);tempL=ReadOneChar();tempH=ReadOneChar();temperature=(tempH*256)+tempL;return (temperature);}//*****************************************void Dispbuf(unsigned int temper){dispbuf[2]=(temper>>4)/10;dispbuf[1]=(temper>>4)%10;if(temper&0x8)dispbuf[0]=0x55;else dispbuf[0]=0;}void display1(){int i;P0=0xff;for(i=0;i<3;i++){ReadTemperature();Dispbuf(temperature);if(i==1){P1=wei[i];P0=tab1[dispbuf[i]];delay(200);}else{P1=wei[i];P0=tab[dispbuf[i]];delay(200);}}}//时钟显示**************************************** void display(){int i;dua[0]=second%10;dua[1]=second/10;dua[3]=minite%10;dua[4]=minite/10;dua[6]=hour%10;dua[7]=hour/10;P1=wei[i];P0=tab[dua[i]];delay(2);i++;if(i==8){i=0;}}void keyscan(){if(key1==0){delay(10);if(key1==0){second++;if(second==60){second=0;minite++;}whil e(key1==0){display();}}}if(key2==0){delay(10);if(key2==0){minite++;if(minite==60){minite=0;hour++;}whil e(key2==0){display();}}}if(key3==0){delay(10);if(key3==0){hour++;if(hour==24){hour=0;}whil e(key3==0){display();}}}}/******************************************************************//* 主函数*/ /******************************************************************/void main(){TMOD=0x02;TH0=0x06;TL0=0x06;TR0=1;ET0=1;EA=1; //中断允许whil e(1){if(key4==0){whil e(key5==1){display1();}}if(key5==0){whil e(key4==1){keyscan();display();}}keyscan();display();}}void t0() interrupt 2 {tcnt++;if(tcnt==4000) {tcnt=0;second++;if(second==60){second=0;minite++;if(minite==60){minite=0;hour++;if(hour==24){hour=0;}}}}}。