基于ds18b20的测温系统设计毕业论文内容摘要:
10 总体设计方框图 方框图所示为数字温度控制器的单体设计方框图。 其工作原理为:当该电路上电工作以后,首先刷新显示( LED),然后,温度传感器采集温度送单片机检查温度的高低,由单片机送出信号经过驱动电路送往显示电路。 软件设计 整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。 从软件的功能不同可分为两大类:一是监控软件(主程序), 它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。 二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、报警等。 每一个执行软件也就是一个小的功能执行模块。 这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。 各执行模块规划好后,就可以规划监控程序了 [6]。 11 图 8 软件实现结构图 软件开发环境 本系统开发环境使用的是 KeilSoftware 公司推出的 uVision4。 uVision4 是一款可用于多种 8051MCU 的集成开发环境 (IDE),该 IDE 同 时也是 PK51 及其它开发套件的一个重要组件。 除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外, uVision4还提供了一个配置向导功能,加速了启动代码和配置文件的生成。 此外其内置的仿真器可模拟目标 MCU,包括指令集、片上外围设备及外部信号等。 uVision4 提供逻辑分析器,可监控基于 MCUI/O 引脚和外设状态变化下的程序变量 [7]。 12 图 9 uVision4 操作界面 DS18B20 软件设计 DS18B20 的一线工作协议流程是: 初始化→ ROM 操作指令→存储器操作指令→数据传输。 DS18B20 工作过程一 般遵循以下协议: 初始化 —— ROM 操作命令 —— 存储器操作命令 —— 处理数据 图 10 DS18B20 工作流程图 13 DS18B20 初始化 主机首先发出一个 480- 960 微秒的低电平脉冲,然后释放总线变为高电平,并在随后的 480 微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。 若无低电平出现一直都是高电平说明总线上无器件应答。 做为从器件的 DS18B20 在一上电后就一直在检测总线上是否有 480- 960 微秒的低电平出现,如果有,在总线转为高电平后等待 15- 60 微秒后将总线 电平拉低 60- 240微秒做出响应存在脉冲,告诉主机本器件已做好准备。 若没有检测到就一直在检测等待。 初始化程序: bit Init_DS18B20(void) { bit flag。 //储存 DS18B20 是否存在的标志, flag=0,表示存在; flag=1,表示不存在 DQ = 1。 //先将数据线拉高 for(time=0。 time2。 time++)。 //略微延时约 6微秒 DQ = 0。 //再将数据线从高拉低,要求保持 480~960us for(time=0。 time200。 time++)。 //略微延时约 600 微秒 //以向 DS18B20 发出一持续 480~960us 的低电平复位脉冲 DQ = 1。 //释放数据线(将数据线拉高) for(time=0。 time10。 time++)。 //延时约 30us(释放总线后需等待 15~60us 让DS18B20 输出存在脉冲) flag=DQ。 //让单片机检测是否输出了存在脉冲( DQ=0 表示存在) for(time=0。 time200。 time++)。 //延时足够长时间,等待存在脉冲输出完毕 return (flag)。 //返回检测成功标志 } 图 11 DS18B20 初始化时序图 14 对 DS18B20 的读和写操作 接下来就是主机发出各种操作命令,但各种操作命令都是向 DS18B20 写 0 和写 1组成的命令字节,接收数据时也是从 DS18B20 读取 0或 1 的过程。 因此首先要搞清主机是如何进行写 0、写 读 0和读 1 的。 写周期最少为 60 微秒,最长不超过 120 微秒。 写周期一开始做为主机先把 总线拉低 1 微秒表示写周期开始。 随后若主机想写 0,则继续拉低电平最少 60 微秒直至写周期结束,然后释放总线为高电平。 若主机想写 1,在一开始拉低总线电平 1 微秒后就释放总线为高电平,一直到写周期结束。 而做为从机的DS18B20 则在检测到总线被拉底后等待 15 微秒然后从 15us 到 45us 开始对总线采样,在采样期内总线为高电平则为 1,若采样期内总线为低电平则为 0。 对于读数据操作时序也分为读 0时序和读 1时序两个过程。 读时隙是从主机把单总线拉低之后,在 1微秒之后就得释放单总线为高电平,以让 DS18B20 把数据传输到 单总线上。 DS18B20 在检测到总线被拉低 1 微秒后,便开始送出数据,若是要送出 0 就把总线拉为低电平直到读周期结束。 若要送出 1则释放总线为高电平。 主机在一开始拉低总线 1 微秒后释放总线,然后在包括前面的拉低总线电平 1 微秒在内的 15 微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为 0。 采样期内总线为高电平则确认为 1。 完成一个读时序过程,至少需要 60us 才能完成 图 12 DS18B20 读写时序图 15 /***************************************************** 函数功能:从 DS18B20 读取一个字节数据 出口参数: dat ***************************************************/ unsigned char ReadOneChar(void) { unsigned char i=0。 unsigned char dat。 //储存读出的一个字节数据 for (i=0。 i8。 i++) { DQ =1。 // 先将数据线拉高 _nop_()。 //等待一个机器周期 DQ = 0。 //单片机从 DS18B20 读书据时 ,将数据线从高拉低即启动读时序 _nop_()。 //等待一个机器周期 DQ = 1。 //将数据线 人为 拉高 ,为单片机检测 DS18B20 的输出电平作准备 for(time=0。 time2。 time++)。 //延时约 6us,使主机在 15us 内采样 dat=1。 if(DQ==1) dat|=0x80。 //如果读到的数据是 1,则将 1存入 dat else dat|=0x00。 //如果读到的数据是 0,则将 0存入 dat //将单片机检测到的电平信号 DQ 存入 r[i] for(time=0。 time8。 time++)。 //延时 3us,两个读时序之间必须有大于 1us 的恢复期 } return(dat)。 //返回读出的十六进制数据 } /***************************************************** 函数功能:向 DS18B20 写入一个字节数 据 入口参数: dat ***************************************************/ WriteOneChar(unsigned char dat) { unsigned char i=0。 for (i=0。 i8。 i++) { DQ =1。 // 先将数据线拉高 _nop_()。 //等待一个机器周期 DQ=0。 //将数据线从高拉低时即启动写时序 DQ=datamp。 0x01。 //利用与运算取出要写的某位二进制数据 , //并将其送到数据线上等待 DS18B20 采样 for(time=0。 time10。 time++)。 //延时约 30us, DS18B20 在拉低后的约15~60us 期间从数据线上采样 DQ=1。 //释放数据线 for(time=0。 time1。 time++) 16。 //延时 3us,两个写时序间至少需要 1us 的恢复期 dat=1。 //将 dat 中的各二进制位数据右移 1 位 } for(time=0。 time4。 time++)。 //稍作延时 ,给硬件一点反应时间 } 液晶显示程序 液晶显示是系统程序运行的窗口,所有需要的操作都可以通过显示窗口表现出来。 因此信息显示是系统必不可少的部分。 液晶显示器的设定、读写与光标控制都需要相应的指令来完成。 一般 LCD1602 共有 11 条控制指令,具体功能如下表所示。 指令 功能 清屏 清 DDRAM 和 AC 的值 归位 AC=0,光标,画面回 HOME 位 输入方式设置 设置光标,画面移动方式 显示快关控制 设置显示,光标及闪烁开、关 光标,画面位移 光标,画面移动,不影响 DDRAM 功能设置 工作方式设置 CGRAM 地址设置 设置 CGRAM 地址 DDRAM 地址设置 DDRA 地址设置 读 BF 及 AC 值 读忙标志 BF 值和 AC 值 写数据 数据写入 DDRAM 或 CGRAM 内 读数据 从 DDRAM 或 CGRAM 数据读出 表 6:控制指令相关功能表 而 在实际编程中经常用到的指令并不多,分别是清屏、显示开关控制、光标画 面位移和功能设置。 因此只需记住这几条常用指令即可。 液晶显示还有一条比较重要的指令设置就是读写寄存器。 它主要决定此时液晶显示寄存器的工作方式。 它的控制功能如下表所示 RS RW E 功能 0 0 下降沿 写指令代码 0 1 高电平 读忙标志和 AC 码 1 0 下降沿 写数据 1 1 高电平 读数据 表 7:读写寄存器功能表 在实际编程中需要定义液晶显示第一行和第二行的地址,然后第一行显示两个温度传感器测得的温度值,第二行默认显示此次测量规定的时间,如果切换后,第二行则显示最高温度值。 在这里,第二行 显示最高温度值时需经过键盘扫描切换方可实现,所以不与论述。 17 图 13 液晶显示流程图 程序: /***************************************************** 函数功能:将模式设置指令或显示地址写入液晶模块 入口参数: dictate ***************************************************/ void WriteInstruction (unsigned char dictate) { while(BusyTest()==1)。 //如果忙就等待 RS=0。 //根据规定, RS 和 R/W 同时为低电平时,可以写入指令 RW=0。 E=0。 //E 置低电平 (根据表 86,写指令时, E 为高脉冲, // 就是让 E 从 0到 1发生正跳变,所以应先置 0 _nop_()。 _nop_()。 //空操作两个机器周期,给硬件反应时间 P0=dictate。 //将数据送入 P0口,即写入指令或地址 _nop_()。 _nop_()。 _nop_()。 _nop_()。 //空操作四个机器周期,给硬件反应时间 E=1。 //E 置高电平 _nop_()。 _nop_()。 _nop_()。 _nop_()。 //空操作四个机器周期,给硬件反应时间 E=0。 //当 E 由高 电平跳变成低电平时,液晶模块开始执行命令 } 18 /*********************************************。基于ds18b20的测温系统设计毕业论文
相关推荐
定位一只特定的 DS18B20 只有和 64 位 ROM 序列完全匹配的 DS18B20 才能响应随后的存储器操作命令。 所有和 64 位 ROM 序列埠匹配的从机都将等待复位脉冲。 这条命令在总线上有单个或多个器件时都可以使用。 桂林电子科技大学实训说明书用纸 8 本电 路采用 DS18B20 的 12 位分辨率,即温度时间为 750ms。 而 DS18B20 每次
引脚功能描述 1 GND 接地信号 2 DQ 数据输入 /输出引脚。 开漏单总线接口引脚。 当被用着在寄生电源下,也可以向器件提供电源。 3 VDD 可选择的 VDD 引脚。 当工作于寄生电源时,此引脚 必须接地。 DS18B20 的内部结构示意图如下图所示。 I/O C 64 位 ROM 和 单 线 高速缓存 存储器与控制逻辑 温度传感器 高温触发器 TH 低温触发器 TL 配置寄存器 10
if(!Reset) begin H_L_f3=1。 end else if(Count == Delay10ms) begin H_L_f3=Key_in。 end end always @(posedge Clk or negedge Reset ) begin if(!Reset) begin H_L_f4=1。 end else begin H_L_f4=H_L_f3。 end end
尽管如此, MAX038 作为一个多功能的高速器件 .仍具有广泛的用途。 随着应用面的扩大,价格也会逐渐下降。 DAC0832 简介 和使用说明 DAC0832 是 8 位分辨率 D/A 转换集成芯片,与处理器完全兼容,其价格低廉,接口简单,转换控制容易等优点,在单片机应用系统中得到了广泛的应用。 其中 DAC0832 芯片为电流输出方式的转换芯片。
信息也通过数据总线传送。 PA0~ PA7:端口 A 输入输出线,一个 8 位的数据输出锁存器 /缓冲器, 一个 8 位的数据输入锁存器。 PB0~ PB7:端口 B 输入输出线,一个 8 位的 I/O 锁存器, 一个 8 位的输入输出缓冲器。 PC0~ PC7:端口 C 输入输出线,一个 8 位的数据输出锁存器 /缓冲器, 一个 8 位的数据输入缓冲器。 端口 C 可以通过工作方式设定而分成
C2440 开发板简介 这里所用的 S3C2440 嵌入式系统开发板功能比较强大 ,配备了完备的硬件资源和开发软件 ,开发板的结构如图 所示。 图 开发板结构图 S3C2440A 是韩国三星公司推出的 16/32 位 RISC 微控制器 ,其 CPU 采 用的是 ARM920T 内核。 电源电路实现了 5v 直流输入到 、 、 输出转换的功能 ,为板上各功能模组的正常工作提供所需电压。