基于AT89C51单片机的数字温度计毕业设计 - 图文

更新时间:2023-12-26 20:38:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

CHANGZHOU INSTITUTE OF TECHNOLOGY

题目:

科研实践

基于单片机的数字温度计的设计

1

目录

目录 ................................................................................................................ 2矚慫润厲钐瘗睞枥庑赖。 1.绪论 ............................................................................................................. 3聞創沟燴鐺險爱氇谴净。 1.1课题研究背景及意义 ....................................................................... 3残骛楼諍锩瀨濟溆塹籟。 1.2课题研究的内容 ............................................................................... 3酽锕极額閉镇桧猪訣锥。 2.数字温度计的系统概论 .............................................................................. 5彈贸摄尔霁毙攬砖卤庑。 2.1系统的功能 ....................................................................................... 5謀荞抟箧飆鐸怼类蒋薔。 2.2温度计的分析 ................................................................................... 5厦礴恳蹒骈時盡继價骚。 3.设计方案和要求 .......................................................................................... 6茕桢广鳓鯡选块网羈泪。 3.1设计任务和要求 ............................................................................... 6鹅娅尽損鹌惨歷茏鴛賴。 3.2元器件的选取 ................................................................................... 6籟丛妈羥为贍偾蛏练淨。 3.3系统最终设计方案 ........................................................................... 7預頌圣鉉儐歲龈讶骅籴。 4.硬件设计...................................................................................................... 8渗釤呛俨匀谔鱉调硯錦。 4.1总体设计结构图 ............................................................................... 8铙誅卧泻噦圣骋贶頂廡。 4.2硬件电路概述 ................................................................................... 8擁締凤袜备訊顎轮烂蔷。 4.2.1最小系统 ................................................................................ 8贓熱俣阃歲匱阊邺镓騷。 4.2.2输入电路设计 ...................................................................... 11坛摶乡囂忏蒌鍥铃氈淚。 4.2.3输出电路设计 ...................................................................... 12蜡變黲癟報伥铉锚鈰赘。 5.硬件仿真.................................................................................................... 15買鲷鴯譖昙膚遙闫撷凄。 6.实物制作.................................................................................................... 18綾镝鯛駕櫬鹕踪韦辚糴。 6.1电路板焊接 ..................................................................................... 18驅踬髏彦浃绥譎饴憂锦。 6.2电路板调试 ..................................................................................... 19猫虿驢绘燈鮒诛髅貺庑。 7.小结 ........................................................................................................... 20锹籁饗迳琐筆襖鸥娅薔。 附录 .............................................................................................................. 21構氽頑黉碩饨荠龈话骛。 1.参考文献 ............................................................................................ 21輒峄陽檉簖疖網儂號泶。 2.原理图 ................................................................................................ 22尧侧閆繭絳闕绚勵蜆贅。 3.元器件清单 ........................................................................................ 23识饒鎂錕缢灩筧嚌俨淒。 4.软件程序 ............................................................................................ 24凍鈹鋨劳臘锴痫婦胫籴。 5.实物图 ................................................................................................ 31恥諤銪灭萦欢煬鞏鹜錦。

2

1.绪论

1.1课题研究背景及意义

