STC89C52单片机文件系统只能储存8K的文件,那我写几句代码就超过8K了,就不能烧录进去了,那还有什么用?

STC89C52单片机只能储存8K的文件,那我写几句代码就超过8K了,就不能烧录进去了,那还有什么用?-百谷歌基于STC89C52单片机的温度控制电路设计
&&&&本科生毕业论文(设计)题目:基于温度传感器的单片机温控电路设计系 部 学科门类 专 业 学 号 姓 名 指导教师电子信息工程学院 工 学 电子信息工程
徐 晓 龙 万 丽 娟2012 年 5 月 18 日 合肥师范学院 2012 届本科生毕&&&&业论文(设计)基于温度传感器的单片机温控电路设计 摘 要随着微处理器和大规模集成电路的发展,及其在测试控制技术方面的广泛应用,仪器 设备的智能化已成为自动化技术发展方向, 数据采集与温度检测的自动化将取代传统的方 法。 本设计采用 stc89c52 型号的单片机,数字温度传感器采用美国 dalass 公司的 1–wire 器件 ds18b20,即单总线器件 ds18b20,与单片机组成一个测温系统,当系统上 电时,温度传感器就会读出当前环境的温度,并在 led 数码显示管上显示出当前的温度, 该测温系统的测温范围为-40℃~110℃,按此要求设计硬件和软件以实现这一功能。 关键词:单片机 温度传感器 ds18b20 测量电子线路 温度i 合肥师范学院 2012 届本科生毕业论文(设计)abstractalong with the microprocessor and large scale integrated circuit, and in the test control technology is widely used, and the intelligent instrument and equipment has become automation technology development direction, data acquisition and temperature automatic testing would replace the traditional method. this design uses the stc89c52 type of single chip microcomputer, digital temperature sensor using the american dalass company 1-wire device ds18b20, namely single bus device ds18b20, and consists of a single chip microcomputer temperature measurement system, when the system is powered on, temperature sensors will read the current environment temperature, and in display tube led digital showed on the current temperature, the temperature measurement system of measuring temperature range for 40 ℃~110 ℃-according to this design requirement for hardware and software to achieve this function. keywords: single chip microcomputer temperature temperature sensor ds18b20 measurement circuitii 合肥师范学院 2012 届本科生毕业论文(设计)目录一绪论..................................................11.1 课题研究背景及意义 ........................................1 1.2 国内外研究现状 ............................................1 1.3 研究内容 ..................................................2二系统硬件设计 ..........................................32.1 总体设计方案 ..............................................3 2.1.1 设计思路 ..............................................3 2.1.2 设计方框图 ............................................3 2.2 单片机介绍 ................................................3 2.2.1 stc 单片机结构介绍 .....................................4 2.2.2 stc 单片机引脚介绍 .....................................6 2.3 ds18b20 数字温度传感器介绍 ................................8 2.3.1 功能介绍 ..............................................8 2.3.2 内部存储器介绍 ........................................9 2.4 显示模块设计 ............................................. 11 2.4.1 led 数码管结构 .......................................12 2.4.2 共阳数码管数字编码 ...................................12 2.5 按键电路的设计 ...........................................12 2.5.1 判键及其接口电路设计 .................................13 2.5.2 键盘的工作方式 .......................................13iii 合肥师范学院 2012 届本科生毕业论文(设计)2.6 报警装置电路设计 .........................................14 2.7 系统整体硬件电路 ..........................................14三系统软件设计 ......................................... 163.1 温度控制系统原理框图 .....................................16 3.1.1 读温度子程序 .........................................16 3.1.2 温度转换子程序 .......................................17 3.1.3 计算温度子程序 .......................................18 3.1.4 温度显示子程序 .......................................19四总结与展望 ........................................... 20参考文献................................................. 21 附 录................................................... 22iv 合肥师范学院 2012 届本科生毕业论文(设计)一1.1 课题研究背景及意义绪论目前温度控制系统在很多场合都得到广泛的应用, 因此在国内外发展非常迅速, 并在 智能化、环境自适应、参数自动调整等方面取得显著成果。当前在工业上温度控制系统一 般采用智能调节,国产调节器温度控制效果不是很理想,分辨率和精度都不高,但性价比 高。国外调节器虽然价格较贵,但是分辨率和精度较高。 在各行业中广泛应用的温度控 制器及仪器仪表,都是由美国、德国等国家生产出来的,性能优异。它们主要具有如下的 特点:一是在复杂的温度控制系统中能够适应于大惯性、大滞后的控制;二是在受控系统 数学模型难以建立的情况下,得到控制;三是在受控系统中,能够被控制过程很复杂且参 数时变的温度控制系统控制; 五是温度控制系统普遍具有参数自检功能, 借助计算机技术, 能控制对象和参数,并且具有特性进行自动调整的功能等特点[1]。 温度测控包括两个方面:温度测量和温度控制。近年来,在理论上温度的测量技术发 展比较完善,但目前仍然有许多问题需要去解决,比如在实际测控中,如何能实时地对温 度进行快速采样,同时确保采集来的数据进行正确的传输,并能精确控制所测的温度场。 在温度的测量技术中,有一种简单、可靠、低廉、测量精度较高的测量方法叫做接触式测 温,它在早期就发展起来,一般能将环境的真实温度测量出来。但是难以对运动的物体和 热容量小的物体进行精确测量,主要是因为检测元件热惯性的影响,响应的时间长。在腐 蚀性介质中, 超高温度环境下也不适用。 另外还有一种能够对运动的物体和热容量小的物 体进行测量的方法叫非接触式测温,它通过温度场辐射出来的能量,进行测量。响应速度 快,对测量的温度场不产生破坏。但是也存在一些缺点,仪表所显示的值一般只能代表物 体表面的温度,测温仪器结构复杂,价格昂贵等[2]。因此,在温度测控中,要根据所需对 象选择恰到好处的测控方法。 传感器技术是现代信息技术的三大基础, 属于现代信息技术前沿的尖端技术, 温度传 感器使用的数量高居各类传感器之首,被应用于各种领域中,如工业生产、高科技研究和 日常生活等。温度传感器技术的应用与研究,其发展历程大致经过了以下三个阶段:(1) 常见的分布式温度传感器;(2)模拟集成温度传感器;(3)智能温度传感器。 从 20 世纪末以来, 国际上推出的智能温度传感器精度高、 分辨力高, 采用的都是 9~ 12 位 a/d 转换器,分辨力一般可高达 0.5~0.0625℃[3]。目前新型的温度传感器正由模拟 式走向数字式、分立式走向高集成、智能化、网络化。当前被广泛应用的 ds18b20 型智 能温度传感器由美国 dallas 半导体公司研制,它能输出 12 位二进制数据,分辨力高, 达到 0.0625℃,测量温度的精度已经达到± 0.2℃。1.2 国内外研究现状在上个世纪 70 年代,国外的一些国家已经开始对温度测控技术进行研究了。最早采 用的是模拟式组合仪表,将现场采集到的信息进行显示、加工和控制。直到 80 年代末才1 合肥师范学院 2012 届本科生毕业论文(设计)出现分立式控制系统。 目前温度测控技术在一些发达国家发展非常迅猛, 由半自动化向着 完全自动化、无人化的方向发展。 在上个世纪 80 年代,我国才开始对温度测控技术进行研究,起步晚。跟那些发达国 家相比较,技术上还有着很大差距。我国的科技人员吸收发达国家的温度测控技术,仅限 于控制温度的单项环境因子,对一些复杂的环境因子控制,还难以实现。多参数综合控制 系统目前还不成熟, 单参数单回路的系统只能使用单片机来控制。 在实际生产中配套能力 差,产业化程度不高,对环境水平控制的严重滞后等问题仍然在困扰着我们,温度测控现 状要想达到工厂化的水平,还任重道远。1.3 研究内容本文设计是以单片机为核心, 实现温度实时测控和显示。 确定电路中的一些主要参数, 了解温度控制电路的结构,工作原理,对该控制电路性能进行测试。 主要内容: (1)硬件部分设计 以 stc89c52 单片机作为处理器来处理数据,ds18b20 温度传感器进行温度采集, 八段数码管作为显示模块,利用键盘完成对温度测控。 (2)软件部分设计 软件部分的设计采用模块化思想,主要有五个大的模块:主控制程序,温度显示子程 序,读温度子程序,温度转换子程序,计算温度子程序。2 合肥师范学院 2012 届本科生毕业论文(设计)二2.1 总体设计方案 2.1.1 设计思路系统硬件设计(1)本设计是用来测控温度的,可以利用热敏电阻的感温效应,将被测温度变化的模 拟信号,电压或电流的采集过来,首先进行放大和滤波后,再通过 a/d 转换,将得到的 数字量送往单片机中去处理, 用数码管将被测得的温度值显示出来。 但是这种电路的设计 需要用到放大滤波电路,a/d 转换电路,感温电路等一系列模拟电路,设计起来较麻烦。 (2)本设计采用单片机做处理器,可以考虑使用温度传感器,采用由达拉斯公司研制 的 ds18b20 型温度传感器,此传感器可以将被测的温度直接读取出来,并进行转换,这 样就很容易满足设计要求。 从上面的两种方案,可以很容易看出来,虽然方案(2)软件部分设计复杂点,但是电 路比较简单且精度高,故采用方案(2)。单 片 机 设置模块 最 小 系 统显示模块采集模块图 2-1 总体方框图2.1.2 设计方框图据设计的需求,分析单片机的工作原理,可以大体得出来温度控制电路设计的总体方 框图如图 2-1 所示,主处理器采用 stc89c52 单片机,温度采集部分采用 ds18b20 型温 度传感器,用 4 位 led 显示数码管作为显示部分,用来将温度显示出来。系统硬件电路部 分由四大模块组成:温度采集模块、温度显示模块、设置模块和单片机最小系统模块。2.2 单片机介绍单片机是计算机制造技术发展的产物,其应用于很多场合,发展迅猛。1971 年 intel 公司研制出来 4004 的 4 位微处理器不久,在 1974 年 12 月 fairchild(仙童)公司立即研3 合肥师范学院 2012 届本科生毕业论文(设计)制出了 8 位的单片机,即 f8,单片机的门户就这样被打开了。 直到上世纪 70 年代末,单片机应用技术才被引入中国,开始被我国的科学研究人员 探索,到 80 年代,单片机终于广泛应用于各种行业。在 1978 年 zilog 公司推出了 z8 单 片机,不久我国工业界的主流就是这种单片机。直到 90 年代初,我国在某些领域使用的 单片机开始向 intel 生产的 mcs-51 系列单片机靠拢,如工业领域。 在短短至今二十几年的时间里,单片机经过了 4 位机、8 位机、16 位机、32 位机几 个大的发展阶段, 虽然没有像微处理器那样不断突破, 但是目前 8 位机仍然是工业控制领 域的主流机型。 近几年单片机的内部结构变的是愈加完美了, 在原有的集成结构上不断创 新, 越来越多的外围电路和外设接口被集成于单片机内部结构中。 硬件电路的设计变得更 加简单了,微控制器(microcontroller)体系结构的设计已逐渐被建立起来,其发展过程大 致分为下面的几个阶段: 第一阶段:单片机的探索阶段 第二阶段:单片机的完善阶段 第三阶段:单片机的高性能阶段 第四阶段:单片机的全面发展阶段 单片机就是将微处理器、存储器和各种输入输出接口,放在一块芯片上集成得来。自 问世以来,广泛应用于自动检测与控制、智能仪表、机电一体化、工业控制等各个方面。 单片机本身就是一种计算机系统, 如果在外围加上一些接口电路, 就可以构成某些特定的 应用系统。单片机的几种主要应用系统分为:(1)最小系统,外围电路只配有晶振,复位 电路,电源,只能运用于简单的一些控制。(2)最小功耗系统,在系统正常运行的情况下, 使得系统消耗的功耗达到最小。(3)典型应用系统,为了使各种系统能够正常运行,所设 计的必要硬件结构系统[4][5]。以单片机为核心处理器件构成的应用系统有着许多优点:(1) 功能齐全,可靠性好,抗干扰的能力较强。(2)使用起来简单方便,可以被普及使用。(3) 发展迅猛,有着广阔的前景。(4)比较容易就能嵌入到各种应用系统中。2.2.1 stc 单片机结构介绍stc89c52 单片机是一种 8 位微控制器,特点是低功耗、有高性能 cmos,同时内置 8k 字节可编程 flash 存储器。 芯片内拥有十分灵巧的 8 位微处理器和在系统可编程 flash, 使得 stc89c52 单片机提供为许多较灵活、 十分有效的解决方案, 主要在工农业控制系统 中。stc89c52 的标准功能如下:8k 字节 flash,256 字节 ram,32 位 i/o 接口线,看门 狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量的中断结构,全双工串 行口。另外,stc89c52 可降至 0hz 静态逻辑操作,支持 2 种工作软件,用来选择节电模 式。当工作在空闲模式下,微处理器就会停止工作,允许随机存储器、定时器/计数器、 串口、 中断继续工作。 在掉电的时候, 随机存储器中的内容会被保存起来, 振荡器被冻结, 单片机停止一切内外部工作,直到下一个中断或硬件复位为止。最高运作频率 35mhz, 6t/12t 可选。4 合肥师范学院 2012 届本科生毕业论文(设计)1.引脚结构,见图 2-2。图 2-2 单片机引脚结构2.内部结构,见图 2-3。xtal2 时钟电路 xtal1 rom ∕ eprom ∕ flash 4kb ram 128b sfr 21 个 定时器∕计数器vcc cpu总线控制中断系统 5 个中断源 2 个优先级串行口 全双工 1 个4 个并行口 vssrst eaale psen 图 2-3 内部结构p0 p1 p2 p35 合肥师范学院 2012 届本科生毕业论文(设计)2.2.2 stc 单片机引脚介绍rst:复位输入,在高电平状态时有效。当单片机有脉冲信号时,在这个引脚加上持 续时间超过2个机器周期的高电平状态时,就可以完成复位操作。一般在正常运行状态时, 此引脚应该是低电平状态。 psen:片外程序存储器的读选通信号。当单片机在读片外程序存储器时,这个引脚的 读片外部程序存储器选通信号应该是负跳沿脉冲。此引脚接外部程序存储的oe端时,访问 外部ram,psen信号是处在无效状态。 ea/vpp:为访问外部程序存储器允许控制端。当ea的引脚接入低电平时,对程序存 储器的操作,只能是读取外部程序存储器中的数据,所寻地址的范围是为0000h到ffffh。 如果需要执行内部程序指令,ea应该接入高电平。 p0口:8位,漏极开路的双向i/o口。当89c52扩展外部存储器及i/o接口芯片时,p0口 作为地址总线及数据总线的分时复用端口。 p0口也可以作为通用的i/o口使用, 但需加上拉 电阻,这时为准双向口。当p0口用来做普通的i/o接口输入时,应该先向该端口的输出锁存 器写1。p0口可以用来驱动8个ls型的ttl负载。 p1口:8位,准双向的输入输出接口,它的内部中有上拉电阻。p1口是专门为用户使 用的准双向i/o口,当用来做普通的i/o口输入时,应该首先向端口的输出锁存器写入1。p1 口可以用来驱动4个ls型的ttl负载。此外,p1.0和p1.2分别作定时器/计数器2的外部计数 输入(p1.0/t2)和时器/计数器2的触发输入(p1.1/t2ex),具体如下表2-1所示。当单片机进 行flash固化编程时,p1口同时接收低8位地址。 p2口:8位,准双向的输入输出接口,它的内部中有上拉电阻。当89c52扩展外部存储 器及i/o接口时,p2口可输出高8位地址。p2口也可作为普通的i/o口使用,当用来做普通的 i/o口输入时,应该首先向端口的输出锁存器写入1。p2口也可以用来驱动4个ls型的ttl 负载。表2-1 p1口功能 引脚号 p1.0 p1.1 p1.5 p1.6 p1.7 第二功能 t2 t2ex mosi miso sck 说明 定时器/计速器 t2 的外部计数输入,时钟输出 定时器/计速器 t2 的捕捉/重载触发信号和方向控制 在系统编程用 在系统编程用 在系统编程用p3口:8位,准双向的输入输出接口,它的内部中也有上拉电阻。p3口可以用来做为 常用的i/o口,当作为通用的i/o口输入时,应该首先向端口的输出锁存器写入1。p3口也可 以用来驱动4个ls型的ttl负载。p3口还能向用户提供一些第二功能。p3口也可以用来作6 合肥师范学院 2012 届本科生毕业论文(设计)为stc89c52的一些特殊功能的接口,如下表2-2所示。当单片机进行flash固化编程时,p3 口同时也接收一些外部控制信号[4]。表2-2 p3口功能 引脚号 p3.0 p3.1 p3.2 p3.3 p3.4 p3.5 p3.6 p3.7 第二功能 rxd txd int0 int1 t0 t1 wr rd 说明 串行数据输入口 串行数据输出口 外部中断 0 输入 外部中断 1 输入 定时器 0 外部计数输入 定时器 1 外部计数输入 外部数据存储器写选通输出 外部数据存储器读选通输出ale/prog:在芯片访问外部存储器时,有时候需要对地址或者数据进行所存操作, 该引脚的功能正是与锁存相对应,在软件编程方面也可以利用该功能进行便捷的操作。当 单片机进行flash固化编程时,此引脚对于输入编程脉冲有作用。 时钟引脚 xtal1:反向振荡放大器的输入。 xtal2:来自反向振荡器的输出。 如图2-4所示,stc89c52单片机有一个反相放大器,用来构成内部振荡器,一般会选 石英晶体振荡器作为外接振荡源。此电路在加电过后会在xtal2引脚上产生一个正弦波时 钟信号,其振荡频率主要由外接的石英晶振的频率决定。电路中的两个电容c1、c2的作用 有两个:一是用来帮助振荡器起振,二是用来微调晶体振荡器的频率。电容c1、c2的典型 值为30pf。图2-4 自激振荡器原理图7 合肥师范学院 2012 届本科生毕业论文(设计)定时器0和定时器1 在stc89c52单片机中,定时器0和定时器1的定时方式与89c51一样。 定时器2:是一个自动恢复初始值的18位定时/计数器,既能做定时器,又可以做计数 器。定时器2有2个8位寄存器:th2和tl2。tl2为常数缓冲器,当tl2计数发生溢出时, 在溢出标志位tf2置“1”的同时,自动将th2的初始值送到tl2中,使得tl2得以从初始值 处重新计数。 中断 stc89c52有5个中断源:两个外部中断(int0和int1),两个定时中断和一个串行口中 断。如果外部中断请求0时,请求信号由引脚int0输入,ie0为它的中断请求标志位。如果 外部中断请求1,请求信号引脚由int1输入,ie1为它的中断请求标志位。定时器∕计数器 t0计数溢出中断请求,中断请求标志位为tf0。定时器∕计数器t1计数溢出中断请求,中 断请求标志位为tf1。串行口中断请求是用来发送中断或接受中断,标志位为ti或ri。上 述的中断请求标志位分别由特殊功能寄存器tcon和scon相应的位锁存,如下表2-3为中 断允许控制寄存器功能[5]。 vcc:接+5v电源。 gnd:接地。表2-3 中断允许控制寄存器 符号 ea 位地址 ie.7 功能 中断总允许控制位。ea=0,中断总禁止:ea=1,各中断有各自的控 制位设定 et2 es et1 ex1 et0 ex0 ie.6 ie.5 ie.4 ie.3 ie.2 ie.1 ie.0 预留 定时器 2 中断允许控制位 串行口中断允许控制位 定时器 1 中断允许控制位 外部中断 1 允许控制位 定时器 0 中断允许控制位 外部中断 0 允许控制位2.3 ds18b20 数字温度传感器介绍 2.3.1 功能介绍ds18b20 这款型号的温度传感器是由 dallas 半导体公司研制出来的,它是一种在 旧的结构基础上改进而来的智能温度传感器, 传统的温度传感器是由热敏电阻作为主要元 件的器件, 改进后的传感器能够直接读出被测物体的温度, 并且在实际的的操作中可通过8 合肥师范学院 2012 届本科生毕业论文(设计)软件编程来实现其他相对复杂的功能。ds18b20 提供 9 位温度读数,用来显示器件的温 度数值[6]。 特性: ●与单片机相互通讯时只要一根接口线就行了,实现双工通讯功能 ●用来测量温度的范围是-55℃~+125℃,分辨率为0.5℃ ●几个ds18b20可以挂在一条的总线上,但是数量不能超过8个 ●工作电源3~5v/dc ●在测量温度时,不要任何多余的元件,直接测出温度 ●可以一次读出9位温度数字值 ●把温度转化成为数字量,只需要1秒左右的时间 ●用户可以自己设置温度上下限的告警值2.3.2 内部存储器介绍图2-5的方框图表示ds18b20的内部结构:1)64位激光lasered rom;2)温度灵敏元件; 3)非易失性温度告警触发器th和tl。存储器与控制逻辑 64 位 rom 和 单 线 接 口温度传感器 高 速 缓 存 高温触发器 th 低温触发器 tl 配置寄存器 8 位 crc 发生器cvdd 图 2-5 ds18b20 内部结构如果一根总线上有多个ds18b20器件,那么可以只选出一个ds18b20指定,还可以给 连接在总线上的处理器指出存在多少个器件及其类型。在接单个总线的时候,rom操作在 未开始之前,还不可以使用器件内部的操作系统,处理器首先必须提供五种rom操作命令 之一: 1)read rom(读rom), 2)match rom(符合rom), 3)search rom(搜索rom), 4)skip rom(跳过rom),或5)alarm search(告警搜索)。上述的命令都是对每一个温度传感器 器件进行操作,操作的部分是64位激光rom部分。 ds18b20中的温度传感部分是用来测量被测物体的温度,下面用一个测得的12位温度9 合肥师范学院 2012 届本科生毕业论文(设计)值转化为例:用2个字节16位有符号的二进制补码形式来提供数值,以0.0625℃/lsb的形式 表达出来,s是用来表示符号位,如下表2-4。表2-4 ds18b2012位温度数据 bit7 ls byte 23 bit15 ms byte s bit6 22 bit14 s bit5 21 bit13 s bit4 20 bit12 s bit3 2-1 bit11 s bit2 2-2 bit10 26 bit1 2-3 bit9 25 bit0 2-4 bit8 24表2-4是将12位温度值经过转换后得到的数据,是12位,将转换后得到的数据存储在 ds18b20的两个数据存储器中。字节的前面5位是符号位,用来判断测到的温度的正负。如 果测到被测物体的温度值大于0,那么高字节前面的5位都是0,只要将测来的数值用来与 0.0625相乘,就能得到实际的温度;如果测到被测物体的温度值小于0,那么高字节前面的 5位都是1,将测到的数值来取反加1,再与0.0625相乘,就可以能够得到实际的温度。如下 表2-5为ds18b20的温度/数据转换关系。表 2-5 ds18b20 的温度/数据关系 temperature digital output (binary) +125℃ +85℃ +25.0625℃ +10.125℃ +0.5℃ +0℃ -0.5℃ -10.125℃ -25.0625℃ -55℃ 01 01 00 01 10 00 00 00 11 11 11 11 01 0000 digital output (hex) 07d0h h 00a2h
h fff8h ff5eh fe6fh fc90h温度传感部分采集转化后得来的数据, 一般是放到 ds18b20 的暂存存储器中。 ds18b20 的暂存存储器有 8 个字节, 字节的区域是连续的。 前面两个字节是用来保存测来的温度信 息,第一个字节放入的是 ds18b20 测来的温度值的低八位内容,第二个字节放入的是 ds18b20 测得的温度值的高八位部分。 第三个和第四个字节是设置温度告警的上限与下限 的易失性保存, 第五个字节是结构寄存器的易失性保存, 当这三个字节在上电复位状态时, 字节中的内容都会被刷新。第六、七、八个字节用于内部温度数值的计算,第九字节是用 来检查冗余字节,如下表 2-6 为暂存寄存器的分布。10 合肥师范学院 2012 届本科生毕业论文(设计) 表 2-6 ds18b20 暂存寄存器分布 寄存器内容 温度最低数字位 温度最低数字位 高温限值 低温限值 保留 保留 计数剩余值 每度计数值 crc 校验 字节地址 0 1 2 3 4 5 6 7 8rom操作命令 如果处理器检测到总线挂有温度传感器,便发出传感器rom中的的五种操作命令之 一,所有的操作命令都是一个字节。 read rom(读rom) [33h] 此命令是允许连接总线上的处理器读取ds18b20的8位产品系列编号, 唯一的48位产品 序列号以及8位的冗余校验码。 match rom(符合rom) [55h] 在与rom中的命令匹配后,继续以64位的rom数据序列,允许连接在总线上的处理 器对多个ds18b20中某个特定的传感器,进行读写。 skip rom(跳过rom) [cch] 此命令是用来寻找与64位rom中的序列号相匹配的ds18b20地址, 这样才能响应后面 的操作命令。所有的与64位rom序列号不匹配的外挂传感器,都将等待复位脉冲的到来。 earch rom(搜索rom) 挂器件的64位序列号[7]。 [f0h] 此命令允许总线上的处理器使用一种消去elimination处理命令,来识别总线上所有外2.4 显示模块设计led 显示数码管一般正向压降的都是 1.5~2v,额定电流为 10ma,通过最大的电流 为 40ma[8]。根据各种不同管接线的方式,可将数码管分成共阴极型和共阳极型。根据要 求,本设计采用 4 位共阳 led 数码管,从 p0 口输出段码,列扫描用 p0 口来实现。下图 2-6 中数码管采用的是 8 位七段共阳数码管,其中 a~dp 段分别接到单片机的 p0 口,由 单片机输出的 p0 口数据来决定段码值,位选码 1、2、3、4 分别接到单片机的 p2.4、p2.5、 p2.6、p2.7,由单片机来决定当前该显示的是哪一位。在图中还有 8 个电阻,连接在 p0 口上,用作 p0 口的上拉电阻,保证 p0 口没有数据输出时候处于高电平状态。11 合肥师范学院 2012 届本科生毕业论文(设计)2.4.1 led 数码管结构图 2-6 led 共阳数码管结构2.4.2 共阳数码管数字编码共阳数码管数字编码见下表 2-7。表 2-7 共阳数码管数字编码 显示 数字 0 1 2 3 4 5 6 7 8 9 c0h f9h a4h b0h 99h 92h 82h f8h 80h 90h 共阳极字段码2.5 按键电路的设计键盘实际是就是很多案件的一种组合, 按键的按下与否形成一个高低电平, 主控芯片12 合肥师范学院 2012 届本科生毕业论文(设计)cpu 通过高低电平来识别所需信号,进而使程序进行下一步的操作。键盘操作的软硬件 的设计有以下几个方面的问题:对于此设计来说我们要准确的显示我们所要对应的信息, 每按一次按键要显示所要显示的信息。 这按键是主要用来控制温度而设计的。 这样比键盘 操作方便,也比较实惠。按键电路采用中断模式。当有按键按下时,系统产生中断,cpu 响应中断后,开始计数,即查询键号,通过软件来实现该键号所对应键的功能键盘的大体 设置为:k1 为温度控制的上下限,k2,k3 用来控制温度的加减。如果 k1 没按下,则温 度在上限控制状态,如果 k1 按下,则温度在下限控制状态。其电路图如下图 2-7 所示。图 2-7 按键电路2.5.1 判键及其接口电路设计键盘之所以能够对系统进行操作是因为键盘的按下会产生一个电平上的变化, 电平的 变化进而影响整个系统的操作。 如果系统规定高电平表示断开, 反之低电平则表示闭合, 通过芯片对电平的高低状态监测以及软件编写的配合可确认键按下与否。 由于按键是认为操作, 对按键的按下与否把我并不是非常准确, 有时按键信号的传递 也会受到其他操作的影响使得信号之间产生串扰,所以为了确保按键是按下与否的识别 情况,我要考虑进行按键防抖的操作,对于防抖操作有两种方式,一种是硬件的防抖, 一种是软件的防抖,硬件消除抖动可采取双稳态电路或滤波消抖电路;软件消抖是是指 当程序在运行中检测到按键是低电平的时候并不急于向下继续运行,而是在软件延时一 定程序后对该引脚的电平再次进行检测,看是否还处在低电平状态,若还是,则判断为 有按键按下。软件消抖的方法效果可以接受,同时也节省了硬件消抖的开销。此设计中 由于按键较少,我选择的是软件消抖。当按键较多时,按键之间容易产生串扰,采用硬 件消抖法会更好一点。 按键是要连接到硬件电路上的,其接口设计也有两种方法,独立式按键和矩阵式键 盘。独立式按键顾名思义就是每个按键式相互独立,每个按键都通过一根线与主控芯片 或者硬件电路中的相对应引脚进行连接。这种方法在操作上更加简便,不需要考虑太多13 合肥师范学院 2012 届本科生毕业论文(设计)的电路设计因素,对于简单的电路设计适用,任何事物有利有弊,弊端就是该方案对 i/o 资源比较浪费。对于大的系统来说,往往会导致引脚的不够用。矩阵键盘就是通过行线 与列线的交叉点来安排按键的位置,这种方法适用于按键数量较多的电路。通过对行线 与列线的分布扫描来判断是哪一个按键按下,根据扫描的结果以及之前准备的组合表来 判断具体按下的按键[8]。2.5.2 键盘的工作方式键盘的工作方式主要有三种:编程扫描、定时扫描和中断扫描。当 cpu 在忙于各种 各样工作时,如何怎样去处理键盘的输入,这主要取决于键盘的工作方式。键盘扫描只 是 cpu 的各种工作任务的一种而已。 编程扫描时,cpu 会去反复扫描键盘,当用户有命令或者数据输入时,响应键盘的 输入请求。这种扫描方式一般当单片机不工作时,才调用子程序,直到 cpu 返回重新扫 描键盘为止。定时扫描工作方式通常是利用单片机内的定时器产生 10ms 定时中断,单 片机响应定时器溢出中断后,对键盘反复进行扫描,如果发现有按键按下时,并且能够 识别出这个按下的键,就会执行与之相对应处理程序[9]。中断扫描在没有按键按下时, 如果有键按下时就会产生中断,由中断程序识别并执行。2.6 报警装置电路设计本设计中的报警装置电路用到了发光二级管、三极管、100 欧姆的电阻。将发光二级 管的一端接地, 另一端接三极管的发射极, 三极管的基极通过 100 欧姆的电阻接在三极管 的 p3.7 引脚,三极管的集电极接+5v 的电源。其电路图如图 2-8 所示。图 2-8 报警装置电路图2.7 系统整体硬件电路系统整体硬件电路包括,传感器数据采集电路,温度显示电路,单片机主控电路等, 通过 protel99se 可画出如图 2-9 所示的电路图[9][10][11]14 合肥师范学院 2012 届本科生毕业论文(设计)15图 2-9 温度控制电路原理 合肥师范学院 2012 届本科生毕业论文(设计)三3.1 温度控制系统原理框图系统软件设计主控制程序的主要是用来实时控制当前所要测控的环境温度,并读出由 ds18b20 测 量的经过处理的当前环境的温度值,同时检查温度是否在限度之内,否则报警,同时调整 温度值。其主控制程序流程图如 3-1 所示。发温度转换命令 开始stc89c52 初始化 ds18b20 初始化发 ds18b20 复位命令发跳过读序列号命令温度是否到 达设定限度 y 红灯亮 n y 温度在显 示范围内 温度显示读取操作,crc 校验 y n 9 字节完 y crc 校验正确n移入温度暂存器 n 结束 结束图3-1 主程序流程图图3-2 读温度流程图3.1.1 读温度子程序读温度子程序的功能主要是用来将随机存储器中的 9 个字节读出,在读出字节时侯, 需要进行冗余码校验。在校验到有错误的时侯,所测得的温度数据就会不进行改写。其读 温度子程序流程图如 3-2 所示。16 合肥师范学院 2012 届本科生毕业论文(设计)3.1.2 温度转换子程序温度转换命令子程序的功能主要是用来发送温度开始转换命令,让温度转换自动进 行,其温度转换命令子程序流程图如 3-3 所示。发 ds18b20 复位命令发跳过读序列号命令发温度转换开始命令结束 图 3-3 温度转换流程图17 合肥师范学院 2012 届本科生毕业论文(设计)3.1.3 计算温度子程序计算温度子程序的功能主要将随机存储器中的温度数值读取出来, 将取得的温度数值 的每一位经过计算分别取出来,放入指定的字节中,并进行温度值数正负的判定。计算温 度子程序流程图如 3-4 所示。开始n 温度零下 y 温度值取补码置“—”标志 置“+”标志取出小数位的温度值取出整数位的温度值结束图 3-4 计算温度流程图图 3-4计算温度流程图18 合肥师范学院 2012 届本科生毕业论文(设计)3.1.4 温度显示子程序温度显示子程序的功能主要是对显示数据寄存器中的数据反复进行刷新操作。 如果最 高位显示是 0 时的时候, 就将符号显示位立即移入下一位字节中。 温度显示子程序流程图 如 3-5 所示。温度数据移入显示寄存器n 十位数 0 y n 百位数 0 y 十位数显示符号百 位数不显示 百位数显示数据 (不显示符号)结束图 3-5 温度显示数据刷新流程图19 合肥师范学院 2012 届本科生毕业论文(设计)四总结与展望(1)本次基于单片机温控电路的温度传感器的设计经过了整体分析、模块化分析、整 体与模块的仿真分析这样三个步骤,实现了温度的显示以及报警显示功能。 (2)在写温度传感器的驱动时一定要处理好时序问题。 (3)本次设计可以说达到了预期的要求,但尚有需要改进的地方。随着温度采集现场 的复杂程度加大,如果依然用一个传感器来采集温度,必然反映不了真实的现场情况,这 时一个很好的解决办法就是在总线上挂多个传感器, 实行多路采集并且还可以加上时钟控 制电路,实现实时温度控制。 (4)通过本次论文设计,让我进一步了解了使用单片机控制温度的工作原理和作用, 也更深一层地懂得了程序模块化设计的重要性, 同时对单片机学习板的操作有了进一步的 了解,熟悉掌握了 keil 的文本编程设计方法和 protues 的仿真。 目前,国内外温度控制系统及仪表正朝着高精度、智能化、小型化等方面快速发展。 现如今计算机的高速数据处理能力,和它丰富的利用资源,以及强大的逻辑功能,能够根 据自己设计的实际需求进行灵活的资源采集分配, 适当的增加或者减少其控制信号, 输出 的路数, 这样就能够合理的设置温度控制的范围与路数, 给以后的实际应用提供了可靠的、 有力的控制系统解决方案。20 合肥师范学院 2012 届本科生毕业论文(设计)参考文献[1] 刘娟,梁卫文,程莉等.单片机 c 语言与 protues 仿真技能实训.北京:中国电力出版社,2010, 119-176. [2] 李平,杜涛,罗和平等.单片机应用开发与实践.北京:机械工程出版社,8. [3] 郑阿奇,王绮红,张春良等.protel 实用教程.北京:电子工业出版社,. [4] 常敏, 王涵, 范红波等. 单片机应用程序开发与实践. 北京: 51 电子工业出版社,2009, 235-252. [5] 张培仁,孙占辉,张欣等.基于 c 语言编程 mcs-51 单片机原理与应用.北京:清华大学出版社, 7,296-299. [6] 刘春恰.数字温度传感器 ds18b20 测温的应用.电器时代,6-117. [7] morrison d.single component isolates data and power[j].power electronics technology, ):54-54. [8] takahashi k,etc. full color leddisplay panel fabricated on 8 silicon microreflector[j].ieee (cat. no. 97ch3:7-8. [9] 赵福按.电子电路设计与实践[m].山东:山东科学出版社,8. [10] 陈金平.电子系统设计[m].北京:国防工业出版社,. [11] 康华光.电子技术基础(数字部分) .北京:高等教育出版社,0.21 合肥师范学院 2012 届本科生毕业论文(设计)附仿真结果录设置温度上限为 38 度,温度下限为 6 度。 1.如下仿真图 1 所示,此时温度为 4 度,低于下限温度,报警灯亮,实现报警。仿真图 1 下限报警22 合肥师范学院 2012 届本科生毕业论文(设计)2.如下仿真图 2 所示。此时温度为 40 度,超过上限温度,报警灯亮,实现报警。仿真图 2 上下报警23 合肥师范学院 2012 届本科生毕业论文(设计)3.如下仿真图 3 所示。此时温度为 29 度,在所设范围内,报警灯没亮,说明温度正 常。仿真图 3 正常工作24 合肥师范学院 2012 届本科生毕业论文(设计)温度控制系统c语言程序#include &reg51.h& #define uint unsigned int #define uchar unsigned char sbit p34=p2^4; sbit p35=p2^5; sbit p36=p2^6; sbit dp=p0^7; sbit p37=p2^7; sbit dq=p2^2; //定义 ds18b20 总线 i/o //定义选择报调整警温度上限和下限(1 为上限,0 为下限) //定义闪烁 //温度值全局变量 //外部中断状态标志 //上限报警温度,默认值为 38 //下限报警温度,默认值为 5 sbit set=p3^1; sbit ling=p2^0; bit sign=0; signed char xiaxian=5; /*****延时子程序*****/ void delay(uint i) { while( i-- ); } /*****初始化 ds18b20*****/ void init_ds18b20(void) { unsigned char x=0; dq=1; delay(8); dq=0; delay(80); dq=1; delay(14); x= delay(20); }25signed char shangxian=38;ucharcode leddata[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};//稍做延时 //单片机将 dq 拉低 //精确延时,大于 480us //拉高总线 //稍做延时后,如果 x=0 则初始化成功,x=1 则初始化失败 合肥师范学院 2012 届本科生毕业论文(设计)/*****读一个字节*****/ unsigned char readonechar(void) { unsigned char i=0; unsigned char dat=0; for (i=8;i&0;i--) { dq=0; dat&&=1; dq=1; if(dq) dat|=0x80; delay(4); } return(dat); } /*****写一个字节*****/ void { unsigned char i=0; for (i=8; i&0; i--) { dq=0; dq=dat&0x01; delay(5); dq=1; dat&&=1; } } void tmpchange(void) { init_ds18b20(); writeonechar(0xcc); writeonechar(0x44); } /*****读取温度*****/26// 给脉冲信号 // 给脉冲信号writeonechar(unsigned char dat)//发送温度转换命令//跳过读序号列号的操作 //启动温度转换 合肥师范学院 2012 届本科生毕业论文(设计)unsigned int readtemperature(void) { unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; tmpchange(); init_ds18b20(); writeonechar(0xcc); writeonechar(0xbe); a=readonechar(); b=readonechar(); t=b; t&&=8; t=t|a; tt=t*0.0625; t= tt*100+0.5; return(t); } /*****显示开机初始化等待画面*****/ disp_init() { p0 = 0x80; p34=1;p35=0;p36=0;p37=0; delay(200); p0 = 0x80; p34=0;p35=1;p36=0;p37=0; delay(200); p0 = 0x80; p34=0;p35=0;p36=1;p37=0; delay(200); p0 = 0x80; p34=0;p35=0;p36=0;p37=1; delay(200); p0 = 0x80; //显示//放大 100 倍输出并四舍五入 //跳过读序号列号的操作 //读取温度寄存器 //读低 8 位 //读高 8 位27 合肥师范学院 2012 届本科生毕业论文(设计)} /*****显示温度子程序*****/ disp_temperature() { uint a,b,c,d,e; e=readtemperature(); a=e/1000; b=e/100-a*10; d=e%10; c=(e%100)/10; m=e/100; if(m&shangxian || m&xiaxian) ling=1; else ling=0; p34=0;p35=0;p36=0;p37=0; p0 =leddata[d]; p34=1;p35=0;p36=0;p37=0; delay(300); p34=0;p35=0;p36=0;p37=0; p0 =leddata[c]; p34=0;p35=1;p36=0;p37=0; delay(300); p34=0;p35=0;p36=0;p37=0; p0 =leddata[b]; dp=0; p34=0;p35=0;p36=1;p37=0; delay(300); p34=0;p35=0;p36=0;p37=0; p0 =leddata[a]; p34=0;p35=0;p36=0;p37=1; delay(300); p34=0;p35=0;p36=0;p37=0; } disptiaozheng() {28//显示温度//获取温度值 //计算得到十位数字 //计算得到个位数字 //计算得到小数点后两位 //计算得到小数点后一位 //温度不在范围内报警//显示小数点后两位//显示小数点后一位//显示个位//显示十位//关闭显示 合肥师范学院 2012 届本科生毕业论文(设计)uchar f,g,j,k; f=shangxian/10; g=shangxian%10; j=xiaxian/10; k=xiaxian%10; p34=0;p35=0;p36=0;p37=0; p0 =0xc0; p34=1;p35=0;p36=0;p37=0; delay(200); p34=0;p35=0;p36=0;p37=0; p0 =0xc0; p34=0;p35=1;p36=0;p37=0; delay(200); p34=0;p35=0;p36=0;p37=0; if(set==1) { p0 =leddata[g]; dp=0; } else { p0 =leddata[k]; dp=0; } p34=0;p35=0;p36=1;p37=0; delay(200); p34=0;p35=0;p36=0;p37=0; if(set==1) p0 =leddata[f]; else { if(f==0) p0=0x00; else p0 =leddata[j]; } p34=0;p35=0;p36=0;p37=1; delay(200); p34=0;p35=0;p36=0;p37=0; //关闭显示29//显示 0//显示 0//显示上限温度个位//显示上限温度十位//不显示下限温度十位 //显示下限温度十位 合肥师范学院 2012 届本科生毕业论文(设计)delay(20); } /*****外部中断 0 服务程序*****/ void int0(void) interrupt 0 { ex0=0; sign=1; if(set==1) shangxian++; else xiaxian++; delay(500); ex0=1; } /*****外部中断 1 服务程序*****/ void int1(void) interrupt 2 { ex1=0; sign=1; if(set==1) shangxian--; else xiaxian--; delay(500); ex1=1; } /*****主函数*****/ void main(void) { it0=1; it1=1; ex0=1; ex1=1; ea=1; readtemperature(); ling=0; for(z=0;z&100;z++) {30//关外部中断 0//关外部中断 0 合肥师范学院 2012 届本科生毕业论文(设计)disp_init(); } while(1) { disp_temperature(); if(sign==1) { for(z=0;z&300;z++) disptiaozheng(); sign=0; } } }31 &&&&
15:21:16 15:12:48 10:52:09 08:06:39 05:08:26 04:22:40 04:05:28 03:47:51 03:47:44 03:26:37}

我要回帖

更多关于 单片机头文件怎么写 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信