




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
pic 单片机的多路温度巡回检测系统 摘要: 摘要:本文介绍了一种基于 pic16f877a 单片机,利用 ds18b20 对 多路温度采集,并进行温度的控制与检测,并通过 12864 液晶显示 出来。系统中通过控制按钮实现了实时各路的报警温度,并且实现 多路与任一单路温度显示切换,从而既可以进行多路的检测又可以 进行任一单路的监控,而且还有数字跟图形两种显示方式更为直 观。在温度超过设定温度时温度跟时间通过 24c02 存储起来,以便 查看,同时可以通过固定电话远程报警,还能将温度上传至 pc 机, 进行后续处理。 目录 1 2 系统设计 4 主芯片: 主芯片:pic16f877a 单片机简介 5 2.1 2.2 2.3 pic 单片机的优越之处: 5 pic16f877a 引脚图及主要性能 6 最小系统 8 2.3.1 复位功能 8 2.3.2 系统时钟 8 2.4 3 3.1 3.2 设计心得总结 9 液晶显示模块概述 9 液晶引脚说明 9 液晶原理 原理介绍及接口实现 lcd12864 液晶原理介绍及接口实现 9 3.3 接口时序 10 3.4 具体指令介绍 12 3.5 显示坐标关系 15 3.5.1、图形显示坐标 15 3.5.2 3.7 4 汉字显示坐标 17 3.6 与单片机的接口实现 18 设计心得总结 18 ds18b20 原理介绍及接口实现 19 4.1 ds18b20 简介 19 4.2 4.3 ds18b20 结构及其工作原理 19 ds18b20 的接口实现 26 4.3.1 硬件设计 26 4.3.2 软件设计 26 4.4 设计心得总结 27 4.4.1 焊接问题: 27 4.4.2 软件设计: 28 4.4.3 不足: 28 5 存储芯片 at24c02 简单介绍及接口实现 28 5.1 5.2 5.3 at24c02 功能描述管脚定义 28 管脚定义及接口实现 29 设计心得 30 6 实时时钟 ds1302 简单介绍及接口实现 30 6.1 ds1302 简介 30 6.2 ds1302 结构及工作原理 31 6.3 7 ds1302 的接口实现 32 温度上限报警功能 34 7.1 设计原理 34 7.2 设计心得体会 34 8 与 pc 串口通讯及 vb 上位机简单介绍 35 8.1 与 pc 串口通信 35 8.2 上位机介绍 36 9 总结 40 附录 40 部分原理图: 部分原理图: 40 参考文献 41 致谢 错误!未定义书签。 基于 pic 单片机的多路温度监控巡回系统 1 系统设计 在工业生产和日常生活中,经常要对温度进行测量与控制,并且有时是对 多个点进行温度测量,比如冷库温度监控、环境温度监测、农业温室监控、粮 库温度监控等。在这种情况下,多点温度检测系统应运而生。多点温度检测系 统通常能够对多个工作点的温度进行检测,显示当前温度,并能够对温度进行 存储和报警,还能将温度上传至 pc 机,进行后续处理。传统的测温元件有热电 偶和热电阻,需很多硬件支持并且电路复杂。本文将设计一款由新型的数字温 度传感器 ds18b20 配合单片机,具有温度检测、显示、存储、自动统计分析及 跟电脑通讯连接还利用固定电话远程报警等功能的多点温度监控系统。 30 多路温度 监控系统 固话 报警 4 * 温度传感器 图 1.1 多路温度监控系统模拟应用 pc 机通讯 温度监控主系统构架框图如图 1.2 所示: 12864 液晶显示 四路温度 采集 at24c02 温度储存 pic16f877a 单片机 实时时钟 上限报警 接口 pc 机通讯 图 1.2 多路温度监控系统构架框图 按键控制 图 1.3 手工焊接实物图 主要技术参数 a 温度检测范围 : b 测量精度 : c 显示方式: d 报警方式: -55+125 0.0625 lcd12864 显示 固话报警 2 主芯片:pic16f877a 单片机简介 主芯片: 2.1 pic 单片机的优越之处: (1)哈佛总线结构: mcs-51 单片机的总线结构是冯-诺依曼型,计算机 在同一个存储空间取指 令和数据,两者不能同时进行;而 pic 单片机的总线结构是哈佛结构,指令和数据空 间是完全分开的,一个用于指令,一个用于数据,由于 可以对程序和数据同时进行 访问,所以提高了数据吞吐率。正因为在 pic 单片机中采用了哈佛双总线结构, 所以与常见的微控制器不同的一点是:程序和数据总线可以采用不同的宽度。 数据总线都是 8 位的,但指令总线位数分别位 12、14、16 位。 (2)流水线结构: mcs-51 单片机的取指和执行采用单指令流水线结构,即取一条指令,执行完 后再取下一条指令;而 pic 的取指和执行采用双指令流水线结构,当一条指令被执 行时,允许下一条指令同时被取出,这样就实现了单周期指令。 (3)寄存器组: pic 单片机的所有寄存器,包括 i/o 口,定时器和程序计数器等都采用 ram 结构形式,而且都只需要一个指令周期就可以完成访问和操作;而 mcs-51 单片机 需要两个或两个以上的周期才能改变寄存器的内容。 (4)运行速度高: 由于采用了哈佛总线结构,以及指令的读取和执行才用了流水作业方式,使得 运行速度大大提高。 (5)功耗低: pic 单片机的功率消耗极低,是目前世界上最低的单片机品种之一。在 4mhz 时 钟下工作时耗电不超过 2ma,在睡眠模式下耗电可以低到 1ua 以下。 (6)驱动能力强: i/o 端口驱动负载的能力较强,每个 i/o 引脚吸入和输出电流的最大值可分别达 到 25ma 和 20ma,能够直接驱动发光二极管 led、光电耦合器或者轻微继电器 等。 (7)外接电路简洁 pic 单片机片内集成了上电复位电路、i/o 引脚上拉电路、看门狗定时器等,可 以最大程度减少或免用外接器件,以便实现“纯单片机”应用。这样,不仅方便 于开发,而且还可节省用户的电路空间和制作成本。 (8)程序保密性强 目前,尚无办法对其直接进行解密拷贝,可以最大限度的保护用户的程序版 权。 2.2 pic16f877a 引脚图及主要性能 pic16f877a 的详细引脚如图 2.21 所示。 图 2.2-1 pic16f877a 引脚图 图 2.2 -2 pic16f877a 实物图 主要性能参数如下所示: 具有高性能 risc 仅有 35 条单字指令 100000 次擦写周期 除程序分支指令为两个周期外,其余均为单周期指令 运行速度: dc20mhz 始终输入 dc200ns 指令周期 8k * 14 个 flash 程序存储器 368 * 8 个数据存储器(ram)字节 256 * 8 eeprm 数据存储器字节 提供 14 个中断源 功耗低 在 5v, 4mhz 时钟运行时电流小于 2ma 在 3v, 32khz 时钟运行时电流小于 20ua 支持在线串行编程(icsp) 运行电压范围广,2.0v 到 5.5v 输入及输出电流可达到 25ma timer0:带有预分频器的 8 位定时器/计数器 timer1:带有预分频器的 16 位定时器/计数器,在使用外部晶振 cpu 震荡时钟时,在睡眠期间仍能工作 timer2:带有 8 位周期寄存器,预分频器和后分频器的 8 位定时 器/计数器。 2 个捕捉器,比较器,pwm 模块 其中: 捕捉器是 16 位,最大分辨率是 12.5ns 比较器是 16 位,最大分辨率是 200ns pwm 最大分辨率是 10 位 10 位多通道模数转换器 2.3 最小系统 2.3.1 复位功能 pic16f877a 的复位功能设计得比较完善,实现复位或引起复位的条件和原 因可以归纳成 4 类:人工复位、上电复位、看门狗复位、欠压复位。 这里简单介绍一下人工复位 人工复位:无论是单片机在正常运行程序,还是处在睡眠状态或出现死机 状态,只要在人工复位端 mclr 加入低点平信号,就令其复位。 本次设计的电路图如图 2.31 所示。 图 2.31 pic 最小系统电路图 2.3.2 系统时钟 图 2.32 最小系统实物图 数字电路的工作离不开时钟信号,每一步细微动作都是在一个共同的时间 基准信号协调下完成的。作为时基发生器的时钟震荡电路,为整个单片机芯片 的工作提供系统时钟信号,也为单片机与其他外接芯片之间的通讯提供可靠的 同步时钟信号。 pic16f877a 的时钟电路是由片内的一个反相器和一个反馈电阻,与外接 的 1 个石英晶体和 2 个电容,共同构成的一个自激多谐振荡器。电路如图 2.31 所示。 2.4 设计心得总结 pic16f877a 的最小系统跟 51 相似, 较为简单。 芯片自身增加了很多功能, 如:自带 8 路 ad 转换、增加 spi 总线,引脚复位功能多等。芯片自身功能的增 加给设计带来了很多灵活性,同时也是学习的难点。 3 lcd12864 液晶原理介绍及接口实现 液晶原理 原理介绍及接口实现 3.1 液晶显示模块概述 12864a-1 汉字图形点阵液晶显示模块,可显示汉字及图形,内置 8192 个中文汉 字 (16x16 点阵) 、128 个字符 (8x16 点阵) 64x256 点阵显示 ram 及 (gdram) 。 主要技术参数和显示特性: 电源:vdd 3.3v+5v(内置升压电路,无需负压); 显示内容:128 列 64 行 显示颜色:黄绿 显示角度:6:00 钟直视 lcd 类型:stn 与 mcu 接口:8 位或 4 位并行/3 位串行 配置 led 背光 多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等 3.2 液晶引脚说明 引 脚 引脚名称 号 1 2 3 4 5 6 7 8 9 10 vss vdd v0 rs(cs) r/w(sid) e(clk) db0 db1 db2 db3 h/l h/l h/l h/l h/l h/l h/l 模块的电源地 模块的电源正端 lcd 驱动电压输入端 并行的指令/数据选择信号;串行的片选信 号 并行的读写选择信号;串行的数据口 并行的使能信号;串行的同步时钟 数据 0 数据 1 数据 2 数据 3 方向 功能说明 11 12 13 14 15 16 17 18 19 20 db4 db5 db6 db7 psb nc /ret nc led_a led_k h/l h/l h/l h/l h/l h/l - 数据 4 数据 5 数据 6 数据 7 并/串行接口选择:h-并行;l-串行 空脚 复位 低电平有效 空脚 背光源正极(led+5v) 背光源负极(led-ov) 逻辑工作电压(vdd):4.55.5v 电源地(gnd):0v 工作温度(ta):060(常温) / -2075(宽温) 3.3 接口时序 模块有并行和串行两种连接方法,本文采用并行接法(时序如下): 8 位并行连接时序图 mpu 写资料到模块 程序实现如下: /* * 名 * 功 称:send_i() 能:写一个字节命令到 lcd * 入口参数:unsigned char x 字符 */ void send_i(unsigned char x) chk_busy(); rs = 0; rw = 0; portd = x; e = 1; nop(); nop(); nop(); e = 0; mpu 从模块读出资料 /禁止 /检测 lcd 是否工作繁忙 /设置该字节数据为控制命令 /设置此次操作为写 /送数据口 portd /使能 程序实现如下: /* 读数据 */ unsigned char u8_lcd12864readbyte_f( void ) unsigned char byreturnvalue ; chk_busy() ; /检测 lcd 是否工作繁忙 trisd=0xff; /设置 pd 口为输入状态 portd = 0xff ; /pd 初始化为高电平 rs=1; rw=1; e=0; e=1; byreturnvalue = portd ; / 读置高 / 写置高 / 使能置低 / 使能置高 / 读数据 e=0; trisd=0x00; return byreturnvalue ; / 关使能 / 恢复 pd 口为输出 / 返回读到的数据 3.4 具体指令介绍 具体指令介绍 1、清除显示 code: db0 l 2、位址归位 code: db0 l ddram 3、位址归位 code: db0 l l l l l l l h i/d s 功能:把 ddram 位址计数器调整为“00h”,游标回原点,该功能不影响显示 ddram 功能:执行该命令后,所设置的行将显示在屏幕的第一行。显示起始 行是由 z 地址计数器控制的,该命令自动将 a0-a5 位地址送入 z 地址计数器, 起始地址可以是 0-63 范围内任意一行。z 地址计数器具有循环计数功能,用于 显示行扫描同步,当扫描完一行后自动加一。 4、显示状态 开/关 code: db0 l l l l l l h d c b 功能: d=1;整体显示 on 5、游标或显示移位控制 code: db0 l l l l l h s/c r/l x x 功能:设定游标的移动与显示的移位控制位:这个指令并不改变 ddram 的 rw rs db7 db6 db5 db4 db3 db2 db1 c=1;游标 on b=1;游标位置 on rw rs db7 db6 db5 db4 db3 db2 db1 rw rs db7 db6 db5 db4 db3 db2 db1 l l l l l l l h x 功能:把 ddram 位址计数器调整为“00h”,游标回原点,该功能不影响显示 rw rs db7 db6 db5 db4 db3 db2 db1 l l l l l l l l h 功能:清除显示屏幕,把 ddram 位址计数器调整为“00h” rw rs db7 db6 db5 db4 db3 db2 db1 内容 6、功能设定 code: db0 l 集动作 7、设定 cgram 位址 code: db0 l l l h ac5 ac4 ac3 ac2 ac1 ac0 功能:设定 cgram 位址到位址计数器(ac) 8、设定 ddram 位址 rw rs db7 db6 db5 db4 db3 db2 db1 code: db0 l l h ac6 ac5 ac4 ac3 ac2 ac1 ac0 功能:设定 ddram 位址到位址计数器(ac) 9、读取忙碌状态(bf)和位址 code: rw rs db7 db6 db5 db4 db3 db2 db1 db0 l h bf ac6 ac5 ac4 ac3 ac2 ac1 ac0 功能:读取忙碌状态(bf)可以确认内部动作是否完成,同时可以读出位址计 数器(ac)的值 10、写资料到 ram code: rw rs db7 db6 db5 db4 db3 db2 db1 db0 h l d7 d6 d5 d4 d3 d2 d1 d0 功能:写入资料到内部的 ram(ddram/cgram/tram/gdram) 11、读出 ram 的值 code: rw rs db7 db6 db5 db4 db3 db2 db1 db0 h 12、 db0 h d7 d6 d5 d4 d3 d2 d1 d0 功能:从内部 ram 读取资料(ddram/cgram/tram/gdram) 待命模式(12h) rw rs db7 db6 db5 db4 db3 db2 db1 code: rw rs db7 db6 db5 db4 db3 db2 db1 l l l h dl x 0 re x x 功能:dl=1(必须设为 1) re=1;扩充指令集动作 re=0:基本指令 rw rs db7 db6 db5 db4 db3 db2 db1 l l l l l l l l l h 功能:进入待命模式,执行其他命令都可终止待命模式 13、卷动位址或 iram 位址选择(13h) code: db0 l l l l l l l l h sr 功能:sr=1;允许输入卷动位址 14、反白选择(14h) code: db0 l l l l l l l h r1 r0 功能:选择 4 行中的任一行作反白显示,并可决定反白的与否 15、睡眠模式(015h) code: db0 l l l l l l h sl x x 功能:sl=1;脱离睡眠模式 16、扩充功能设定(016h) code: db0 l l l l h h x 1 re g l g=1;绘图显示 功能:re=1;扩充指令集动作 on g=0;绘图显示 off 17、设定 iram 位址或卷动位址(017h) code: db0 l l l h ac5 ac4 ac3 ac2 ac1 ac0 功能:sr=1;ac5ac0 为垂直卷动位址 位址 18、设定绘图 ram 位址(018h) code: db0 rw rs db7 db6 db5 db4 db3 db2 db1 sr=0;ac3ac0 写 iconram rw rs db7 db6 db5 db4 db3 db2 db1 re=0;基本指令集动作 rw rs db7 db6 db5 db4 db3 db2 db1 sl=0;进入睡眠模式 rw rs db7 db6 db5 db4 db3 db2 db1 rw rs db7 db6 db5 db4 db3 db2 db1 sr=0;允许输入 iram 位址 rw rs db7 db6 db5 db4 db3 db2 db1 l l h ac6 ac5 ac4 ac3 ac2 ac1 ac0 功能:设定 gdram 位址到位址计数器(ac) 备注、 1、当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读 取 bf 标志时 bf 需为 0,方可接受新的指令;如果在送出一个指令前并不检查 bf 标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等 待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说 明。 2、“re”为基本指令集与扩充指令集的选择控制位元,当变更“re”位元 后,往后的指令集将维持在最后的状态,除非再次变更“re”位元,否则使用 相同指令集时,不需每次重设“re”位元。 本次设计液晶初始化如下: void lcd_init() rst = 0; delay(1); rst = 1; / / nop(); psb = 1; /设置 lcd 为 8 位并口通信 /基本指令操作 /清除显示 /指定在写入或读取时,光标的移动方向 /开显示,关光标,不闪烁 /复位 lcd /保证复位所需要的时间(1ms) /恢复 lcd 正常工作 send_i(0x30); send_i(0x01); send_i(0x06); send_i(0x0c); 3.5 显示坐标关系 3.5.1 图形显示坐标 3.5.1、图形显示坐标 水平方向 x以字节单位 垂直方向 y以位为单位 /* 函数名称:draw_pm 功 能:在整个液晶屏幕上画图 参 数:无 返回值 :无 */ void draw_pm(const uchar *ptr) uchar i,j,k; send_i(0x34); /打开扩展指令集 i = 0x80; for(j = 0;j 32;j+) send_i(i+); send_i(0x80); for(k = 0;k 16;k+) send_d(*ptr+); i = 0x80; for(j = 0;j 32;j+) send_i(i+); send_i(0x88); for(k = 0;k 0;i-) value = 1; dq_low(); nop();nop();nop();nop();nop();nop(); dq_high(); nop();nop();nop();nop();nop(); j = dq; if (j) value |= 0x80; delay(2, 7); return (value); (3) ds18b20 的写时序: 对于 ds18b20 的写时序仍然分为写 0 时序和写 1 时序两个过程。 对于 ds18b20 写 0 时序和写 1 时序的要求不同,当要写 0 时序时,单总线要 被拉低至少 60us,保证 ds18b20 能够在 15us 到 45us 之间能够正确地采样 io 总 线上的“0”电平,当要写 1 时序时,单总线被拉低之后,在 15us 之内就得释放 单总线。 /63us /6us /拉至高电平 /4us /读出温度 图 4.5 ds18b20 写时序图 /* * 名 * 功 称:write_byte() 能:写 18b20 写字节 * 入口参数:uch val 待写的数据 */ void write_byte(uch val) uch i; uch temp; for (i = 8;i 0;i-) temp = val & 0x01; dq_low(); nop();nop();nop();nop();nop(); /从高拉至低电平,产生写时间隙 if (temp = 1) dq_high(); delay(2, 7); dq_high(); nop();nop(); val = val 1; ds18b20 内部带有共 9 个字节的高速暂存器 ram 和电可擦除 eeprom,起结构 如表 2 所示。 表 2 ds18b20 高速暂存器结构 寄存器内容 温度值低位(lsb) 温度值高位(msb) 字节地址 0 1 /最低位移出 /如果写 1,拉高电平 /延时 63us /右移一位 高温限值(th) 低温限值(tl) 配置寄存器 保留 保留 保留 crc 校验值 2 3 4 5 6 7 8 ds18b20 所包含的操作指令如表 3 所示。 表 3 ds18b20 操作指令 rom 操作指令 指令 约定代 码 读 rom 匹配 rom 33h 55h 读 ds18b20 温度传感器 rom 中的编码(即 64 位地址) 发出命令后接着发出 64 位 rom 编码,访问总线上与该编码对应的 芯片 搜索 rom 跳过 rom 告警搜索 f0h cch ech 用于确定挂接在同一总线上 ds18b20 的个数 忽略 64 位 rom 地址,直接向 ds18b20 发温度变换命令 执行后只有问多超过上限或下限的芯片才响应 ram 操作指令 指令 约定代 码 温度转换 读暂存器 写暂存器 44h beh 4eh 启动 ds18b20 温度转换。12 位转换时长典型值 750ms 读内部 ram 中 9 字节的数据。 向 ram 第 2、3 字节写上、下限温度数据,紧跟命令之后传送 2 字 节数据 复制暂存 器 重调 eeprom b8h 将 eeprom 中内容恢复到 ram 中第 3、4 字节 48h 将 ram 中第 2、3 字节的内容复制到内部 eeprom 中 功能 功能 温度数据在高速暂存器 ram 的第 0 和第 1 个字节中的存储格式如下表 4 所 示。 表 4 ds18b20 温度数据存储格式 位7 2 3 位6 2 2 位5 2 1 位4 2 0 位3 2 -1 位2 2 -2 位1 2 -3 位0 2 -4 位 15 s 位 14 s 位 13 s 位 12 s 位 11 s 位 10 2 6 位9 2 5 位8 2 4 ds18b20 在出厂是默认配置为 12 位,其中最高位为符号位,即温度值共 11 位,单片机在读取数据时,一次会读 2 字节共 16 位,读完后将低 11 位的二进制 数转化为十进制数后再乘以 0.0625 便为所测的实际温度值。另外,还需要判断 温度的正负。前 5 个数字为符号位,这 5 位同时变化,我们只需要判断 11 位就 可以了。前 5 位为 1 时,读取的温度为负值,且测到的数值需要取反加 1 再乘以 0.0625 才可得到实际温度值。前 5 位为 0 时,读取的温度为正值,且温度为正 值时,只要将测得的数值乘以 0.0625 即可得到实际温度值。考虑到实际使用的 需要,在这里我们只使用一个 ds18b20,故每次操作前只需复位后发出 skip rom 指令(即跳过 rom 指令)再读出温度的正值、并精确到小数点后一位,即可满足 设计需求。 /* * 名 * 功 称:get_temp() 能:启动温度转换 */ void get_tem() uchar tem1,tem2,num; float aaa; reset(); write_byte(0xcc); write_byte(0x44); reset(); write_byte(0xcc); write_byte(0xbe); tem1=read_byte(); tem2=read_byte(); shu=(tem24); temper=(int)aaa; /复位 /跳过 rom /温度转换 /再次复位,等待从机应答 /忽略 rom 匹配 /发送读温度命令 /读出温度低 8 /读出温度高 8 位 /温度整数部分 /强制转换成整型 for(num=100;num0;num-) /确保温度转换完成所需要的时间 aaa=(tem2*256+tem1)*6.25; /温度小数部分 a1=temper/1000; a2=temper%1000/100; a3=temper%100/10; a4=temper%10; /取温度十位 /取个位 /小数点后个位 /小数点后十位 4.3 ds18b20 的接口实现 4.3.1 硬件设计 ds18b20 在本次设计中接线图如图 4.6 所示,实验板硬件图如图 4.7 所示 这次实验只焊了两个温度传感器而已,其他两个用法一样,留作外接口,可以方 便外用。 图 4.6 ds18b20 原理图 图 4.7 dsb18b20 硬件连接实物图 4.3.2 软件设计 根据 ds18b20 约定的通讯协议,每次使用 ds18b20 之前都必须经过三个步 骤,即先复位 ds18b20,接着发出 rom 操作指令,然后才可以发出 ram 操作指令 以进行温度转换等命令。本系统将实现读出 ds18b20 的温度并实时显示到 lcd12864 上,分辨率为 0.0625。由于 ds18b20 对时序要求很严格,所以在程 序设计时,时序要多加注意一点,不过数字不是死的,只要控制合理控制也不是 扫描大问题。ds18b20 首次初始化时开启温度转换,之后每 1s 进行一次 ds18b20 的温度读取和转换,具体实现效果图如图 4.8 流程图如图 4.9 所示 图 4.8 温度采集效果实物图 芯片上电 复位 ds18b20 发出 skip rom 启动温度转换 1s 到? n y 复位 ds18b20 发出 skip rom 读取温度 图 4.9 ds18b20 读取温度流程图 4.4 设计心得总结 4.4.1 焊接问题 焊接问题: 焊接 ds18b20 时,速度要快,如果高温的电烙铁持续接触传感器很容易烧 掉 ds18b20, 因为电烙铁一般温度为 350 450 度, 而传感器承受温度为 125 度。 我曾经因此烧坏了两个传感器,得此痛训! 4.4.2 软件设计: 软件设计: ds18b20 时序要求较为严格,这里的严格不是说一定要按手册的时间一摸 一样而是说相对其他芯片来说严格了一点。 如果读取不到温度应该检查一下时序 时间设计问题。再有一个难点就是温度转换问题。温度能显示到小数点后 4 位, 如果要将温度全部读出,应该将整数部分乘以 10000 再加上小数部分,化浮点数 为整数,当然也可以直接采用浮点数相乘。开机会出现 85c 那是 18b20 复位值 4.4.3 不足: 不足: 此次设计没有处理温度负数情况,如果要处理应该判断最高位符号位,然 后取反加一。 18b20 可单总线挂多个, 这里 io 口有剩再加上为了程序设计简单采用了并 口方式。 5 存储芯片 at24c02 简单介绍及接口实现 5.1 at24c02 功能描述 管脚定义 功能描述管脚定义 at24c02 是一个 2k 位串行 cmos e2prom, 内部含有 256 个 8 位 字 节 , catalyst 公 司 的 先 进 cmos 技 术 实 质 上 减 少 了 器 件 的 功 耗 。 at24c02 有一个 16 字节页写缓冲器。该器件通过 ic 总线接口进行操作, 有一个专门的写保护功能。at24c02 支持 ic,总线数据传送协议 ic,总 线协议规定任何将数据传送到总线的器件作为发送器。任何从总线接收数 据的器件为接收器。数据传送是由产生串行时钟和所有起始停止信号的主 器件控制的。主器件和从器件都可以作为发送器或接收器,但由主器件控 制传送数据(发送或接收)的模式,通过器件地址输入端 a0、a1 和 a2 可 以实现将最多 8 个 at24c02 器件连接到总线上。 本次设计采用 4 个 at24c02 用来储存 4 个温度传感器采集到的温度, 用以回显。只要有温度较大变化都会被储存,随时可以通过功能按键切换 功能查看, 也可以将温度传回 pc 机统计分析。 5.1 是硬件实现的效果图。 图 图 5.1 温度储存之后统计分析通过液晶显示出来 5.2 管脚定义及接口实现 at24c02 管脚图及硬件连接电路图如图 5.2 所示。个引脚功能如下: scl 串行时钟 at24c02 串行时钟输入管脚用于产生器件所有数据发送或接收的时 钟,这是一个输入管脚。 sda 串行数据 地址 串行数据/地址 at24c02 双向串行数据/地址管脚用于器件所有数据的发送或接收, sda 是一个开漏输出管脚,可与其它开漏输出或集电极开路输出进行线或 (wire-or)。 a0、 a1、 a2 器件地址输入端 、 、 这些输入脚用于多个器件级联时设置器件地址,当这些脚悬空时默认 值为 0。 当使用 at24c02 时最大可级联 8 个器件。 如果只有一个 at24c02 被总线寻址,这三个地址输入脚(a0、a1、a2 )可悬空或连接到 vss, 如果只有一个 at24c02 被总线寻址这三个地址输入脚(a0、a1、a2 )必 须连接到 vss。 wp 写保护 如果 wp 管脚连接到 vcc,所有的内容都被写保护只能读。当 wp 管 脚连接到 vss 或悬空允许器件进行正常的读/写操作 图 5.2 at24c02 硬件连接图 设计思想如下: 启动 24c02 监控温度 温度有 较大变化? n y 储存温度 储存时间 5.3 设计心得 a0、a1、a2 器件地址输入端,应该设计不一样以区分各个存储器, 一个 24c02 对应一个传感器。上拉电阻 4.7k 不可以省,不然会出现问题。 6 实时时钟 ds1302 简单介绍及接口实现 6.1 ds1302 简介 ds1302 是美国 dallas 公司推出的一种高性能、低功耗、带 ram 的实时时钟 电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功 能,工作电压为 2.5v5.5v。采用三线接口与 cpu 进行同步通信,并可采用突 发方式一次传送多个字节的时钟信号或 ram 数据。ds1302 内部有一个 318 的 用于临时性存放数据的 ram 寄
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度市政工程土石方工程居间费管理协议
- 2025版智慧农业水果园承包种植合作协议
- 2025年度夫妻共同财产分割补充协议书
- 诸葛亮课件简介
- 诸城电脑知识培训班课件
- 2025冰箱维修维护合同范本
- 2025年个体房屋租赁合同范本
- 2025民办学校聘用专任教师合同
- 语文知识培训班开班讲话课件
- 2025年手工鞋安全生产合同
- 技术研发项目进度报告及问题反馈表
- 秦兵马俑的课件教学
- DBJT15-110-2015 广东省建筑防火及消防设施检测技术规程
- 2024年河北机场管理集团有限公司招聘考试真题
- 低血糖知识培训课件
- 银行公司服务礼仪管理规章
- 2025年秋季开学全体教师大会校长讲话:践行“六个学会”做学生生命中的那束光
- 吊装作业安全专项方案
- 2025年上海公务员考试(城市建设管理)历年参考题库含答案详解(5卷)
- 代理记账投诉管理办法
- 建筑工地实名制管理
评论
0/150
提交评论