单片机技术作为计算机技术的一个分支,广泛地应用于工业控制,智能仪器仪表,机电一体化产品,家用电器等各个领域。“单片机原理与应用”在工科院校各专业中已作为一门重要的技术基础课而普遍开设。学生在课程设计,毕业设计,科研项目中会广泛应用到单片机知识,而且,进入社会后也会广泛接触到单片机的工程项目。鉴于此,提高“单片机原理及应用”课的教学效果,让学生参与课程设计实习甚为重要。单片机应用技术涉及的内容十分广泛,如何使学生在有限的时间内掌握单片机应用的基本原理及方法,是一个很有价值的教学项目。为此,我们进行了“单片机的学习与应用”方面的课程设计,锻炼学生的动脑动手以及协作能力。鯊腎鑰诎褳鉀沩懼統庫。 单片机课程设计是针对模拟电子技术,数字逻辑电路,电路,单片机的原理及应用课程的要求,对我们进行综合性实践训练的实践学习环节,它包括选择课设任务、软件设计,硬件设计,调试和编写课设报告等实践内容。通过此次课程设计实现以下三个目标:第一,让学生初步掌握单片机课程的试验、设计方法,即学生根据设计要求和性能约束,查阅文献资料,收集、分析类似的相关题目,并通过元器件的组装调试等实践环节,使最终硬件电路达到题目要求的性能指标;第二,课程设计为后续的毕业设计打好基础,毕业设计是系统的工程设计实践,而课程设计的着眼点是让学生开始从理论学习的轨道上逐渐引向实际运用,从已学过的定性分析、定量计算的方法,逐步掌握工程设计的步骤和方法,了解科学实验的程序和实施方法。第三,培养学生勤于思考乐于动手的习惯,同时通过设计并制作单片机类产品,使学生能够自己不断地学习接受新知识(如在本课设题目中存在智能测温器件DS18B20,就是课堂环节中不曾提及的“新器件”),通过多人的合作解决现实中存在的问题,从而不断地增强学生在该方面的自信心及兴趣,也提高了学生的动手能力,对学生以后步入社会参加工作打下一定良好的实践基础。硕癘鄴颃诌攆檸攜驤蔹。

1.2课题研究的内容

本文主要介绍了一个基于AT89C51单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机喜爱的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也进行一一介绍,该系统可以方便的是实现温度采集和显示,并可以根据需要任意设定上下限报警温度,它使用起来方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合我们日常生活和工农业生产中的温度测量,也可以当做温度

3

处理模块嵌入其他系统中,作为其他主系统的辅助扩展。DS18B20和AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合与恶劣环境下进行现场温度测量,有广泛的应用前景。阌擻輳嬪諫迁择楨秘騖。 本设计首先是确定目标,气候是各个功能模块的设计,再在Proteus软件上进行仿真,修改,仿真。

本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。

4

2.数字温度计的系统概论

2.1系统的功能

此数字温度计是基于51单片机,18B20,四位数码管,led发光二级管,按键等阻容元件设计制作而成,系统工作稳定,能够很好的测量出温度值,并显示。此系统带有温度报警指示功能。氬嚕躑竄贸恳彈瀘颔澩。

2.2温度计的分析

元件设计的意义:

关于按键:共设计了4个独立按键,一个为进入调整上下限的功能键,一个为加,一个为减,另一个为确定设置键,按下调整键进入上限设置,右边红色二极管亮,设置完上限按确定键,延时并且蜂鸣器响1下,绿二极管亮,自动进入下限设置。设置完下限按确定键蜂鸣器响2下,进入温度正常显示状态。釷鹆資贏車贖孙滅獅赘。 关于发光二极管:共设计了三个发光二极管,一个为电源指示,另外两个分 别为上下限指示或温度报警指示。当进入调整上限时红色的亮,进入下限时绿色的亮。当正常显示温度时,温度高于上限红色的亮,低于下限时绿色的亮。怂阐譜鯪迳導嘯畫長凉。 关于蜂鸣器:作为报警或者调整上下限时提示用,当前温度高于上限或者低 于下限蜂鸣器鸣响!从上限设置跳到下限设置时,蜂鸣器响一下,确定下限设置时蜂鸣器响两下。

关于数码管:当温度为正时,显示温度值,温度为负时,最高位显示“-”, 温度数据精确到小数点后一位。

系统采用5v直流供电,通电前注意电源正负极,以及电源接口是否匹配。

5

3.设计方案和要求

3.1设计任务和要求

1、基本范围15℃——42℃ 2、精度误差小于0.5℃ 3、LED 数码直读显示

4、可以任意设定温度的上下限报警功能.

3.2元器件的选取

单片机芯片的选取: 方案一:

