摘要
单片机自问世以来,性能不断提高和完善,其资源又能满足很多应用场合的需要,加之单片机具有集成度高、功能强、速度快、体积小、功耗低、使用方便、价格低廉等特点,因此,在工业控制、智能仪器仪表、数据采集和处理、通信系统、高级计算器、家用电器等领域的应用日益广泛,并且正在逐步取代现有的多片微机应用系统。单片机的潜力越来越被人们所重视。特别是当前用CMOS工艺制成的各种单片机,由于功耗低,使用的温度范围大,抗干扰能力强,能满足一些特殊要求的应用场合,更加扩大了单片机的应用范围,也进一步促使单片机性能的发展。而现在的单片机在农业上页有了很多的应用。
温度作为一个常用的物理量在我们的气场生活中起着十分重要的作用,所以对温度计的设计也十分必要。在此介绍一种智能数字温度计,这种温度计有许多优点,并且它的应用范围非常广泛。它的主要元件是:控制器—AT89C2051、温度传感器—DS18B20、数码管—LED,所以这种温度计不仅设计起来简单并且轻便、便宜,总体来说这种温度计的性价比是很高的。它的主要原理是利用DS18B20可以很好的转换温度值,并且直接显示温度值,它的性能优于传统的感温元件并且省去了A\D、和模拟开关的设计。此外AT89C52体积小并且还可以直接驱动LED,这样大大化简了设计的难度并且降低了成本。
关键词:单片机;DS18B20;温度传感器;数字温度计;AT89C52
目录
1 单片机简介 1
1.1单片机介绍 1
1.2单片机的特点 1
1.3单片机的应用 1
2 软件介绍 2
2.1Protel99SE简介 2
2.2Proteus和KeilC软件简介 2
3 设计概况 3
3.1设计概述 3
3.2方案的总体设计框图 4
3.3电路原理 4
3.4主控器 5
3.5显示电路 5
3.5.1LM016L模块显示特性 5
3.6温度传感器 6
3.6.1DS18B20的性能特点如下 6
3.6.22DS18B20的外形和内部结构 6
3.6.3DS18B20高速暂存存储器 9
3.6.4DS18B20温度传感器与单片机的接口电路 11
4 系统整体硬件电路设计 12
4.1主板电路 12
4.2显示电路 13
4.3KeilC51的辅助使用 13
4.3.1软件的打开 13
4.3.2数字符温度计实例程序设计 14
4.3.4Proteus的设置 17
4.3.5里加载可执行文件 17
4.3.6KeilC与Proteus连接仿真调试 18
5 软件设计部分 19
总结 28
致谢 29
参考文献 30
单片机简介
单片机介绍
单片机是一种集成电路芯片,采用超大规模技术把具有数据处理能力(如算术运算,逻辑运算、数据传送、中断处理)的微处理器(CPU),随机存取数据存储器(RAM),只读程序存储器(ROM),输入输出电路(I/O口),可能还包括定时计数器,串行通信口(SCI),显示驱动电路(LCD或LED驱动电路),脉宽调制电路(PWM),模拟多路转换器及A/D转换器等电路集成到一块单块芯片上,构成一个最小然而完善的计算机系统。这些电路能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务。
由此来看,单片机有着微处理器所不具备的功能,它可单独地完成现代工业控制所要求的智能化控制功能,这是单片机最大的特征。
然而单片机又不同于单板机,芯片在没有开发前,它只是具备功能极强的超大规模集成电路,如果赋予它特定的程序,它便是一个最小的、完整的微型计算机控制系统,它与单板机或个人电脑(PC机)有着本质的区别,单片机的应用属于芯片级应用,需要用户了解单片机芯片的结构和指令系统以及其它集成电路应用技术和系统设计所需要的理论和技术,用这样特定的芯片设计应用程序,从而使该芯片具备特定的功能。
不同的单片机有着不同的硬件特征和软件特征,即它们的技术特征均不尽相同,硬件特征取决于单片机芯片的内部结构,用户要使用某种单片机,必须了解该型产品是否满足需要的功能和应用系统所要求的特性指标。这里的技术特征包括功能特性、控制特性和电气特性等等,这些信息需要从生产厂商的技术手册中得到。软件特征是指指令系统特性和开发支持环境,指令特性即我们熟悉的单片机的寻址方式。
单片机的特点
(1)高集成度,体积小,可靠性高
(2)控制功能强
(3)低电压,低功耗
(4)易扩展
(5)优异的价格性能比
单片机的应用
办公自动化设备;单片机在机电一体化中的应用;在实时过程控制中的应用;单片机在日常生活及家用电器领域的应用;在各类仪器仪表中引入单片机,使仪器仪表智能化,提高测试的自动化程度和精度,简化仪器仪表的硬件结构,提高其性能价格比;在计算机网络和通信领域中的应用;商业营销设备;单片机在医用设备领域中的应用;汽车电子产品;航空航天系统和国防军事、尖端武器等领域.
软件介绍
Protel99SE简介
Protel99SE具有Windows应用程序的一切特性,在Protel99SE中引入了操作“对象”属性的概念,使所有“对象”(如连线、原件、I/O端口、网络标号、焊盘、过孔等)具有相同或相似的操作方式,实现了电子线路CAD软件所期望的“简单、方便、易学、实用、高效”的操作要求。
Proteus和KeilC软件简介
伴随着计算机软件和硬件技术发展出现了各种EDA工具,如EWB、Protel、Multisim、MAX+PLUSII等,这些软件对于单片机的仿真无能为力,而仿真软件Proteus是基于SPICE3F5仿真引擎的混合电路仿真软件,不仅能够仿真模拟、数字电路以及模数混合电路,更具特色的是它能够仿真基于单片机的电子系统。Proteus不但完全支持MCS-51及其派生系列单片机的设计系统,另外也能仿真基于AVR和PIC系统单片机系统。Proteus的仿真资源Proteus软件可提供的模拟、数字、交(直)流等元器件达30多个元件库,共计数千种。此外,对于元件库中没有的器件,使用者也可依照需要自己创建。软件调试方面,其自身只带汇编编译器,不支持C语言。但可以将它与KeilC51集成开发环境相连接,将用汇编和C语言编写的程序编译好以后,可以立即进行软、硬件结合的系统仿真,像使用仿真器一样来调试程序。当可以使用Proteus完成单片机实验时,利用Proteus建立虚拟实验室就变得非常重要了。
Proteus软件是由英国LabCenterElectronics公司开发的一款EDA(电子设计自动化)工具软件包,其最大的特色是电路仿真是交互的、可视化的。通过Proteus软件的VSM(虚拟仿真技术),用户可以对基于微控制器(MCU、单片机)的系统连同所有的外围接口电子器件一起仿真。Proteus软件包由ISIS和ARES两个软件构成,其中ISIS是一款方便快捷的电子系统仿真平台软件,ARES是一款高级的PCB(印刷电路板)布线编辑软件。与其它的EDA软件相比,Proteus对单片机的仿真功能更强大,可以仿真的单片机有51系列、AVR、PIC等,同时元器件库中提供了大量的元器件,可用于仿真外围设备,如RAM、ROM、键盘、LED、LCD、AD/DA、及部分的SPI和I2C元器件;另外,Proteus还提供了大量的虚拟仪器、仪表,逻辑分析仪,图表仿真功能及用于电路测试的各种模拟信号和数字信号;系统还提供了大量的实例供用户参考学习。
μVision3IDE是德国Keil公司开发的其于Windows平台的32位单片机集成开发环境,它包含一个高效的编译器、一个项目管理器和一个MAKE(源程序调试器)工具。其中KeilC51是一种专门为单片机设计的高效率C语言编译器,符合ANSI标准,生成的程序代码运行速度高,占用存贮空间小。Keil的μVision3可以进行纯粹的软件仿真,而无需连接任何硬件电路;也可以利用硬件仿真器,联接上单片机硬件系统,在仿真器中装载项目程序后进行实时仿真;另外,还可以使用μVision3的内嵌模块KeilMonitor-51,在不需要硬件仿真器的条件下,联接单片机硬件系统对项目程序进行实时仿真。μVision3支持所有的Keil80c51工具,包括C编译器、宏汇编器、链接定位器和目标代码到HEX文件的转换器。
设计概况
设计概述
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机AT89C52,测温传感器使用DS18B20,用两只4位共阴极LED数码管以串口传送数据,实现温度显示,能准确达到以上要求。
设计符合以下要求:
■基本范围-20℃-70℃
■精度误差为±0.5℃
■LED数码管直读显示,当温度为“负”,则显示负号;最低位显示摄氏度符号“C”。
■当温度不在基本范围内时,蜂鸣器报警
■当温度大于70℃,发光二极管闪烁;当温度小于-20℃,发光二极管闪烁
温度传感器DS18B20一个,AT89C52一个,12M晶振一个,四位共阴极数码管两个,蜂鸣器一个,发光二极管两个,电阻电容及导线若干。
方案的总体设计框图
温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89C52,温度传感器采用DS18B20,用两只4位LED数码管以串口传送数据实现温度显示。
图3-1便携式数字温度计硬件电路设计框图
电路原理
本温度计大体分三个工作过程。首先,由DS18B20温度传感器芯片测量当前温度,并将结果送入单片机。然后,通过AT89C51单片机芯片对送入的测量温度读进行计算和转换,并将此结果送入液晶显示模块。最后,LCD1602模块将送来的值显示于显示屏上。温度计的整体电路如图
从图中可以看到,本系统测温范围为0~,精度0.1℃。
主控器
单片机在电子产品中的应用已经越来越广泛,AT89C51单片机由于功能全面、开发工具较为完善、衍生产品丰富、大量的设计资源可以继承和共享,得到广泛的应用。而且单片机功耗低、体积小、重量轻、抗干扰能力强、对环境要求不高、价格低廉、可靠性高、灵活性好,很适合便携手持式产品的设计使用系统。
由于液晶显示数字温度使用方便功耗低精度高显示直观且便于实现小型化设计,该模块显示字符数量比以前的七段数码管LED(LightEmittingDiode)显示器要多得多。因此选用通用显示模块。模块显示特性
●单5V电源电压,低功耗、长寿命、高可靠性
●内置192种字符(160个5×7点阵字符和32个5×10点阵字符)
●具有64个字节的自定义字符RAM,可定义8个5×8点阵字符或四个5×11点阵字符
●显示方式:STN、半透、正显
●驱动方式:1/16DUTY,1/5BIAS
●视角方向:6点
●背光方式:底部LED
●通讯方式:4位或8位并口可选
●标准的接口特性,适配MC51和M6800系列MPU的操作时序温度传感器
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,是一线式数字式温度计芯片,体积更小、适用电压更宽、更经济。它具有结构简单,不需外接元件,线路简单,体积小的特点[]。与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现位的数字值读数方式,使系统设计更灵活、方便。●独特的单线接口仅需要一个端口引脚进行通信;
●多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
●无须外部器件;
●可通过数据线供电,电压范围为3.0~5.5V;
●零待机功耗;
●温度以或位数字;
●用户可定义报警设置;
●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如下
图3-3DS18B20外形图
引脚定义:
(1)???DQ为数字信号输入/输出端;
(2)???GND为电源地;
(3)???VDD为外接供电电源输入端(在寄生电源接线方式时接地)。内部结构如下:
图?DS18B20内部结构图
DS18B20有4个主要的数据部件:光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。?DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位。
这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FF6FH,-55的数字输出为FC90H。DS18B20温度传感器的存储器
DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。
64位ROM的结构开始位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器和,可通过软件写入户报警上下限。
配置寄存器
该字节各位的意义如下:
表配置寄存器结构
TM R1 R0 1 1 1 1 1
低五位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如下表所示:(DS18B20出厂时被设置为12位)
分辨率设置表:
表温度值分辨率设置表
R1 R0 分辨率 温度最大转换时间 0 0 9位 93.75ms 0 1 10位 187.5ms 1 0 11位 375ms 1 1 12位 750ms 由表4可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。DS18B20高速暂存存储器高速暂存存储器由9个字节组成,其分配如表4-所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表4所示。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。表?4是对应的一部分温度值。第九个字节是冗余检验字节。表DS18B20暂存寄存器分布
寄存器内容 字节地址 温度值低位 0 温度值高位 1 高温限值TH 2 低温限值TL 3 配置寄存器 4 保留 5 保留 6 保留 7 CRC检验 8 ?根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功
表ROM指令表
基数值。
减法计数器对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器的预置值减到时,温度寄存器的值将加,减法计数DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55所对应的一个基数分别置入减法计数器、温度寄存器中,计数器和温度寄存器被预置在-55所对应的一个器的预置将重新被装入,减法计数器重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值[]。
另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图47所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。
当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。
系统整体硬件电路设计
主板电路
图5-1主板电路
图中按复位电路是上电复位加手动复位,使用比较方便,在程序跑飞时,可以手动复位,这样就不用在重起单片机电源,就可以实现复位。蜂鸣器可以在被测温度不在上下限范围内时,发出报警鸣叫声音,同时LED数码管将没有被测温度值显示,这时可以调整报警上下限,从而测出被测的温度值。显示电路是使用的串口显示,这种显示最大的优点就是使用口资源比较少,只用,串口的发送和接收,采用位共LED数码管,从P段码。双击桌面上的KeiluVision图标或者单击屏幕左下方的“开始”→“程序”→“KeiluVision”,出现如图所示界面,随后就进入了KeiluVision集成环境。
KeiluVision3的工作界面是一种标准的Windows界面,包括:标题栏、主菜单、标准工具栏、代码窗口等,如图所示。
图5.2?工作界面
关于该软件的使用,与学习其他软件的方法没有多大区别,当然我们也不是每个功能都使用,没必要逐一介绍,下面举一个例子说明使用就行了,如果想详细了解,请搜索其详细使用资料。建立一个新工程单击Project菜单,在弹出的下拉菜单中选中NewProject选项,如图所示。确定之后选择你要保存的路径,输入工程文件的名字,比如保存到“”目录里,工程文件的名字为“”如下图所示,然后点击保存。随后会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,KeilC51几乎支持所有的52核的单片机,由于Proteus选用AT89C52原理图,那么选择AT89C52之后,右边栏是对这个单片机的基本的说明,然后点击确定即可,如图所示。
图5.5选择单片机的型号
完成上一步骤后,工程到此就已经创建起来了,其屏幕如图所示。
图5.6已创建好的工程
工程虽然已经创建好,即已经建立好了一个工程来管理这样一个项目,但我们还没写一行程序,因此还需要建立相应的C文件或汇编文件。下面我们就来新建一个C文件,新建之后并保存,如图所示。把刚才新建的.c添加到工程来添加后的界面如图所示到此,设置工作已完成,下面我们将编译、链接、转换成可执行文件(.HEX的文件)。
编译、链接、生成可执行文件
图5.9编译、链接、生成可执行文件图标
单击上述图-17所示图标,如果没有语法错误,将会生成可执行文件,即本例可执行文件为“.hex”。进入Proteus的ISIS,鼠标左键点击菜单“Debug”,选中“useromotedebugermonitor”,如图所示。此后,便可实现KeilC与Proteus连接调试。
图5.0选项设置
里加载可执行文件
?左键双击AT89C52原理图,将弹出如下图3,点击加载可执行文件“.HEX”。
图5.0.1选择加载可执行文件
KeilC与Proteus连接仿真调试
单击仿真运行开始按钮,我们能清楚地观察到每一个引脚的电频变化,红色代表高电频,蓝色代表低电频。其运行情况如图所示。#include
#include //shiyongyanshi
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P3^3;
sbitRS=P2^0;
sbitRW=P2^1;
sbitEN=P2^2;
sbitk=P1^0;
sbitk1=P1^4;
sbitk2=P1^5;
sbitk3=P1^6;
sbitk4=P1^7;
sbitled_red=P2^5;
sbitled_blue=P2^6;
sbitBEEP=P3^7;
ucharbz=1;
//BEEP=0;
ucharng=0;//fuhaobiaoshiwei
ucharTempBuffer[]={"TEMP:"};
inttemp_value;
ucharcodedis_title[]={"--currenttemp--"};
voidxianshi_huashi();
uchargw=40;
chardw=10;
ucharxianshi_title[]={"TEMPALARM"};
ucharxianshi_baojing[]={"HI:LO:"};
voiddelayxus(uintx)
{
uchari;
while(x--)for(i=0;i<200;i++);
}
ucharread_lcd_state()
{
ucharstate;
RS=0;RW=1;EN=1;delayxus(1);state=P0;EN=0;delayxus(1);
returnstate;
}
voidlcd_busy_wait()
{
while((read_lcd_state()&0x80)==0x80);
delayxus(5);
}
voidwrite_lcd_data(uchardat)
{
lcd_busy_wait();
RS=1;RW=0;EN=0;P0=dat;EN=1;delayxus(1);EN=0;
}
voidwrite_lcd_cmd(ucharcmd)
{lcd_busy_wait();
RS=0;RW=0;EN=0;P0=cmd;EN=1;delayxus(1);EN=0;
}
voidinit_lcd()
{
write_lcd_cmd(0x38); delayxus(1);
write_lcd_cmd(0x01);delayxus(1);
write_lcd_cmd(0x06); delayxus(1);
write_lcd_cmd(0x0C);delayxus(1);
}
voidset_lcd_pos(ucharp)
{
write_lcd_cmd(p|0x80);
}
voiddis_lcd_string(ucharp,uchars)
{
uchari;
set_lcd_pos(p);
for(i=0;i<16;i++)
{
write_lcd_data(s[i]);
delayxus(1);
}
}
voiddelay_18B20(unsignedinti)
{
while(i--);
}
voidbeep()
{
uchari;
for(i=0;i<100;i++)
{
delayxus(1);
BEEP=~BEEP;
}
BEEP=1;
}
voiddelay2(uintx)
{
while(--x);
}
voidInit_DS18B20(void)
{
unsignedcharx=0;
DQ=1;
delay_18B20(8);
DQ=0;
delay_18B20(80);
DQ=1;
delay_18B20(14);
x=DQ;
delay_18B20(20);
}
ucharReadOneChar(void)
{
uchari=0;
uchardat=0;
for(i=8;i>0;i--)
{
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay_18B20(4);}
return(dat);
}
voidWriteOneChar(uchardat)
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay_18B20(5);
DQ=1;
dat>>=1;
}
}
voidReadTemp(void)
{
unsignedchara=0;
unsignedcharb=0;
unsignedchart=0;
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
delay_18B20(100);
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE);
delay_18B20(100);
a=ReadOneChar();
b=ReadOneChar();
temp_value=b<<4;
temp_value+=(a&0xf0)>>4;
}
voidtemp_to_str(
if((temp_value&0xE0)==0xE0)
{
temp_value=~temp_value+1;
ng=1;
}
else
ng=0;
if(k1==0){//while(k1==0);
bz=(bz+1)%2; }
if(bz==0)
{
temp_value=(int)(temp_value)(9.0/5.0)+32;
}
if(ng==1)
{
TempBuffer[9]=temp_value/100+''0'';
if(TempBuffer[9]='''')
TempBuffer[9]=''-'';
TempBuffer[10]=temp_value%100/10+''0'';
TempBuffer[11]=temp_value%10+''0'';
TempBuffer[12]=0xdf;
TempBuffer[13]=''C'';
TempBuffer[14]=''\0'';
//TempBuffer[1]=ng%10+''\0'';
}
if(ng==0)
{
TempBuffer[9]=temp_value/100+''0'';
if(temp_value/100==0)TempBuffer[9]='''';
TempBuffer[10]=temp_value%100/10+''0'';
if(temp_value%100/10==0)TempBuffer[10]='''';
TempBuffer[11]=temp_value%10+''0'';
//if(temp_value%10==0)TempBuffer[11]='''';
TempBuffer[13]=''C'';
if(bz==0) TempBuffer[13]=''F'';
TempBuffer[14]=''\0'';
//TempBuffer[1]=ng%10+''\0'';
}
}
voidDelay1ms(unsignedintcount)
{
unsignedinti,j;
for(i=0;i for(j=0;j<120;j++);
}
voidmdelay(uintdelay)
{ uinti;
for(;delay>0;delay--)
{
for(i=0;i<62;i++);
}
}
voidshow_time()
{
ReadTemp();
temp_to_str();
dis_lcd_string(0x40,TempBuffer);
dis_lcd_string(0x00,dis_title);
Delay1ms(400);
}
voidxianshi_dw()
{
if(dw>=0)
{xianshi_baojing[3]=gw/100+''0'';
xianshi_baojing[4]=gw%100/10+''0'';
xianshi_baojing[5]=gw%10+''0'';
xianshi_baojing[10]=dw/100+''0'';
xianshi_baojing[11]=dw%100/10+''0'';
xianshi_baojing[12]=dw%10+''0'';
dis_lcd_string(0x00,xianshi_title);
dis_lcd_string(0x40,xianshi_baojing);
}
else
if(dw<0)
{
xianshi_baojing[3]=gw/100+''0'';
xianshi_baojing[4]=gw%100/10+''0'';
xianshi_baojing[5]=gw%10+''0'';
xianshi_baojing[10]=''-'';
xianshi_baojing[11]=abs(dw)%100/10+''0'';
xianshi_baojing[12]=abs(dw)%10+''0'';
dis_lcd_string(0x00,xianshi_title);
dis_lcd_string(0x40,xianshi_baojing);
}
}
voidmain()
{
led_red=0;
led_blue=0;
BEEP=0;
delayxus(10);
init_lcd();
//init_DS();
Init_DS18B20();
delay2(500);
delay2(500);
while(1)
{
if(k2==1&&k3==1&&k4==1)
show_time();
}
if(k2==0)
{
//while(k2==0);
xianshi_dw();
}
if(k3==0&&k2==0&&k==1)
{ while(k3==0);
gw++;
}
if(k4==0&&k2==0&&k==1)
{
while(k4==0);
dw++;
}
if(k3==0&&k2==0&&k==0)
{
while(k3==0);
gw--;
}
if(k4==0&&k2==0&&k==0)
{
while(k4==0);
dw--;
if(dw<0)dw=0;
}
delayxus(100);
if(bz==1)
{ if(temp_value>gw&&bz==1)
{beep();delayxus(50);led_red=1;}
else
led_red=0;
if(temp_value {beep();delayxus(50);led_blue=1;}
else
led_blue=0;
if((TempBuffer[9]==''-'')&&abs(temp_value)>=abs(dw)&&bz==1)
{beep();delayxus(50);}
if(dw<=0&&abs(temp_value)>=abs(dw)&&bz==1)
{beep();delayxus(50);}
if((-abs(temp_value))<=(-abs(dw))&&dw<=0&&bz==1)
{beep();delayxus(50);}
}
}
总结
短短一周的时间,我们做完了我们小组的单片机实验,感触很深,我们小组做的是“数字式温度计”虽然在别人眼中我们的实验很简单,不过我们还是遇到了很多困难。
本应用系统设计的目的是通过在“单片机原理及应用”课堂上学习的知识,以及查阅资料,培养一种自学的能力。并且引导一种创新的思维,把学到的知识应用到日常生活当中。在设计的过程中,不断的学习,思考和同学间的相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。全能提高个人系统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。
通过本次课程的设计,不但加深我对在课程上所学到的单片机理论知识的认识和理解,重新让自己认识到了这门学科的在应用方面的广阔前景,并且通过知识与应用于实践的结合更加丰富了自己的知识。扩展了知识面,因而对自身的综合素质有了全面的提高。
经过这次实训,对于认识到自己在知识方面存在的不足,明确今后的学习方向是非常有益的,为将来的的就业提前打了下坚实的基础。在设计过程中,得到了我的指导老师的悉心指导与帮助,还有其他老师和同学的大力支持和协助,在此表示衷心的感谢。
致谢
通过这次课题设计使我懂得了理论与实践相结合是非常重要的,从理论中得出结论,才能真正为社会服务,从而提高自己思考的能力,同时在设计中发现自己的不足之处。
这次设计的顺利完成,我们要感谢我们的指导老师,他帮助了我们许多,就是在老师的讲解中,我们才迎刃而解,才对自己的专业知识有所真正的提高,也对自己的实验技术有所提高,对自己有所锻炼,在这里,我们真诚的感谢老师,忠心的谢谢您—老师!
参考文献
张毅刚.MCS-51单片机应用设计.哈尔滨工业大学出版社,1990
李华,MCS-51系列单片机实用接口技术,北京航天航空大学出版社,1993
李光飞.单片机C程序设计指导.北京:北京航天航空大学出版社,2003
梅丽凤《单片机原理及接口技术》清华大学出版社2004.6
http://wenku.baidu.com/view/b19717e8856a561252d36fb7.html
http://baike.baidu.com/view/1341776.htm
数字式温度计
30
单片机
LCD显示电路
温度传感器
蜂鸣器
按键输入电路
|
|