单片机课程设计:基于基于pic16f877a单片机的八路温度巡回检测系统设计内容摘要:
下 const uchar table1[ ] 基 PIC 单片机。 const uchar table2[ ] 多路温度。 const uchar table3[ ] 巡回检测系统。 const uchar table4[ ] 2020 年 12 月 01 日。 send_i 0x80。 // 定位在第一行 writelcd table1。 // 写:基 PIC 单片机 send_i 0x90。 // 定位在第二行 writelcd table2。 // 写:多路温度 send_i 0x88。 // 定位在第三行 writelcd table3。 // 写:巡回检测系统 send_i 0x98。 // 定位在第四行 writelcd table4。 // 写: 2020 年 12 月 01 日 与单片机的接口实现 12864 液晶的电路连线图如图 1 所示,实物位置如图 2 所示 图 1 12864 液晶电路连接图 图 2 12864 液晶模块实物图 设计心得总结 LCD12864 与 1602 相比需要较大的电流驱动,如果出现图片模糊不清晰或者灰暗,除了检查背光灯外应考虑电源问题。 最好采用大于 5V 的电源,经 7805稳压管稳压驱动,以保证电流。 基 本驱动跟 1602 相似难度不大。 中文及图像显示是 12864 最大的特点也是难点,主要是指令较多,还有就是图像驱动需要了解液晶内部原理。 整屏画图可以使用 PCtoLCD2020 把图片转换成 16 进制数,局部画曲线、直线、圆等需要一些算法,比较复杂 DS18B20 原理介绍及接口实现 DS18B20 是 DALLAS 公司的 图 内部结构图 DS18B20 的内部结构图如图 所示。 由此我们可以看出 DS18B20 主要由 4部分组成: 64 位 ROM、温度传感器、非挥发的温度报警触发器 TH 和 TL、配置寄存器。 DS18B20 的管脚排列如图所示, DQ 为数字信号输入/输出端; GND 为电源地; VDD 为外接供电电源输入端在寄生电源接线方式时接地 图 DS18B20 复位时序图 程序实现如下: /******************************************************************** * 名 称: reset * 功 能: 18b20 复位 ********************************************************************/ define DQ RB7 define DQ_HIGH TRISB7 1 define DQ_LOW TRISB7 0。 DQ 0 void reset uchar st 1。 DQ_HIGH。 // 先拉至高电平 NOP。 NOP。 while st DQ_LOW。 // 低电平 delayus 70,30。 // 延时 503us DQ_HIGH。 //释放总线等电阻拉高总线 delayus 4,4。 //延时 60us if DQ 1 //没有接收到应答信号,继续复位 st 1。 else //接收到应答信号 st 0。 delayus 50,10。 //延时 430us DS18B20 的读时序: 对于 DS18B20 的读时序分为读 0 时序和读 1 时序两个过程。 对于 DS18B20 的读时隙是从主机把单总线拉低之后,在 15uS 之内释放单总线,以让 DS18B20 把数据传输到单总线上。 DS18B20 在完成一个读时序过程,至少需要 60us 才能完成。 图 DS18B20 读时序图 /******************************************************************** * 名 称: read_byte * 功 能: 18b20 读字节 * 出口参数:读出 18B20 的内容 ********************************************************************/ uch read_byte uch i。 uch value 0。 //读出温度 static bit j。 for i 8。 i 0。 i value 1。 DQ_LOW。 NOP。 NOP。 NOP。 NOP。 NOP。 NOP。 //6us DQ_HIGH。 //拉至高电平 NOP。 NOP。 NOP。 NOP。 NOP。 //4us j DQ。 if j value | 0x80。 delay 2, 7。 //63us return value。 DS18B20 的写时序: 对于 DS18B20 的写时序仍然分为写 0 时序和写 1 时序两个过程。 对于 DS18B20 写 0 时序和写 1 时序的要求不同,当要写 0 时序时,单总线要被拉低至少 60us,保证 DS18B20 能够在 15us 到 45us 之间能够正确地采样 IO 总线上的“ 0”电平,当要写 1 时序时,单总线被拉低之后,在 15us 之内就得释放单总线。 图 DS18B20 写时序图 /******************************************************************** * 名 称: write_byte * 功 能:写 18b20 写字节 * 入口参 数: uch val 待写的数据 *******************************************************************/ void write_byte uch val uch i。 uch temp。 for i 8。 i 0。 i temp val amp。 0x01。 //最低位移出 DQ_LOW。 NOP。 NOP。 NOP。 NOP。 NOP。 //从高拉至低电平 ,产生 写时间隙 if temp 1 DQ_HIGH。 //如果写 1,拉高电平 delay 2, 7。 //延时 63us DQ_HIGH。 NOP。 NOP。 val val 1。 //右移一位 DS18B20 内部带有共 9 个字节的高速暂存器 RAM 和电可擦除 EEPROM,起结构如表 2 所示。 表 2 DS18B20 高速暂存器结构 寄存器内容 字节地址 温度值低位( LSB) 0 温度值高位( MSB) 1 高温限值( TH) 2 低温限值( TL) 3 配置寄存器 4 保留 5 保留 6 保留 7 CRC 校验值 8 DS18B20 所包含的操作指令如表 3 所示。 表 3 DS18B20 操作指令 ROM 操作指令 指令 约定代码 功能 读 ROM 33H 读 DS18B20温度传感器 ROM 中的编码(即 64 位地址) 匹配 ROM 55H 发出命令后接着发出 64 位 ROM 编码,访问总线上与该编码对应的芯片 搜索 ROM F0H 用于确定挂接在同一总线上 DS18B20 的个数 跳过 ROM CCH 忽略64 位 ROM 地址,直接向 DS18B20 发温度变换命令 告警搜索 ECH 执行后只有问多超过上限或下限的芯片才响应 RAM 操作指令 指令 约定代码 功能 温度转换 44H 启动 DS18B20 温度转换。 12 位转换时长典型值750ms 读暂存器 BEH 读内部 RAM 中 9 字节的数据。 写暂存器 4EH 向 RAM 第 3 字节写上、下限温度数据,紧跟命令之后传送 2 字节数据 复制暂存器 48H 将 RAM 中第 3 字节的内容复制到内部 EEPROM 中 重调 EEPROM B8H 将 EEPROM 中内容恢复到 RAM 中第 4 字节 温度数据在高速暂存器 RAM的第 0和第 1个字节中的存储格式如下表 4所示。 表 4 DS18B20 温度数据存储格式 位 7 位 6 位 5 位 4 位 3 位 2 位 1 位 0 23 22 21 20 21 22 23 24 位 15 位 14 位 13 位 12 位 11 位 10 位 9 位 8 S S S S S 26 25 24 DS18B20 在出厂是默认配置为 12 位,其中最高位为符号位,即温度值共 11位,单片机在读取数据时,一次会读 2 字节共 16 位,读完后将低 11 位的二进制数转 化为十进制数后再乘以 便为所测的实际温度值。 另外,还需要判断温度的正负。 前 5 个数字为符号位,这 5 位同时变化,我们只需要判断 11 位就可以了。 前 5 位为 1 时,读取的温度为负值,且测到的数值需要取反加 1 再乘以 才可得到实际温度值。 前 5 位为 0 时,读取的温度为正值,且温度为正值时,只要将测得的数值乘以 即可得到实际温度值。 考虑到实际使用的需要,在这里我们只使用一个 DS18B20,故每次操作前只需复位后发出 Skip ROM指令(即跳过 ROM 指令)再读出温度的正值、并精确到小数点后一位,即可满 足设计需求。 /***************************************************************** * 名 称: get_temp * 功 能:启动温度转换 *****************************************************************/ void get_tem uchar tem1,tem2,num。 float aaa。 reset。 //复位 write_byte 0xCC。 //跳过 ROM write_byte 0x44。 //温度转换 for num 100。 num 0。 num //确保温度转换完成所需要的时间 reset。 //再次复位,等待从机应答 write_byte 0xCC。 //忽略 ROM 匹配 write_byte 0xBE。 //发送读温度命令 tem1 read_byte。 //读出 温度低 8 tem2 read_byte。 //读出温度高 8 位 shu tem2 4|tem1 4。 //温度整数部分 aaa tem2*256+tem1 *。 //温度小数部分 temper int aaa。 //强制转换成整型 a1 temper/1000。 //取温度十位 a2 temper%1000/100。 //取个位 a3 temper%100/10。 //小数点后个位 a4 temper%10。 //小数点后十位 DS18B20 的接口实现 硬件设计 DS18B20 在本次设计中接线图如图 所示,实验板硬件图如图 所示 这次实验只焊了两个温度传感器而已,其。单片机课程设计:基于基于pic16f877a单片机的八路温度巡回检测系统设计
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。