采用89C51芯片作为硬件核心,利用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。谚辞調担鈧谄动禪泻類。 方案二:

采用AT89C51单片机与MCS-51系列单片机相比有两大优势:第一,片内程序存储器采用闪存,使程序的写入更加方便;第二,提供了更小尺寸的芯片,使整个硬件电路的体积更小,且管脚数目为20个,与MCS-51相比减少一倍,使理解更容易。嘰觐詿缧铴嗫偽純铪锩。 综上所述:本课设中单片机芯片采用AT89C51。 温度传感器的选取: 方案一:

采用热敏电阻传感器。利用热敏电阻随温度变化而显著变化,能直接将温度的变化转换为能量的变化,进而制成温度计。但是其测温传感器比较复杂,而且不易通过编制程序来控制测温精度,增大系统设计的难度。熒绐譏钲鏌觶鷹緇機库。 方案二:

采用DS18B20温度传感器。DS18B20的内部3脚(或8脚)封装;使用特有的温度测量技术,将被测温度转换成数值信号;3.0~5.5V的电源供电方式和寄生电源供电方式;ROM由64位二进制数字组成,共分为8个字节;RAM由9个字节的高速暂存器和非易失性电擦写ROM组成。鶼渍螻偉阅劍鲰腎邏蘞。 综上所述:温度传感器选取智能测温器件DS18B20。

6

3.3系统最终设计方案

综上各方案所述,对此次课设的方案选定: 采用AT89C51作为主控制系统; 1602液晶显示模块芯片作为温度数据显示装置;而智能温度传感器DS18B20器件作为测温电路主要组成部分。至此,系统最终方案确定。纣忧蔣氳頑莶驅藥悯骛。

7

4.硬件设计

4.1总体设计结构图

图4-1 总体设计结构图

4.2硬件电路概述 4.2.1最小系统

晶振电路

晶振采用12MHz,分别接入到X1与X2端中。同时在晶振两端各接一个22pF 的电容,每个电容的另一端再接入到地。

8

图4-2 晶振电路

复位电路

复位电路采用的是上电复位。如图所示,在RST复位输入引脚上接一电容至 Vcc端,下接一个电阻到底。线路上接一按钮,通过按下按钮,复位电路通 过电容给RST一个短暂的高电平信号。达到复位状态。

图4-3 复位电路

9

单片机

本设计采用的单片机是AT89C51。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。颖刍莖蛺饽亿顿裊赔泷。

图4-4 AT89C51引脚图

电源电路

78系列集成稳压器是常用的固定输出电压的集成稳压器。它的内部含有限流保护,采用了噪声低,温度漂移小的基准电压源,工作稳定可靠。78系列集成稳压器为三端器件:1脚为输入端,2脚为接地端,3脚为输出端,使用十分方便。78系列集成稳压器典型应用电路如下,这是一个输出5V直流电压的稳压电源电

10

路。IC采用集成稳压器7805,C1,C2分别为输入端和输出端的滤波电容,RL为负载输出电阻。当输出电流较大时,7805应配上散热板。濫驂膽閉驟羥闈詔寢賻。

图4-5 电源电路

4.2.2输入电路设计

按键电路

关于按键:共设计了4个独立按键,一个为进入调整上下限的功能键,一个为加,一个为减,另一个为确定设置键,按下调整键进入上限设置,右边红色二极管亮,设置完上限按确定键,延时并且蜂鸣器响1下,绿二极管亮,自动进入下限设置。设置完下限按确定键蜂鸣器响2下,进入温度正常显示状态。銚銻縵哜鳗鸿锓謎諏涼。

图4-6 按键电路

11

测温电路

测温电路方面,我们选择的温度传感器是DS18B20.这是美国DALLAS半导体公司最新推出的一种改进型只能温度传感器,不同于传统的热敏电阻,DS18B20能够直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字读书方式。DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图4所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。当DS18B20 处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。这里我们把温度传感器的DQ端与P23相接,以P23作为温度输入口。温度传感器VCC端接电源,GND端接地端。如下图所示挤貼綬电麥结鈺贖哓类。

