1、 课程设计 课程名称: 基于单片机的温度监测系统设计 学 院: 明德学院 专 业: 电自 10152 姓 名: 郭贵方 号: 102003110228 年 级: 大三 任课教师: 杨靖 2013 年 7 月 6 日 目 录 前 言 第一章 单片机概述*3 第二章 总体方案设计*5 2.1 课题的意义*5 2.2 系统整体硬件电路*5 2.2.1 芯片简介*5 2.2.2 硬件电路设计及描述*6 第三章 系统软件算法设计*11 心得体会*20 参考文献*21 第一章 单片机概述 单 片 机 诞 生 于 20 世 纪 70 年 代 末 , 经 历 了 SCM、 MCU、 SoC 三 大 阶 段 。
2、 单 片 机 由 运 算 器 、 控 制 器 、 存 储 器 、 输 入 输 出 设 备 构 成 。 单 片 机 是 一 种 集 成 在 电 路 芯 片 , 是 采 用 超 大 规 模 集 成 电 路 技 术 把 具 有 数 据 处 理 能 力 的 中 央 处 理 器 CPU 随 机 存 储 器 RAM、 只 读 存 储 器 ROM、 多 种 I/O 口 和 中 断 系 统 、 定 时 器 /计 时 器 等 功 能 ( 可 能 还 包 括 显 示 驱 动 电 路 、 脉 宽 调 制 电 路 、 模 拟 多 路 转 换 器 、 A/D 转 换 器 等 电 路 ) 集 成 到 一 块 硅 片 上
3、构 成 的 一 个 小 而 完 善 的 计 算 机 系 统 。 早 期 单 片 机 主 要 由 于 工 艺 及 设 计 水 平 不 高 、 功 耗 高 和 抗 干 扰 性 能 差 等 原 因 , 所 以 采 取 稳 妥 方 案 : 即 采 用 较 高 的 分 频 系 数 对 时 钟 分 频 , 使 得 指 令 周 期 长 , 执 行 速 度 慢 。 以 后 的 CMOS 单 片 机 虽 然 采 用 提 高 时 钟 频 率 和 缩 小 分 频 系 数 等 措 施 , 但 这 种 状 态 并 未 被 彻 底 改 观 (51 以 及 51 兼 容 )。 此 间 虽 有 某 些 精 简 指 令 集 单
4、 片 机 (RISC)问 世 ,但 依 然 沿 袭 对 时 钟 分 频 的 作 法 。 单 片 机 问 世 以 来 所 走 的 路 与 微 处 理 器 是 不 同 的 。 微 处 理 器 向 着 高 速 运 算 、 数 据 分 析 与 处 理 能 力 、 大 规 模 容 量 存 储 等 方 向 发 展 , 以 提 高 通 用 计 算 机 的 性 能 。 其 接 口 界 面 也 是 为 了 满 足 外 设 和 网 络 接 口 而 设 计 的 。 单 片 机 则 是 从 工 业 测 控 对 象 、 环 境 、 接 口 特 点 出 发 , 向 着 增 强 控 制 功 能 、 提 高 工 业 环 境
5、下 的 可 靠 性 、 灵 活 方 便 的 构 成 应 用 计 算 机 系 统 的 界 面 接 口 的 方 向 发 展 。 因 此 , 单 片 机 有 着 自 已 的 特 点 , 主 要 是 : 1 2 品 种 多 样 , 型 号 繁 多 。 品 种 型 号 逐 年 扩 充 以 适 应 各 种 需 要 。 使 系 统 开 发 者 有 很 大 的 选 择 自 由 。 提 高 性 能 , 扩 大 容 量 。 集 成 度 已 达 200 万 个 晶 体 管 以 上 。 总 线 工 作 速 度 已 达 数 十 微 秒 。 工 作 频 率 达 到 30MHz 甚 至 40MHz。 指 令 执 行 周 期
6、 减 到 数 十 微 秒 。 存 储 器 容 量 RAM 发 展 到 1K、 2K, RO M 发 展 到 32K、 64K; 增 加 控 制 功 能 , 向 外 部 接 口 延 伸 。 把 原 属 外 围 芯 片 的 功 能 集 成 到 本 芯 片 内 。 现 今 的 单 片 机 已 发 展 到 在 一 块 含 有 CPU 的 芯 片 上 , 除 嵌 入 RAM、 ROM 存 储 器 和 I O 接 口 外 , 还 有 A D、 PWM、 U ART、 Timer Counter、 DMA、 Watchdog、 Serial Port、 Sensor、 driver、 还 有 显 示 驱 动
7、 、 键 盘 控 制 、 函 数 发 生 器 、 比 较 器 等 , 构 成 一 个 完 整 的 功 能 强 的 计 算 机 应 用 系 统 ; 低 功 耗 。 供 电 电 压 从 5V 降 到 3V、 2V 甚 至 1V 左 右 。 工 作 电 流 从 mA 级 降 到 A 级 。 在 生 产 工 艺 上 以 CMOS 代 替 NMOS, 并 向 HCMOS 过 渡 ; 应 用 软 件 配 套 。 提 供 了 软 件 库 , 包 括 标 准 应 用 软 件 , 示 范 设 计 方 法 。 使 用 户 开 发 单 片 机 应 用 系 统 时 更 快 速 、 方 便 。 使 有 可 能 做 到
8、用 一 周 时 间 开 发 一 个 新 的 应 用 产 品 ; 系 统 扩 展 与 配 置 。 有 供 扩 展 外 部 电 路 用 的 三 总 线 结 构 DB、 AB、 CB, 以 方 便 构 成 各 种 应 用 系 统 。 根 据 单 片 机 网 络 系 统 、 多 机 系 统 的 特 点 专 门 开 发 出 单 片 机 串 行 总 线 。 此 外 , 还 特 别 配 置 有 传 感 器 , 人 机 对 话 、 网 络 多 通 道 等 接 口 , 以 便 构 成 网 络 和 多 机 系 统 。 目 前 单 片 机 渗 透 到 我 们 生 活 的 各 个 领 域 , 几 乎 很 难 找 到
9、哪 个 领 域 没 有 单 片 机 的 踪 迹 全 保 障 系 统 , 录 像 机 、 摄 像 机 、 全 自 动 洗 衣 机 的 控 制 , 以 及 程 控 玩 具 、 电 子 宠 物 等 等 , 这 些 都 离 不 开 单 片 机 。 更 不 用 说 自 动 控 制 领 域 的 机 器 人 、 智 能 仪 表 、 。 导 弹 的 导 航 装 置 , 飞 机 上 各 种 仪 表 的 控 制 , 计 算 机 的 网 络 通 讯 与 数 据 传 输 , 工 业 自 动 化 过 程 的 实 时 控 制 和 数 据 处 理 , 广 泛 使 用 的 各 种 智 能 IC 卡 , 民 用 豪 华 轿 车
10、 的 安 医 疗 器 械 以 及 各 种 智 能 机 械 了 。 因 此 , 单 片 机 的 学 习 、 开 发 与 应 用 将 造 就 一 批 计 算 机 应 用 与 智 能 化 控 制 的 科 学 家 、 工 程 师 。 单 片 机 广 泛 应 用 于 仪 器 仪 表 、 家 用 电 器 、 医 用 设 备 、 航 空 航 天 、 专 用 设 备 的 智 能 化 管 理 及 过 程 控 制 等 领 域 。 第二章 总体方案设计 2.1 课题设计的意义 一:消化与巩固单片机原理及接口技术课程所学的知识。 一切问题来源于书本,在做课题的时候,有很多的问题都需要在课本中找到答 案,这就使得把这学
11、期的单片机原理及接口技术有了一次系统的复习,对 所学的知识进行了巩固与消化。 二:理论联系实际,用理论知识解决实际的问题。 三:培养设计能力,初步掌握设计的步骤和方法。 四:设计一个具有一定功能的温度检测系统,该系统上电或按键复位后监 测准备状态,按监测启动键,系统开始监测温度,并将温度通过串行口方式传 送给计算机,按下停止键,系统停止监测。要求使用 DS18B20 监测温度,有上 电复位和按键复位,要有声光报警。 2.2 系统整体硬件电路 2.2.1 芯片介绍 本次设计一共用到了以下几个芯片:80C51、DS18B20、74LS138、LED 数码管显 示器。 80C51 的介绍:MCS-5
12、1 系列单片机的硬件结构基本相同,主要区别在于芯片 上 ROM 的形式和配置。8051 的基本结构由:1 个 8 位的 CPU、1 个片内时钟振荡 器、4KB 的片内程序存储器、128 个字节的片内数据存储器、4 个并行的 I/O 口, 具有 32 个双向的、可独立操作的 I/O 线、2 个 16 位的定时/计数器、1 个全双 工的串行口、5 个中断源,可设置成 2 个优先级、21 个特殊功能寄存器、具有 很强的布尔处理功能有机结合在一起,共有 40 个引脚。 DS-18B20 数 字 温 度 传 感 器 的 介 绍 : DS18B20 可 组 网 数 字 温 度 传 感 器 芯 片 封 装
13、而 成 , 具 有 耐 磨 耐 碰 , 体 积 小 , 使 用 方 便 , 封 装 形 式 多 样 , 适 用 于 各 种 狭 小 空 间 设 备 数 字 测 温 和 控 制 领 域 。 独 特 的 单 线 接 口 方 式 , DS18B20 在 与 微 处 理 器 连 接 时 仅 需 要 一 条 口 线 即 可 实 现 微 处 理 器 与 DS18B20 的 双 向 通 讯 。 测 温 范 围 55 +125 , 固 有 测 温 分 辨 率 0.5 , 支 持 多 点 组 网 功 能 , 多 个 DS18B20 可 以 并 联 在 唯 一 的 三 线 上 , 最 多 只 能 并 联 8 个
14、, 实 现 多 点 测 温 , 如 果 数 量 过 多 , 会 使 供 电 电 源 电 压 过 低 , 从 而 造 成 信 号 传 输 的 不 稳 定 。 DS18B20 数 字 温 度 计 提 供 9 位 二 进 制 温 度 读 数 , 指 示 器 件 的 温 度 , 信 息 经 过 单 线 接 口 送 入 BS1820, 因 此 从 主 机 CPU 到 DS1820 仅 需 一 条 线 盒 地 线 , DS1820 的 电 源 可 以 由 数 据 线 本 身 提 供 而 不 需 要 外 部 电 源 。 74LS138 的介绍:74LS138 是一种常用的 3-8 译码器芯片。其中,A、B、
15、C 为数据输入端,/G2A.、/G2B、和 G1 为数据输入允许端, /YO-/Y7 为译码器的 输出端,低电平有效,显然,当输入 C、B 和 A 的状态确定时,译码器输出 /Y0Y7 只有 1 个为低电平,其余为高电平。 LED 数码显示器的介绍:LED 数码显示管是单片机应用产品中常用的廉价 输出设备,它是由若干个发光二极管组成显示字段,当二极管导通时,相应的 一个点或一个笔画发光,就能显示出各种字符,常用的 8 段 LED 显示 ag 和 dp 为显示字段控制端。 2.2.2 硬件电路的描述及设计 二 硬件电路的描述 1. 温度采集系统功能说明及总体方案的介绍 (1)温度测量功能 利用
16、DS18B20 数字温度传感器实现对温度进行精确测量,是温度值显示在数 码管上。 (2)温度采集功能 利用 DS18B20 数字传感器对温度进行采集,单片机作为控制器件,数据通过 串行口传至计算机,进行温度的采集。 (3)系统工作流程 附图一 (4)总体方案的介绍 利用 DS18B20 对温度进行下采集,通过单片机的处理,在 LED 上显示出数据, 利用两个开关控制,开始键按下,开始测试,停止按键,按下后停止检测,数 码管显示最近一次检测值。超过 60 度,声光报警。 2 绘制硬件电路图, 3 温度检测系统的原件清单 器件名称 数量 80C51 单片机 1 个 DS18B20 1 个 74LS
17、138 1 个 LED 数码管 3 个 蜂鸣器 1 个 二极管 1 个 电容 若干 电阻 若干 开关 若干 4 详细介绍温度检测系统电路主要部分的工作原理 (1) 单片机型号的选择及引脚的工作情况 本设计用到了 80C51 共有 40 个引脚,其中用到的引脚有:控制引脚、 RESET、/EA、P0 、P1、 P2 口,还用到了 XTAL1、和 XTAL2 的晶整信号的 输入、输出引脚。 RESET 引脚:复位信号,在 RESET 引脚上保持 2 个机器周期以上的高电平, 单片机复位,通过按键上电复位电路输入信号,控制单片机。 /EA 引脚:内外程序存储器选择控制端,/EA 接高电平,CPU 对
18、程序存储器 的操作从单片机内部程序存储器开始,并可延伸到单片机的外部程序存储器。 P0 口引脚:8 位双向的三态 I/O 口,单片机有外部扩展时,作为低 8 位地址 线和数据总线使用,可以驱动 8 个 TTL 负载,在设计中 P0.0 和 P0.1 控制开关 K1 和 K2,P0.2、P0.3、P0.4 控制 74LS138 译码器的选通。 P1 口引脚:8 位准双向 I/O 口,可以驱动 4 个 TTL 负载,在设计中 P1.0 接 的是 GND 接地引脚,P1.1 和 P1.2 接的是声光报警器,P1.3 接的是 DS18B20 的温度检测器。 P2 口引脚:8 位准双向的 I/O 口,当
19、单片机有外部扩展时,作为高 8 位的地 址线使用,可以驱动 4 个 TTL 负载,设计中用 P2 口控制三个共阴级的 LED。 XTAL1、XTAL2 引脚:晶体振荡器信号输入输出引脚,用来控制设计中的 晶振电路。 (2)复位电路的原理 复位电路的目的是产生持续时间小于 2 个机器 周期的高电平。通常,在设计时,使复位电路在单片机上能产生 110MS 的高 电平,保证可靠的实现复位。 按键开关及上电自动复位电路:上图为按键开关及上电自动复位电路,当按 键开关 S 按下时, +5V 电源通过 S 接通电阻 R 和 R1 构成电路网咯,设计时使 电阻 R1 上的分压达到高电平的值,就可以是单片机复
20、位,因为按动按钮开关 使其闭合的时间远远大于单片机复位随需要的时间,通常把上电复位和按钮开 关复位电路综合在一起,这样就可以在每一次电源接通时系统复位,也可以满 足强制复位的要求,C 取 22uf,R 取 1000,R1 取 200 左右。 (3)74LS138 译码器的工作原理 原理:当一个选通端 G 为高电平,另外两个选通端 /G2A、/G2B 为低电 平时可以将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平输 出。其真值表如下: /G /G2A /G2B C B A /Y0 /Y1 /Y2 1 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 0 1 1 0 0 0
21、 1 0 1 1 0 当 C、B、A 输出为 000 时,74LS138 选中 LED1,LED1 管发亮,输出 001 时, LED2 管发亮,输出为 010 时,LED3 管发亮。 (4)晶振电路 利用单片机芯片上提供的反相放大器电路,在 XTAL1 和 XTAL2 引脚 之间外接振荡源构成单片机的时钟电路,有振荡源 OSC 和 电容 C1 和 C2 构成了并联谐振回路作为定时元件, 振荡源 QSC 晶体振荡器或陶瓷振荡器,频率为 1.212MHz,电容 C1、C2 为 30pF,起频率微调作用,在单片机的应用系统中,晶振的频率越高,单片机的 运行速度越快。 (5)声光报警系统 声光报警器
22、的主要源器件是由感应器,发光二极管、蜂鸣器等构成整个报警 器,当温度超过 60 是,就自动报警。 (6)DS18B20 温度检测器的原理 DS18B20 工作过程中的协议如下:初始化,ROM 操作指令,存储器操作指 令,数据处理。 多路测量,当每一片 DS18B20 在其 ROM 中都存有其唯一的 48 位系列号, 在出厂前,与写入片内 ROM,主机在进入操作程序前必须接入 1820 用读, ROM 命令将 1820 的系列号读出并登陆,在 1820 组成的测温系统中,主机在 发出跳过 ROM 命令之后,再发出系统的温度转换启动码,就可以实现所有 1820 的统一转换,在经过一秒后,就可以用很
23、少的时间逐一读取。 第三章:系统软件算法设计 由于汇编语言学的时间太短,所以用 C 语言。望老师谅解! #include #include #include #include #include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long sbit key1 = P11; /按下开始检测 sbit key2 = P13; /按下显示 sbit le = P23; sbit oe = P24; sbit beep=P16; sbit DQ=P17; /DS18B20 数据 I/O
24、 口 #define COMMAND_UNKNOW 8 /不可识别的返回类型 /= = / 基本的常用常量 /= = #define TRUE 1 /正确 #define FALSE 0 /错误 unsigned char num; uchar code dispcode= 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0xff,0x6f ; /共阴极显示代码 uchar disp_buf3=0x00,0x00,0x00; /显示数据缓冲区 uchar dp0=0,dp1=0,dp2=0; #define NOP _nop_() uchar temp_h,
25、temp_l; /*温度值变量*/ uchar flag1; /*正负标志位*/ sbit tem_in=P17; /*温度读取端口 1*/ uchar Tem_H,Tem_L; /用于存储温度转换值高 8 位和低 8 位 bit Flag=0; /正、负温度值符号标志位,0 为正, 1 为负 void delay1ms(uchar x); /延时约 1ms 程序 /*函数声明*/ void delay(int us); /延时函数 bit Init_DS18B20(void); /DS18b20 初始化函数 uchar Read_bit(void); /DS18b20 读一个字节 void
26、Write_bit(uchar val_bit); /DS18b20 写一个字节 uchar Read_byte(void); /DS18B20 读字节函数 void Write_byte(uchar com); /DS18B20 写字节函数 int ReadTemperature(); /DS18b20 读取温度 void display_temp(void); /显示函数 void adj_dat(); /显示字节调整函数 void l_delay(int n); /延时函数 void delay(unsigned int count) unsigned int i; while(coun
27、t) i=200; while(i0)i-; count-; void Delay_us(uchar n) uchar i; i=0; while(i0)i-; tem_in=1; i=4; while(i0)i-; /*= 函数功能:向 B20 写一字节 入口参数:待写数据 说 明 : =*/ void tmpwrite(unsigned char dat) unsigned int i; unsigned char j; bit testb; for(j=1;j1; if(testb) tem_in=0;i+;i+; tem_in=1; i=8;while(i0)i-; else tem_
28、in=0; i=8;while(i0)i-; tem_in=1;i+;i+; /*= 函数功能:直接读一字节程序 入口参数:无 说 明 :返回结果 =*/ uchar ReadByte(void) uchar i,k; i=8; k=0; while(i-) tem_in=1; Delay_us(1); tem_in=0; k=k1; tem_in=1; NOP; if(tem_in)k |= 0x80; Delay_us(4); return(k); void tmpchange(void) dsreset(); /*复位*/ delay(1); tmpwrite(0xcc); /跳过序列号
29、命令 tmpwrite(0x44); /转换命令 delay(1); void tmp(void) float dis; / uchar tempbuf; dsreset(); delay(1); tmpwrite(0xcc); tmpwrite(0xbe); temp_l=ReadByte(); /低位在前 temp_h=ReadByte(); /高位在后 flag1=temp_h if(flag1) temp_h=temp_h; if(temp_l=0)temp_h+; /若低位全为且温度为负,取补时就要向高位 进 temp_l=temp_l+1; dis=(temp_h*256+temp
30、_l)/16; if(int)dis60) disp_buf0=dispcode(int)dis%1000/100; /显示百位 disp_buf1=dispcode(int)dis%100/10; /显示十位 disp_buf2=dispcode(int)dis%10; /显示个位 /*温度检测*/ void tmp_test(void) float dis; dsreset(); delay(1); tmpwrite(0xcc); tmpwrite(0xbe); temp_l=ReadByte(); /低位在前 temp_h=ReadByte(); /高位在后 flag1=temp_h i
31、f(flag1) temp_h=temp_h; if(temp_l=0)temp_h+; /若低位全为且温度为负,取补时就要向高位 进 temp_l=temp_l+1; dis=(temp_h*256+temp_l)/16; if(dis60)/超出温度极限报警 beep=1; else beep=0; /*主程序*/ void main (void) dp0=dispcode0; dp1=dispcode0; dp2=dispcode0;/初始化数码管显示 0 delay1ms(2000); /延时 2S while(1) tmpchange(); delay(10); tmp_test()
32、;/检测温度并报警 if(!key1) delay1ms(10); /去抖动 tmpchange(); / 启动温度转换 delay(10);/采集温度 if(!key2) delay1ms(10); dp0=disp_buf0; dp1=disp_buf1; dp2=disp_buf2;/将采集温度赋给显示变量 /分段显示数码管数字 P2=0x00; P0 =dp0; delay1ms(1); P2=0x01; P0 =dp1; delay1ms(1); P2=0x02; P0 =dp2; delay1ms(1); /*延时函数 */ void l_delay(int n) int i,j;
33、 for(i=0;ii; /右移 i 次取低位发送 temp Write_bit(temp); delay(5); /*温度值正负判断程序 */ uint Get_Tem(uchar dath,uchar datl) uint temp=0,temp_h=0,temp_l; temp_h=(uint)dath; temp=temp_h temp_l=(uint)datl; temp_l temp=(temp8)|temp_l; /去掉符号值后合并成 16 位数据 if(dath temp=temp+1; /负数时求补 else Flag=0; return(temp); /*温度读取函数*/
34、int ReadTemperature() uint temp=0; float temp1=0; while(!(Init_DS18B20(); Write_byte(0xCC); /跳过读序号列号的操作 Write_byte(0x44); /启动温度转换 while(!(Init_DS18B20(); / Match_ROM(n); Write_byte(0xBE); /读取温度寄存器等(共可读 9 个寄 存器) 前两个就是温度 Tem_L=Read_byte(); /低位 Tem_H=Read_byte(); /高位 temp=Get_Tem(Tem_H,Tem_L); temp1=te
35、mp*0.0625; temp=temp1*10+0.5; return(temp); /*显示数据处理函数*/ void adj_dat() uint temp; temp=ReadTemperature(); /读温度 /temp=345; disp_buf0=dispcodetemp%1000/100; /显示百位 disp_buf1=dispcodetemp%100/10; /显示十位 disp_buf2=dispcodetemp%10; /显示个位 void delay1ms(uchar x) /延时约 1ms 程序 uchar Time,Time1; for(Time=0;Time
36、x;Time+) for(Time1=0;Time1120;Time1+); 心得体会 通过这次单片机课程设计,我不仅加深了对单片机理论和汇编 语言的理解,将理论很好地应用到实际当中去,而且我还学会了如 何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新 可以使自己在原有的基础上进行改进,使之功能不断完善,使之成 为自己的东西。 杨靖老师严格要求虽然给我带来的很大的压力,但是给我们的 收益也是成正比的,从开始的浮躁、不认真到最后的努力专研;我 们的态度从根本上发生了变化; 在这里深深的感谢杨老师的教导,让我们认识到自己的不足、 浮躁、没有一颗做学问的新是我们当今大学生最大的缺失,我以后 会努力的改进,端正自己的学习态度,能自己完成的任务独立完成, 不在渴求得到别人的帮助! 参考文献 【 1】 单片机原理及接口技术 清华大学出版社 【 2】 ds18b20 工 作 原 理 和 中 文 资 料 百 度 文 库 【 3】 80C51 引 脚 图 及 各 个 引 脚 的 用 处 百 度 文 库 【 4】 单片机原理及应用(MCS-51) 重庆大学出版社 【 5】 MCS-51 系列单片机应用系统设计系统配置与接口技术 北京航空航天大学出版社 【 6】 C 语言程序设计 清华大学出版社 【 7】 程序流程图 【 8】 【 9】 【10】 【 11】 硬 件 图