1-WireBus
GNDDS18B20采样>1usDS18B20采样
15usMINTYPMAXMINTYPMAX
15us30us15us15us30us
图1-3(b)写时序
VCC主机读“0”时隙主机读“1”时隙
1-WireBus
GND主机采样1us
15us15us30us主机采样
15us
图1-3(c)读时序
读时间片:
主机将数据线从高电平拉至低电平1us以上,再使数据线升为高电平,从而产生读起始信号。
主机在读时间片下降沿之后15us内完成读位。
每个读周期最短的持续期为60us,各个读周期之间也必须有1us以上的高电平恢复期。
1.3测温电路设计
数字温度传感器DS18B20的测温电路如图1-4所示:
图1-4测温电路
1.4按键模块设计
利用单片机的IO口实现按键的中断输入。
另外需要一个与门实现与中断端口的连接。
按键电路如图1-5所示,期中按键K1为进入/退出设置键;K2为增加键;K3为减少键。
图1-5按键模块
1.5报警电路设计
三极管驱动蜂鸣器:
报警电路如图1-6所示,三极管Q5来驱动喇叭LS1。
图1-6报警电路
1.6显示电路设计
采用四位共阴极LED数码管来显示温度,可以直接读取,温度精确到0.1℃。
四位数码管的显示电路如图1-7所示,从左到右依次是百位,十位,个位,十分位。
图1-7显示电路
1.7串口电路设计
单片机与上位机(PC机)的接口电路如图1-8所示:
图1-8接口电路
第二章系统软件设计
2.1各模块的程序设计
系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序和按键扫描处理子程序等。
2.1.1主程序流程图
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20测量的当前温度值,温度测量每1s进行一次。
这样可以在一秒之内测量一次被测温度,其程序流程见图2-1所示。
Y
图2-1主程序流程图
2.1.2读出温度子程序
读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。
其程序流程图如图2-2所示:
Y
图2-2读出温度子程序流程图
2.1.3温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。
温度转换命令子程序流程图如图2-3所示:
结束
图2-3温度转换命令子程序流程图
2.1.4计算温度子程序
Y
计算温度子程序流程图如图2-4所示。
图2-4计算温度子程序流程图
2.1.5显示数据刷新子程序
显示数据刷新子程序主要是对分离后的温度显示数据进行刷新操作,当标志位位为1时将符号显示位移入第一位。
程序流程图如图3-5所示。
Y
图2-5显示数据刷新子程序流程图
2.1.6报警子程序
设置报警标志位beep,报警流程图如图2-6所示:
读取测量温度值
温度值
>120或
<20?
Beep=0
Beep=1,报警
Y
图2-6报警流程图
2.1.7按键扫描处理子程序
按键采用扫描查询方式,设置标志位,当标志位为1时,显示设置温度,否则显示当前温度。
如图2-7所示
K1键按下
K3键按下?
K2键按下?
NN
显示标志位为0?
报警温度减1
报警温度加1
YYN
调用显示子程序
Y
图2-7按键扫描子程序流程图
2.2KeilC51编程软件
2.2.1KeilC51简介
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
KeilC51软件是一个基于32位Windows环境的应用程序,支持C语言和汇编语言编程,其6.0以上的版本将编译和仿真软件统一为μVision(通常称为μV2)。
Keil提供包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,由以下几部分组成:
μVisionIDE集成开发环境C51编译器、A51汇编器、LIB51库管理器、BL51连接/定位器、OH51目标文件生成器以及实时操作系统。
2.2.2KeilC51软件应用
应用Keil进行软件仿真开发的主要步骤为:
编写源程序并保存→建立工程并添加源文件→设置工程→编译/汇编、连接→程序调试。
Keil使用“工程”(Project)的概念,对工程(而不能对单一的源程序)进行编译/汇编、连接等操作。
工程的建立、设置、编译/汇编及连接产生目标文件的方法非常易于掌握。
首先选择菜单File→New…,在源程序编辑器中输入汇编语言或C语言源程序(或选择File→Open…,直接打开已用其它编辑器编辑好的源程序文档)并保存,注意保存时必须在文件名后加上扩展名.asm(.a51)或.c;然后选择菜单Project→NewProject,建立新工程并保存(保存时无需加扩展名,也可加上扩展名.uv2);工程保存后会立即弹出一个设备选择对话框,选择CPU后点确定返回主界面。
这时工程管理窗口的文件页(Files)会出现“Target1”,将其前面+号展开,接着选择SourceGroup1,右击鼠标弹出快捷菜单,选择“AddFiletoGroup‘SourceGroup1’”,出现一个对话框,要求寻找并加入源文件(在加入一个源文件后,该对话框不会消失,而是等待继续加入其它文件)。
加入文件后点close返回主界面,展开“SourceGroup1”前面+号,就会看到所加入的文件,双击文件名,即可打开该源程序文件。
紧接着对工程进行设置,选择工程管理窗口的Target1,再选择Project→OptionforTarget‘Target1’(或点右键弹出快捷菜单再选择该选项),打开工程属性设置对话框,共有8个选项卡,主要设置包括在Target选项卡中设置晶振频率、在Debug选项卡中设置实验仿真板等,如要写片,还必须在Output选项卡中选中“CreatHexFi”;其它选项卡内容一般可取默认值。
工程设置后按F7键(或点击编译工具栏上相应图标)进行编译/汇编、连接以及产生目标文件。
成功编译/汇编、连接后,选择菜单Debug-Start/StopDebugSession(或按Ctrl+F5键)进入程序调试状态,Keil提供对程序的模拟调试功能,内建一个功能强大的仿真CPU以模拟执行程序。
Keil能以单步执行(按F11或选择Debug-Step)、过程单步执行(按F10或选择Debug-StepOver)、全速执行等多种运行方式进行程序调试。
如果发现程序有错,可采用在线汇编功能对程序进行在线修改(Debug-InlineAssambly),不必执行先退出调试环境、修改源程序、对工程重新进行编译/汇编和连接、然后再次进入调试状态的步骤。
对于一些必须满足一定条件(如按键被按下等)才能被执行的、难以用单步执行方式进行调试的程序行,可采用断点设置的方法处理。
第三章系统的仿真与总结
3.1Protues仿真
3.1.1Protues简介
Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
该软件的特点是:
1.实现了单片机仿真和SPICE电路仿真相结合,具有模拟电路仿真、数字电路仿真、各种单片机(51系列、AVR、PIG等常用的MCU)及其外围电路(如LCD、RAM、ROM、键盘、LED、A/D、D/A等)组成的系统仿真。
2.提供了多种虚拟仪器。
如示波器、逻辑分析仪、信号发生器等,调试非常方便。
3.提供软件调试功能,同时支持第三方的软件编译和调试环境,如Keil等软件。
4.具有强大的原理图绘制功能。
Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。
因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。
对于这样的仿真实验.从某种意义上讲,是弥补了实验和工程应用有脱节的矛盾和现象。
同时,当硬件调试成功后,利用ProteusARES软件,很容易获得其PCB图,为今后的制造提供了方便。
3.1.2proteus的工作过程
运行proteus的ISIS程序后,进入该仿真软件的主界面。
在工作前,要设置view菜单下的捕捉对齐和system下的颜色、图形界面大小等项目。
通过工具栏中的p命令,在pickdevices窗口中选择电路所需的元件,放置元件并调整其相对位置,元件参数设置,元器件间连线,编写程序;在source菜单的Definecodegenerationtools菜单命令下,选择程序编译的工具、路径、扩展名等项目;在source菜单的Add/removesourcefiles命令下,加入单片机硬件电路的对应程序;通过debug菜单的相应命令仿真程序和电路的运行情况。
Proteus软件提供了30多个元件库,数千种元件。
元件涉及数字和模拟、交流和直流等。
3.1.3Protues测温仿真
通过仿真软件验证该原理图的可行性。
采用protues软件对电路仿真,可以得到预期效果。
仿真图如图3-1所示。
温度传感器的仿真效果图如图3-2所示,此图验证了传感器的温度与数码管显示的数字一致。
图3-1Protues仿真图
图3-2DS18B20仿真图
当按下K1键一次时,进入温度报警上线调节,此时显示软件设置的温度报警上线,按K2或K3分别对报警温度进行加一或减一。
当再次按下K1键时,进入温度报警下线调节,此时显示软件设置的温度报警下线,按K2或K3分别对报警温度进行加一或减一。
当第三次按下K1键时,退出温度报警线设置。
显示当前温度。
如图3-3是第一次按下K1键显示的上限温度报警值,此时按K2或K3键分别对上限温度报警值进行加一或减一;图3-4是第二次按下K1键显示的下限温度报警值,此时按K2或K3键分别对下限温度报警值进行加一或减一。
图3-3上限温度报警值
图3-4下限温度报警值
3.1.4性能分析
性能测试可用制作的温度计和已有的成品温度计同时进行测量比较。
由于DS18B20的精度很高,所以误差指标可以限制在±0.1℃以内。
另外,0~100℃的测量范围使得该温度计完全适合一般的应用场合,其低压供电特性可以做成电池供电的手持电子温度计。
3.2总结
本次设计主要是通过AT89C51单片机为核心设计的一款数字温度计,该温度计不仅能够实时测量温度值并显示出来,还能够设定温度上下限进行监控,若温度高于设定上限值或低于下限值,则报警电路将进行报警。
此次课程设计中,难点在于DS18B20的使用,即对它的时序控制、初始化以及字节读写方法,任何一个环节出错或是时序控制不到位的话就不能得到正确的数据。
一旦学会了正确的使用方法,就能感觉到它带来的便利是热电偶不能比拟的,以后再次使用的话就能很快上手了。
3.2.1硬件方面
本设计采用的是AT89C51单片机为核心的数字温度计,包含了利用温度传感器DS18B20的测温电路、外接键盘、显示电路、继报警电路、复位电路和晶振电路。
以DS18B20为主要测温元件进行实时监控温度值。
以4位数码管为显示器件,利用单片机的P0口和上拉电阻来驱动4位数码管的显示;利用单片机的P1.7来驱动温度传感器DS18B20测温;报警电路利用三极管放大作用驱动报警器报警;按键是利用单片机的P1口和上拉电阻来驱动工作的。
3.2.2软件方面
本次设计利用Protues软件对系统进行仿真,利用KeilC51软件对系统进行编程。
C语言设计了温度的读、写程序,并利用程序实时对显示电路进行更新操作。
本次设计编写了外接键盘的动作程序,能够感应外接键盘的动作情况对系统做出一系列相应的调整和动作。
系统包含了通过外接键盘设定一个基准值的程序,能够比较基准值并通过比较之后的结果对外围电路产生相应的控制。
软件设计中,把程序按功能分模块的话能提高编程效率,把问题一一解决,同时画流程