图4-7 测温电路

4.2.3输出电路设计

显示电路

关于发光二极管:共设计了三个发光二极管,一个为电源指示,另外两个分别为上下限指示或温度报警指示。当进入调整上限时红色的亮,进入下限时绿色

12

的亮。当正常显示温度时,温度高于上限红色的亮,低于下限时绿色的亮。赔荊紳谘侖驟辽輩袜錈。 LED发光二极管的压降一般为1.5~2.0 V,其工作电流一般取10~20 mA为宜。 电阻 R=U/I ,计算得出范围在250Ω--500Ω间,在这里取470Ω。

图4-8 温度上下限报警灯

图4-9 电源指示灯

关于数码管:显示温度,温度数据精确到小数点后一位。数码管使用条件:a、段及小数点上加限流电阻b、使用电压:段:根据发光颜色决定;小数点:根据发光颜色决定c、使用电流:静态:总电流80mA(每段10mA);动态:平均电流4-5mA峰值电流 100mA。塤礙籟馐决穩賽釙冊庫。 静态电阻 R=U/I=5V/10mA=500Ω

13

为了使数码管正常工作,所需电流应大于静态电流值,故电阻要小于静态电阻,故取470Ω。

图4-10 数码管

14

5.硬件仿真

1.设置温度上限为42度,温度下限为15度。

上限温度

15

下限温度

2.如图所示。此时温度为38度,温度在规定范围内,绿灯指示,不报警。

3.如图所示。此时温度为45度,超过上限温度,红灯指示并报警。

16

4如图所示。此时温度为10度,低于下限温度,红灯指示并报警。

17

6.实物制作

6.1电路板焊接

一、元器件在电路板插装的要求:

①元器件在电路板插装的顺序是先低后高,先小后大,先轻后重,先易后难,先一般元器件后特殊元器件,且上道工序安装后不能影响下道工序的安装。裊樣祕廬廂颤谚鍘羋蔺。 ②元器件插装后,其标志应向着易于认读的方向,并尽可能从左到右的顺序读出。 ③有极性的元器件极性应严格按照图纸上的要求安装,不能错装。

④元器件在电路板上的插装应分布均匀,排列整齐美观,不允许斜排、立体交叉和重叠排列;不允许一边高、一边低,也不允许引脚一边长、一边短。仓嫗盤紲嘱珑詁鍬齊驁。

二、插装元器件焊接规范:

1、电阻器的插装:

①、看电阻器上的色环(高精度金属膜电阻器)或电阻器上的标示字符排列顺序(高精度低温漂电阻器),确定电阻值是否正确,如有色环不全(字迹不清晰)或封装有破损的需更换器件;绽萬璉轆娛閬蛏鬮绾瀧。 ②、弯脚插装,根据插装孔的实际间距对比电阻器的引脚,用镊子夹住引脚平移到合适位臵后快速将引脚弯下,以两引脚插装后能自行稳固为宜,同时使电阻离印制板面高度为2mm左右;骁顾燁鶚巯瀆蕪領鲡赙。 ③、插装时注意电阻器的正反方向,正向应为从左到右前四个色环之间间隙较小,与第五个色环间隙相对较大(高精度低温漂电阻器的正反判断和集成电路相同);反之则为反向。正确的插装方式应为正向插装;瑣钋濺暧惲锟缟馭篩凉。 ④、若是纵向排列,则按色环排列,上面四个环间隙较小,第五个环与前四个色环间隙较大(高精度金属膜电阻器)或电阻器上的表示字符为从上到下排列(高精度低温漂电阻器)。鎦诗涇艳损楼紲鯗餳類。

2、电容的插装:

①、看电容上的文字标识,确定使用产品与器件表无误,如有封装损坏、字迹模糊或断腿则需更换器件; ②、弯腿插装, 根据插装孔的实际间距对比电容的引脚,用镊子夹住引脚平移到合适位臵后快速将引脚弯下,以两引脚插装后能自行稳固为宜,同时使电容离印制板面高度为2mm左右; 栉缏歐锄棗鈕种鵑瑶锬。 ③、电容排列要保证其标识字方向一致,便于观测。焊盘左右排列的电容应使标识字面朝操作者,焊盘上下排列的电容应使标识字面向操作者左边方向。(电路板正面向上)辔烨棟剛殓攬瑤丽阄应。

3、二极管的焊接

18

正确辨认正负极后按要求装入规定位臵,型号及标记要易看得见,焊接要求可参考电阻的要求。

4、集成电路器件的插装:

①、如器件引脚弯曲,则用镊子夹住弯曲引脚所在面所有引脚轻轻捏合以矫正; ②、如有引脚端裂或断则视为器件损坏,不予使用需更换新器件;

③、在进行插装的时候要注意器件的正反,面对器件时,器件上的标号字符应为由左到右排列。

6.2电路板调试

最小系统的电路不工作,首先应该确认电源电压是否正常。用电压表测量接地引脚跟电源引脚之间的电压,看是否符合电源电压,常用的是5V左右。接下来就是检测复位引脚的电压是否正常,EA引脚的电压要正常为5V左右。峴扬斕滾澗辐滠兴渙藺。 如果补焊电源后最小系统还是不能工作,有可能是AT89C52单片机坏掉了,重新选择一个AT89C52单片机焊接。如果是工作但是不能按需要的功能执行,也可用更换AT89C52单片机方法调试,但在此之前可以选择检查对应的模块是否有焊接问题,若没有再进行更换。詩叁撻訥烬忧毀厉鋨骜。

19

7.小结

这次设计,首次动手自己设计电路。把以往所学的理论知识投入到实际应用当中,加强了对课本上面知识的了解。在设计过程中,针对测温电路这方面,研究了很长一段时间。一开始的选择是采用传统的热电阻,然后采集对应温度下的电流和电压,通过A/D电路进单片机处理来得出温度。这种方案的精度虽然高很多,测温范围也广,但是电路的设计复杂了很多,在编程方面也复杂了很多。后来参考相关资料,最终选定了以DS18B20作为温度传感器来设计测温电路,通过补偿提高精度。在设计过程中,遇到了最大的问题就是对单片机芯片不熟。各端口的作用搞不清,在设计过程中需要不断翻书查看。通过这样,加固了对以前所学知识的了解。经过两个星期的设计,通过不断翻查资料,不断学习,终于完成了这次的设计,并成功仿真。不仅提高了我们的学习兴趣,也让我真正懂得,要理论联系实际,对于以前学习的东西,如果不真正自己动手做一回,是很难真正弄懂的,只有自己认认真真动手做一回,学以致用,才能算是真正搞懂。则鯤愜韋瘓賈晖园栋泷。

20

附录

1.参考文献

[1] 高伟.单片机原理及应用[M].北京:国防工业出版社,2008年. [2] 蔡朝阳.单片机控制实习与专题制作[M].北京:北航出版社,2006年. [3] 范力旻.《单片机原理及应用技术》.电子工业出版社.

[4] 胡文金 杨健.《单片机应用技术实训教程》.重庆大学出版社.

[5] 杨加国.《单片机原理与应用及C51程序设计》.清华大学出版社,2006年. [6] 胡汉才.单片机原理与接口技术[M].北京:清华大学出版社,1998年. [7] 郭培源.电子电路及电子器件.高等教育出版社,2003年.

[8] 张齐 朱宁西.单片机应用系统设计实验(C51).电子工业出版社,2013年.

21

2.原理图

22

3.元器件清单

序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

名称 电阻 电阻 电阻 电阻 电阻 电容 电容 电容 电容 三极管 按键 DC电源座子 晶振 LED发光二极管 LED发光二极管 数码管 温度传感器 蜂鸣器 单片机 芯片座子 万能板 数量 10 5 1 1 1 1 1 1 1 5 4 1 1 2 1 1 1 1 1 1 1 规格型号 470 4.7k 3k 10k 1k 100uf 10uf 104pf 22pf 8550 12M 红色 绿色 DS18B20 Stc89c51 Dip40

23

4.软件程序

Main.h

#ifndef MAIN_H_ #define MAIN_H_

#include

#define uchar unsigned char #define uint unsigned int

void delay1m(uint x);//延时函数声明 void smg_scan();//显示函数声明

uint read_temperature();//读取温度数据函数声明 void convert(uint dat);//转换函数声明 void alarm_function();//报警函数声明

#endif

18B20.C

#include\#include

#define nops(); {_nop_(); _nop_(); _nop_(); _nop_();} //定义空指令胀鏝彈奥秘孫戶孪钇賻。 sbit DQ = P2^3;//18b20数据端 sbit red=P2^1;

bit flag;//温度正负标记,0正,1负

//============================时基为1ms的延时函数 void delay1ms(uint a) { while(a--); }

//============================18b20复位函数===============鳃躋峽祷紉诵帮废掃減。 void rst_18b20() { bit flag = 1; while(flag) { while(flag) { DQ = 1; delay1ms(1); DQ = 0;//拉低总线 delay1ms(50); DQ = 1; delay1ms(6);

24

flag = DQ; } delay1ms(40); flag = ~DQ; } DQ = 1; }

//==========================写一字节================= void write_byte(uchar dat) { uchar i; for(i = 0;i < 8;i++) { DQ = 1; _nop_(); DQ = 0; nops(); //4us DQ = dat & 0x01; delay1m(6); dat>>=1; } DQ = 1; }

//==========================读一字节================= uchar read_byte() { uchar dat,i; for(i = 0;i < 8;i++) { DQ = 1; _nop_(); dat >>= 1; DQ = 0; nops(); //4us DQ = 1;//释放总线准备读 nops(); //4us if(DQ) dat |= 0x80; delay1m(6); } DQ = 1; return(dat); }

//===========================读出温度高低八位===========

25

uint read_temperature() { uchar a,b; uint temp; rst_18b20();//复位18B20 write_byte(0xcc);//跳过ROM write_byte(0x44);//启动温度转换 delay1m(1);//延时等待 rst_18b20();//复位18B20 write_byte(0xcc);//跳过ROM write_byte(0xbe);// 发读命令 a = read_byte();//低字节 b = read_byte();//高字节 temp=(b<<8)|a; if(0==(temp&0x8000)) { flag=0;//正 } else if(0x8000==(temp&0x8000)) { flag=1;//负 temp=~temp+1; } temp=temp*0.0625*10+0.5;//保留一位小数,4舍5入,扩大10倍,显示时加个小数点稟虛嬪赈维哜妝扩踴粜。 return(temp); }

Main.C

//上限要大于下限,上限最大120℃,下限最小1℃ //温度测量范围 15℃···42℃,负温度时最高位显示“-”,正温度时直接显示温度 #include\

#define led P0// 数码管段选

sbit s1=P1^0;sbit s2=P1^1;sbit s3=P1^2;sbit s4=P1^3;//调整,+ ,-,确定,按下调整键进入上限设置,延时一小会自动进入下限设置陽簍埡鲑罷規呜旧岿錟。 sbit red=P2^1;sbit green=P2^0;//上下限指示或者报警指示

sbit wei4=P2^7;sbit wei3=P2^6;sbit wei2=P2^5;sbit wei1=P2^4;//位选com4---com1沩氣嘮戇苌鑿鑿槠谔應。 sbit alarm=P2^2;//蜂鸣器控制端

uchar code display[13] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0x7f}; //数码管驱动信号0---9,- ,灭,点钡嵐縣緱虜荣产涛團蔺。 uchar buf[4]={10,10,10,10};//数码管显示数据缓存,初始显示 - - - - 高位---低位懨俠劑鈍触乐鹇烬觶騮。 26

uint dat;//温度数据缓存 假设得到的是 1234显示时123.4 uchar num=0;//上下限调整标记,1上限,2下限 uint down=5,up=25;//下上限初始值5℃----25℃, extern bit flag;//正负温度标记,0正,1负 void main() { uchar i; down*=10;up*=10;//扩大方便显示 dat=read_temperature();//读温度 delay1m(600); while(1) { dat=read_temperature();//读温度 convert(dat);//转换数据 smg_scan();//显示 alarm_function();//报警 if(s1==0) { delay1m(3); if(s1==0) { num++;alarm=1;//进入上下限设置要关蜂鸣器 while(!s1);//等待按键弹起 } } if(num==1)//上限设置 { convert(up);num=2;red=0;green=1; do { smg_scan(); if(s2==0)//+ { delay1m(3); if(s2==0) {

up++; if(up>1200){up=250;} while(!s2);//等待按键弹起 convert(up); } } else if(s3==0)//- {

27

delay1m(3); if(s3==0) {

up--; if(up<=down){up=250;} while(!s3);//等待按键弹起 convert(up); } } }while(s4);//确定 alarm=0;delay1m(500);alarm=1;red=1;//延时一小会蜂鸣器提示,进入下限设置

謾饱兗争詣繚鮐癞别瀘。 } if(num==2)//下限设置 { convert(down);num=0;green=0;red=1; do { smg_scan(); if(s2==0)//+ { delay1m(3); if(s2==0) {

down++; if(down>=up){down=50;} while(!s2);//等待按键弹起 convert(down); } } else if(s3==0)//- { delay1m(3); if(s3==0) {

down--; if(down<10){down=50;} while(!s3);//等待按键弹起 convert(down); } } }while(s4); for(i=0;i<2;i++) {

28

alarm=0;delay1m(200);alarm=1;delay1m(200); } green=1;//上下限确定后蜂鸣器响两下 } } }

//===========================================数码管扫描显示函数==========================================================呙铉們欤谦鸪饺竞荡赚。 void smg_scan() { wei4=wei3=wei2=1;wei1=0;//最低位 led=display[buf[3]]; delay1m(3);led=0xff; wei4=wei3=wei1=1;wei2=0;//低位 led=display[buf[2]]&0x7f;//显示小数点 delay1m(3);led=0xff; wei4=wei1=wei2=1;wei3=0;//次高位 led=display[buf[1]]; delay1m(3);led=0xff; wei2=wei3=wei1=1;wei4=0;//高位 led=display[buf[0]]; delay1m(2);led=0xff; }

//===========================================ms级延时函数==================================================================莹谐龌蕲賞组靄绉嚴减。 void delay1m(uint x) {

uint i,j;

for(i=0;i

//==============================================数据转换函数==========================================================麸肃鹏镟轿騍镣缚縟糶。 void convert(uint dat) { buf[0]=dat/1000; buf[1]=dat/100;

29

buf[2]=dat/10; buf[3]=dat; if(flag==1)//如果温度为负 { buf[0]=10;//最高位显示【-】 if(buf[1]==0){buf[1]=11;}//如果此位为0,不显示 } else if(flag==0)//如果温度为正 { if(buf[0]==0){buf[0]=11;}//如果最高位为0,不显示 if((buf[0]==11)&&(buf[1]==0)){buf[1]=11;}//如果最高位不显示,并且此位为0,那么不显示納畴鳗吶鄖禎銣腻鰲锬。 } }

//=================================================报警函数==========================================================風撵鲔貓铁频钙蓟纠庙。 void alarm_function() { if(dat>up){alarm=0;red=0;green=1;}//大于上限,蜂鸣器响, else if(dat

30

5.实物图

31

本文来源:https://www.bwwdw.com/article/u3zx.html

Top