搜档网
当前位置:搜档网 › 基于51单片机的DS18B20温度传感器的应用

基于51单片机的DS18B20温度传感器的应用

基于51单片机的DS18B20温度传感器的应用
基于51单片机的DS18B20温度传感器的应用

桂林电子科技大学毕业设计(论文)报告用纸 1 摘要

温度的测量和控制对人类日常生活、工业生产、气象预报、物资仓储等都起着极其重要的作用。在许多场合,及时准确获得目标的温度是十分重要的,近年来,温度测控领域发展迅速,并且随着数字技术的发展,温度的测控芯片也相应的登上历史的舞台,能够在工业、农业等各领域中广泛使用。温控系统通过传感器检测温度将温度数据输入到处理器处理,可以在数码管或LCD等显示出来。然后由控制器可以控制加热或者制冷,从而达到控温的目的。

本毕业设计就是利用STC89C52单片机和DS18B20温度传感器对目标温度进行检测,使用了单位数码管对检测到温度的显示,通过串口和上位机进行通信,利用VB软件显示温度数据,从而对各空间温度进行远程实时监控,使用LED灯闪烁进行模拟加热和制冷。本文对各部分的硬件原理图进行了分析,还对各功能程序进行概述。通过51单片机控制DS18B20检测温度,具有硬件电路简单,编程容易,测温准确,稳定等优点。而且可以多点检测(本毕设只是单点测温),几个传感器连接也很简单。

关键词:单片机;温控;传感器

Abstract

Temperature measurement and control of human daily life, industrial production, weather forecast, material storage and so on all play a very important role. On many occasions, timely and accurate to obtain the temperature of the target is very important, in recent years, the temperature measurement and control field is developing rapidly, and with the development of digital technology, the corresponding temperature measurement and control chip mounted on the stage of history, can be widely used in industry, agriculture and so on various areas. Temperature control system through the temperature sensor to detect temperature data input to processing, can be in the digital tube or LED display, etc. And then by the controller to control the heating or cooling, so as to achieve the purpose of temperature control.

This graduation design is the use of STC89C52 MCU and DS18B20 temperature sensor to test the room temperature, for testing temperature using digital tube display, through a serial port and PC communication, using VB software display temperature data, thus to remote real-time monitoring of the room temperature, use LED lights to simulate the heating and cooling. By 51 single chip microcomputer control temperature DS18B20 detection, it has a simple hardware circuit, programming easily, temperature measurement accuracy, stability, etc. And can be more testing (this project is only a single point temperature measurement), several sensor connection is also very simple.

Keywords: MCU;temperature control;sensor

目录

引言 (1)

1 绪论 (2)

1.1 单片微机的发展 (2)

1.2 温度检测的意义及发展形势 (2)

1.3温控系统设计的核心 (2)

2 单片机的简述 (3)

2.1单片机的特点及引脚介绍 (3)

2.2单片机的电平特性 (5)

2.3C51复位电路 (6)

2.4时钟电路 (6)

3 温控系统的硬件设计 (7)

3.1 温度检测模块 (7)

3.1.1 温度传感器的概述 (7)

3.1.2DS18B20的工作原理及工作时序图 (9)

3.2 显示模块 (12)

3.3 温超报警模块 (14)

3.4 串口通信模块 (15)

4 软件设计 (17)

4.1 系统整体设计 (17)

4.2 温度获取并转换 (19)

4.3 温度控制 (20)

5 单片机与上位机通信 (21)

总结 (23)

谢辞 (24)

参考文献 (25)

附录1电路原理图 (26)

附录2 完整C程序代码 (28)

附录3 模块调试代码 (34)

桂林电子科技大学毕业设计(论文)报告用纸第1页共34 页引言

上世纪90年代以来,单片机就进入了一个高速发展的阶段,大部分半导体厂商都注重新型单片机的研制、生产和推广。单片机已经深入到我们生活的每一个细节,由于单片机的微型电子产品到处都是,尤其是ARM的广泛应用,使我们的生活变得更丰富多彩。随着电子技术的发展,现在温度控制系统的功能越来越强大,也越来越稳定可靠,而且精度也越来越高,各种环境对温控系统的要求也越来越高。温度控制系统广泛应用于社会生活的各个领域 ,如家电、汽车、材料、电力电子等 ,常用的控制电路根据应用场合和所要求的性能指标有所不同 , 在工业企业中,如何提高温度控制对象的运行性能一直以来都是控制人员和现场技术人员努力解决的问题。这类控制对象惯性大,滞后现象严重,存在很多不确定的因素,难以建立精确的数学模型,从而导致控制系统性能不佳,甚至出现控制不稳定、失控现象。传统的继电器调温电路简单实用 ,但由于继电器动作频繁 ,可能会因触点不良而影响正常工作。控制领域还大量采用传统的PID控制方式,但PID控制对象的模型难以建立,并且当扰动因素不明确时,参数调整不便仍是普遍存在的问题。

而采用数字温度传感器DS18B20,因其内部集成了A/D转换器,使得电路结构更加简单,而且减少了温度测量转换时的精度损失,使得测量温度更加精确。数字温度传感器DS18B20只用一个引脚即可与单片机进行通信,大大减少了接线的麻烦,使得单片机更加具有扩展性。由于DS18B20芯片的小型化,更加可以通过单条数据线就可以和主电路连接,故可以把数字温度传感器DS18B20做成探头,探入到狭小的地方,增加了实用性。还能串接多个数字温度传感器DS18B20进行多点的温度检测。温度自动控制系统主要是由温度采集、显示、扬声器报警、加热制冷模块和上位机显示模块组成。本毕设就是讲述以上模块的温控系统的应用。

1 绪论

1.1 单片微机的发展

单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit)常用英文字母的缩写MCU表示单片机,单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。单片机由运算器、控制器、存储器、输入输出设备构成,相当于一个微型的计算机(最小系统),和计算机相比,单片机缺少了外围设备等。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。单片机它最早是被用在工业控制领域。

由于单片机在工业控制领域的广泛应用,单片机由仅有CPU的专用处理器芯片发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。

Intel的8080是最早按照这种思想设计出的处理器,当时的单片机都是8位或4位的。其中最成功的是Intel的8051,此后在8051上发展出了MCS-51系列单片机系统。因为简单可靠而性能不错获得了很大的好评。尽管2000年以后ARM已经发展出了32位的主频超过300M的高端单片机,直到现在基于8051的单片机还在广泛的使用。在很多方面单片机比专用处理器更适合应用于嵌入式系统,因此它得到了广泛的应用。事实上单片机是世界上数量最多的处理器,随着单片机家族的发展壮大,单片机和专用处理器的发展便分道扬镳。

1.2 温度检测的意义及发展形势

温度是一个非常重要的物理量,因为它会影响很多物理及化学变化的过程,例如,燃烧,发酵,烘烤,煅烧,结晶,浓度,空气流动,以及蒸馏等等。因此对温度的检测以及控制的意义越来越大。在工业生产的过程中,很多时候都需要对温度进行严格的监控,以使得生产得以顺利的进行,产品的质量才能够充分的保证。使用自动温控系统可以对生产的温度进行自动控制,保证生产自动化、智能化且能够顺利,安全的进行,从而提高企业的生产效率。

温控采集控制系统是在嵌入式系统设计的基础上发展起来的。嵌入式系统虽然起源于微型计算机时代,但是微型计算机的体积、价格、可靠性,都无法满足广大用户对嵌入式系统的要求,因此,嵌入式系统慢慢走上了芯片化道路。本毕设将叙述STC89C52和传感器芯片DS18B20设计的温度控制系统。

1.3 温控系统设计的核心

设计工业现场的温度控制系统。采用DS18B20温度传感器,采集现场温度,通过数码管显示,具有报警,开启加热/制冷,和加大加热/制冷,以及通过串口线和上位机通信的功能。性能稳定,成本低廉,可连续工作,精度高,可靠性强等优点。温度控制系统,具体的要求如下:

(1)在当前三个数码管上显示当前采集到的目标温度(00~99.9℃)

(2)当目标温度低于26℃时,蜂鸣器开始报警,并且DBJ发光二极管闪烁(模拟开启制热设备);当目标温度继续降低,并低于24℃时,蜂鸣器的报警声频率加快,同时DBJ 和DJD一起闪烁(模拟加大制热设备制热功率)。

(3)当目标温度高于28℃时,蜂鸣器开始报警,同时GBJ闪烁(模拟开始制冷设备),当目标温度继续升高,并高于30℃时,蜂鸣器加快报警声频率,同时GBJ和GJD一起闪烁(模拟制冷设备加大制冷功率)。

(4)用串口将采集到的温度数据实时的发送到上位机,在上位机软件上实时的显示当前的温度值。

下面温控系统的组成请看图1-1

图1-1 温控系统组成图

2 单片机的简述

2.1 单片机的特点及引脚简介

单片机的特点:

1.采用哈佛体系结构

2.采用面向控制的指令系统

3.引脚功能服用

4.片内RAM作寄存器

5.类型齐全

6.功能通用

7.具有三高优势(集成度高、可靠性高、性价比高)。

[1]多功能

单片机利用当今先进的半导体器件制造技术,尽可能多地把各种计算机部件、存储

器和各种类型的输入/输出端口都集成在一块芯片内。因此,一个单片机所能实现的功

能是很多的。

[2]高性能

由于单片机的制造技术和系统结构的完善,单片机的运行速度和执行效率大大提

高。集成度的提高,不但使各种各样的输入和输出接口可以集成在单片机内,而且使存

储器的寻址范围也大大扩大,因此,单片机的性能比同类微型计算机的性能有明显的优

势。

[3]体积小

正因为单片机的集成度高,使所有硬件集中在一块半导体芯片上,所以,单片机体

积较之于同类微处理器小得多。因此,系统中控制部分的体积也随之大大缩小,单片机

将成为微电子嵌入式系统中的理想部件。

[4]低功耗

目前,许多单片机都能在低电压、低功耗下工作,有的单片机可在2.2V,甚至能

在0.9V下工作,并且,电流也低到微安级。

[5]产品设计周期短

用单片机进行产品设计,由于它的功能强,体积小,使硬件设计简化;又因各种仿真器

的问世,使用户的编程和调试变的非常方便,大大减少了用户系统的软件设计和调试的

时间。本毕设所用单片机位STC89C52其引脚,如图2-1

形式叫做DIP40封装。

VCC, GND--单片机电源脚。VCC是电源输入引

脚,GND是接地信号引脚。

XTAL1,XTAL2—外接时钟引脚。XTAL1为

片内震荡电路输入端,XTAL2为片内震荡电路输

出端。8051的时钟方式有两种,一种是片内时钟

震荡方式,需要在这两个引脚外接石英晶体和震

荡电容,震荡电容的值一般取10P~30P;另外一种

是外部时钟方式,即将XTAL1接地,外部时钟信

图2-1 STC89C52引脚图号从XTAL2脚接入。

RST—复位引脚,需要输入连续两个机器周期以上的高电平才有效。用来完成单片机的复位初始化操作,复位后程序计数器PC=0000H,即复位后程序从头开始执行。

PSEN--全称是程序存储器允许输出控制端。(由于如今单片机程序存储器有足够的内部ROM,此处略讲)

ALE/PROG-在单片机扩展外部RAM时,ALE用于控制把P0口的输出低8位送地址锁存器锁存起来,以实现低位地址和数据的隔离。

EA/Vpp--接高电平时,单片机读取内部程序存储器。当扩展有外部ROM时,读完内部ROM后自动读取外部ROM。接低电平时,单片机直接读取外部(ROM)。8031没有单片机没有内部ROM所以接低电平。本文使用89C52所以接高电平。

I/O口引脚—P0,P1,P2,P3。

P0—双向8位三态I/O口,每个口可独立控制。

P1—准双向8位I/O口,每个口可独立控制,内带上拉电阻(若想了解全面可查相关资料),这种口输出没有高阻态,输入不能锁存,故不是真正的双向I/O口。P2口与P1口相似。

P3—准双向8位I/O口,每个口可独立控制,内带上拉电阻。此口第一功能当做普通I/O口。第二功能定义如下:

P3.0:RXD串行口输入P3.1:TXD串行口输出

P3.2:INT0外部中断0输入P3.3:INT1外部中断1输入

P3.4:T0定时器0外部输入P3.5:T1定时器1外部输入

P3.6:WR外部写控制P3.7:RD外部读控制

2.2 单片机的电平特性

单片机是数字集成芯片,所以其工作是由数字电平控制方式。数字电路只有两种电平,高(1)和低(0)。常用逻辑电平有TTL,CMOS,LVTTL,ECL,PECL等等很多,我们用的最多的是TTL和CMOS。5V TTL和5V CMOS是通用的逻辑电平。TTL电平信号用的最多,这是因为,数据表示通常采用二进制,+5V等价于逻辑1, 0V等价于逻辑0.这被称为TTL(晶体管-晶体管逻辑电平)信号系统,这是计算机处理器控制的设备内部之间通信的标准技术。TTL型通信大多数情况下是采用并行数据传输方式。

CMOS电平VCC可达12V,CMOS电路输出高电平约为0.9VCC,而输出低电平约为0.1VCC。CMOS电路中不使用的输入端不能悬空,否则会造成逻辑混乱。另外CMOS 集成电路电源电压可以在较大的范围内变化,因而对电源的要求不像TTL那么严格。TTL和CMOS的逻辑电平关系如下:

VOH-----逻辑电平1的输出电压

VOL-----逻辑电平0的输出电压

VIH-----逻辑电平1的输入电压

VIL-----逻辑电平0的输入电压

TTL临界值:

VOHmin=2.4V, VOLmax=0.4V。

VIHmin=2.0V, VILmax=0.8V

TTL电平范围0~5V。

CMOS电平临界值:

(1)VOHmin=4.99V, VOLmax=0.01V。

(2)VIHmin=3.5V, VILmax=1.5V

TTL和CMOS逻辑电平的转换:

CMOS电平能驱动TTL电平,但TTL电平不能驱动CMOS电平,需加上拉电阻。

2.3 C51复位电路

单片机复位电路由主要有两种:

(1)上电复位

RC上电复位电路,在单片机上电后,对复位电路的电容充电。如图2-2所示。在上电瞬间,RST端的电位与Vcc相同,随着充电电流的减少,RST的电位逐渐下降。只要保证RST为高电平的时间大于2个机器周期,就能正常复位。电路中的电容和电阻取值可根据晶振的频率而定,我们使用11.0592MHZ,所以应该使用10uF电容和8.2K 电阻(本毕设使用10K)。

图2-2RC上电复位电路图2-3按键复位电路

(2)按键复位

按键复位又称手动复位,按键电平复位相当于RST端通过电阻与电源接通实现的。该电路除具有上电复位功能外,如果要在程序运行中复位,只需要按下如图2-3的那个键,此时电源被R1,R2分压,在RST端产生一个复位的高电平,从而达到复位作用。

2.4 时钟电路

8051的时钟有两种方式,一种是片内时钟震荡方式,另外一种是外部时钟方式。

(1)内部时钟方式

MCS-51单片机芯片内部有一个高增益反相放大器,其输入端为XTAL1,输出端为XTAL2。在XTAL1和XTAL2之间跨接晶振和微调电容,从而构成一个稳定的自激振荡器,这就是单片机的内部时钟电路。如

图2-4

图2-4内部时钟电路图2-5HMOS型单片机外部时钟电路(2)外部时钟方式

对于HMOS型单片机(8051),可用来输入外部脉冲信号,XTAL1接地,XTAL2接外部时钟,由于XTAL2的逻辑电平与TTL电平不兼容,所以应接一个上拉电阻。如图2-5。对于CHMOS单片机(80C51),外部时钟要由XTAL1引入,而XTAL2引脚应悬空。

3 温控系统的硬件设计

3.1 温度检测模块

3.1.1 温度传感器的概述

温度传感器是各种传感器中最常用的一种,早期使用的是模拟温度传感器,比如热敏电阻,随着温度的变化,它的阻值也发生了类似线性的变化,通过处理器采集电阻两端的阻值,再通过某个公式就可计算出当前的温度。随着科技的进步,现代的温度传感器已经走向数字化。DALLAS半导体公司推出的数字化温度传感器DS18B20采用单总线协议,即与单片机接口仅需占用一个I/O口,无须任何的外部元件,直接将环境温度转化为数字信号,以数字码的方式串行输出。DS18B20是DALLAS公司推出的第一片支持“一总线”接口的的温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点。

(1)DS18B20的特性:

①适应电压范围宽,电压范围在3.0~5.5V,在寄生电源方式下可以由数据线供电。

②独特的单线接口方式,它与处理器连接时仅需要一个I/O口就可以和微处理器双向通信。

③支持多点组网功能,多个DS18B20可以并联在唯一单总线上,实现组网多点测温。

④负压特性。电源极性接反时不会因为发热而烧坏,但是不能正常工作。

⑤测量范围在-55℃~+125℃,在-10℃~+85℃时精度为±0.5℃。

⑥在使用中不需要任何外围的元件,全部传感元件和转换电路都集成在一个三极管的集成电路内。

⑦测量结果直接输出数字信号,通过单总线串行传送给微处理器,同时可传送CRC校验码,具有很强的抗干扰纠错能力。

⑧可编程分辨率为9-12位,对应的可分辨温度分别为0.5℃,0.25℃,0.125℃和

0.0625℃,可实现高精度测温。

(2)引脚简介

DS18B20有两种封装形式,一种是三脚直插型,是使用最普遍的一种封装。和八脚SOSI贴片式封装。如下图3-1所示

图3-1DS18B20的两种封装

GND--电源负极

DQ--信号输入输出

V DD--电源正极

NC--空引脚

(3)DS18B20与单片机硬件连接图

前文提到DS18B20具有单总线,单片机与外设之间进行串行传输的串行总线主要有I2C,SPI和SCI总线。其中I2C总线以同步串行二线方式进行通信(一条时钟线一条数据线),SPI总线则以同步串行三线方式进行通信(一条时钟线,一条数据输入线,一条数据输出线),而SCI总线是以异步方式进行通信(一条数据输入线,一条数据输出线)。这些总线需要两条或者两条以上的的信号线。但是DS18B20采用的单总线技术与

上述的总线不同,它采用了单条信号线,既可传输时钟,又可传输数据,而且数据传输是双向的,因而这种单总线技术具有线路简单,硬件开销少,成本低廉,便于总线扩展和维护等优点。单总线使用与单主机系统,可以控制一个或多个从机设备。

图3-2 DS18B20与微处理器典型连接电路

主机可以是微控制器,从机可以是单总线器件,它们之间的数据交换至通过一条信号线。当只有一个从机设备时,系统可按单节点系统操作;当有多个从机设备时,系统则按多节点系统操作。本毕设单片机只是与一个DS18B20通信,如果要控制多个

DS18B20进行温度采集,只要将所有DS18B20的I/O口全部接到一起就可以了。具体操作时,通过读取每个DS18B20内部芯片的序列号来识别。

3.1.2 DS18B20的工作原理和工作时序图

单片机要读出DS18B20的温度数据,首先要知道控制DS18B20的指令。

①33H--读ROM,读DS18B20温度传感器ROM中的编码(64位地址)

②55H--匹配ROM。发出此命令之后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS18B20并使之做出响应,为下一步对该DS18B20的读/写作准备。

③F0H--搜索ROM。用于确定挂接在同一总线上DS18B20的个数,识别64位ROM地址,为操作各器件做好准备。

④CCH--跳过ROM。忽略64位ROM地址,直接向DS18B20发温度转换命令,使用与一个从机工作。

⑤ECH--告警搜索命令。执行后只有温度超过设定值上限或下限的,芯片才做出响应。

ROM的作用是使每个DS18B20都各不相同,这样就可以实现一条总线上挂接多个DS18B20的目的。当主机需要对众多在线DS18B20中的某一个进行操作时,主机应先逐个与DS18B20挂接,读出其序列号;然后再将所有的DS18B20挂接到总线上,单片机发出匹配ROM命令,紧接着主机提供的64位序列号之后的操作就是针对该

DS18B20。

如果主机只对一个DS18B20进行操作,就不需要读取ROM编码和匹配,直接跳过ROM命令,就可以进行温度转换和读取。其操作如下

①44H--温度转换。启动DS18B20进行温度转换,结果存入9字节的RAM中。

②BEH--读暂存器。读内部RAM中9字节的温度数据。

③4EH--写暂存器。发出向内部RAM的第2,3字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节数据。其他指令在这里就不做详细介绍。

DS18B20在出厂时默认配置为12位,其中最高位为符号位,即温度值共11位,单片机在读数据时,一次会读两字节共16位,读完后将低11位的二进制数转化为十进制数后再乘以0.0625便为所测的实际温度值。另外,还需要判断温度的正负。前5个字符为符号位,这5位同时变化,我们只需要判断11位就可以了。前5位为1时,读取的温度为负值,且测到的数值需要取反加1再乘以0.0625才得到实际温度值。前5位为0时,读取温度位为正值,只需要将数值乘0.0625即可。

下面是DS18B20的工作时序简介

(1)初始化时序图

图3-3 初始化时序图

①先将数据线置高电平1。

②延时(时间要求不是很严格,但最好尽可能短)。

③数据线拉倒低电平0。

④延时800μs(时间可以在480μs~960μs中选)

⑤数据线拉高到电平1。

⑥延时等待。如果初始化成功则在15~60μs内产生一个由DS18B20返回的低电平0。这个可以确定它的存在。

⑦如果CPU读到数据线上的低电平后,还要进行延时,时间从发出高电平算起不少于480μs。

⑧将数据线再次拉到低电平后结束。

(2)DS18B20的写和读数据

写时序图:

图3-4 DS18B20读时序图

①数据线先置低电平0。

②延时确定的时间为15μs。

③按从低位到高位的顺序发送数据

④延时时间为45μs。

⑤数据线拉倒高电平1。

⑥重复前面五步,直到发送完整一个字节。

⑦最后将数据线拉高到1。

读时序图:

图3-5读时序图

图3-6控制器读1的详细时序

图3-7芯片资料推荐的控制器读1时序

结合上面3-5,3-6,3-7图,我们可以知道

①将数据线拉高到1。

②延时2μs。

③将数据线拉低到0.

④延时5μs。(时间大于1μs)

⑤将数据线拉高到1.

⑥延时4μs。

⑦读数据线的状态得到下一个状态位,并进行数据处理。

⑧延时30μs。

⑨重复以上所有步骤,直到读取完一个字节。

3.2 显示模块

3.2.1数码管简介

为了显示方便和节省成本,温度的显示我们采用共阴单位数码管显示。首先简单说

明共阴数码管的内部结构。如图3-8

图3-8 共阴数码管内部结构

对于共阴数码管来说,其8个发光二极管的阴极在数码管内部是连接在一起的,而它们的阳极是独立的,通常在设计电路时一般把阴极接地。当我们要显示某个数时,按照共阴数码管编码表,对单片机相应的I/O 口赋值就可以显示相应的数字。例如我们要显示8,那就是除了dp ,其他七个发光二极管都亮。假如数码管和单片机的连接P0口。

则P0=0x7f ,数码管的各引脚排列可以通过万用表测得。 图3-9 单位共阴数码管引脚

一般的单位数码管有10个引脚,就共阴单位数码管来说,中间两个对称的引脚是相通的,既它们的共阴极。

图3-10 单片机与数码管连接图

如图3-10数码管的输入端连接单片机的P0口,同时在P0口加上拉电阻。数码管的WX1,WX2,WX3是它们的位选端,每个数码管对应一个位选端,它们分别与U3锁存器的数据输出端的低三位相连,U3的数据输入端也连接到单片机的P0口。两个锁存器的锁存端分别与单片机的P2.6和P2.7相连。因为用单片机可以控制锁存器的锁存端,进而控制锁存器的数据输出,这种分时控制的方法可以很方便的控制任意的数码管显示任意数字。当我们要用第一个数码管显示一个数字时,第二,第三个的位选就要关闭。即将数据从单片机的I/O口直接送到U3锁存器的锁存端一个高电平,然后将数据从单片机的P0口直接送出到锁存器U3的数据输出端,然后关闭U3的锁存端。因为数码管为共阴极,所以位选通时为低电平,位选关闭时为高电平,即只有WX1端对应数据为0,其他都为1。

3.2.274HC573锁存器的结构及原理

74HC573锁存器是一种数字芯片。其引脚图如下:

OE是三态允许输出端,通常叫做输出使能端。

D0-D8为数据输入端,Q0-Q8为数据输出端;LE为锁存

允许端。

表3-174HC573的真值表

图3-1174HC573引脚图

由真值表可以看出,当OE为高电平时,无论LE与为何电平状态,其输出都是高阻态(Z)。这种情况下芯片是处于不可控状态的,因此,我们将OE接低电平(L),即接地。当OE为低电平时,再结合LE端的输入状态,当LE端为高电平(H)时,Q端的状态和D端的一样。当LE为低电平时,无论D端的电平是什么,Q端都保持上一次的数据状态。

3.3 温超报警模块

温度警报本毕设采用蜂鸣器进行报警,其电路如下图3-12

图3-12 蜂鸣器报警连接图

图中PNP三极管是采用了S8550,它是一种普通的硅三极管,但是可以满足蜂鸣器大电流的要求。可以采用SS8550,声音会更大些。

3.4 串口通信模块

(1)通信有并行和串行两种方式。在单片机系统以及现代单片机测控系统中,信息的交换多采用串行通信方式。

相对于并行通信,串行通信的速度比较慢,这种方式所用的传输线少(例如二根),因而在通信时可降低成本,比较经济。另外,它还可以借助于现存的电话网进行数据传送,因此串行通信适合于远距离且传送速度要求不很高的通信。

串行通信有三种传输制式,这就是单工(Simplex)方式、半双工(Half-Duplex)和全双工(Full-Duplex)方式。

单工。单工是指数据传输仅能沿一个方向,不能反向传输。

半双工。半双工是指数据可以沿两个方向,但需要分时进行。

全双工。全双工是指数据可以同时进行双向传输。

异步通信方式:串行异步通信方式是以字符为单位进行传输的,异步通信所采用的数据格式是以一组可变"位数" 的数组成的。第一位称起始位,它的宽度为1bit,低电平;接着传送一个数据5~8bit,以高电平为"1",低电平为"0";也可有一位奇偶校验位;后是停止位,宽度可以是1bit、1.5bit或2bit,在两个数据位之间可有空闲位。

图3-13异步通信的数据格式

同步通信协议:在同步通信时所使用的数据格式根据控制规程常分为:面向字符及面向比特两种。同步通信方式在每个数据前后不加起始位和停止位,而是将数据顺序连接起来,以一个数据块为传输单位,每个数据块附加一个或二个同步字符,最后以校验字符

结束。串行通信的传送速率:在串行通信中常用波特率(Band Rate )来表示数据传送的速率。所谓传输率就是指每秒传输多少位,即波特率。国际上规定了一个标准波特率系列,标准波特率也是最常用的波特率。标准波特率系列 为:110、300、600、1200、1800、2400、4800、9600和19200。

图3-14 同步通信传输格式 (2)串口连接原理图以及发送接收原理

我们使用MAX232把TTL 电平从0V 和5V 转换到3V 到5V 或-3V 到-15V 之间。MAX232包含两路接收器和驱动器的IC 芯片,它的内部有一个电源电压变换器,可以把输入的+5V 电源电压变换成RS232输出电平所需的+10V 电压。如图3-15

如左图,按照芯片手册我们可以知道C3、C5、C6、C7应取0.1μF /16V 的电解电容,经过实验和总结前人经验,我们可以选用0.1μF 的非极性的瓷片电容代替电解电容。在布线时,这四个电容要尽量靠近MAX232芯片,以提高抗干扰能力。MAX232的11和12引脚分别连接单片机的P3.1和P3.0,这两个发送和接收端口,MAX232也可以使用9和10引脚作为一对发送和接收端口,但是要注意组引脚要对应。TTL 电平从单片机的

TXD 发出,经过MAX232转换RS232

图3-15 串口连接部分图 平后从MAX232 的14引脚T1OUT 发出,再连接到串口座的第3引脚,再经过随机配送的交叉串口线后,连接到PC 机的串口座的第2脚RXD ,这时候计算机就可以接收到数据了。PC 机发送数据时从计算机的串口座的第3引脚TXD 端发出的数据,再逆向流向单片机的RXD 端即P3.0口接收数据。

4 软件设计

4.1 系统整体设计

(1)如图4-1,主程序流程图

主程序首先进行串口初始化,以及锁存器锁存端置低电平。然后DS18B20开始检测温度,见得到的温度数据通过单总线传输到51单片机,进行温度处理,通过I/O即P0口输出到数码管进行显示。如果温度超过设定范围蜂鸣器将报警,同时加大制冷制热的设备将会工作。温度数据通过串口发送到上位机,实现了实时监控。

图4-1主程序流程图

基于51单片机及DS18B20温度传感器的数字温度计程序(详细注释)

基于51单片机及DS18B20温度传感器的数字温度计程序(详细注释)

电路实物图如下图所示: C 语言程序如下所示: /******************************************************************** zicreate ----------------------------- Copyright (C) https://www.sodocs.net/doc/548509636.html, -------------------------- * 程序名; 基于DS18B20的测温系统 * 功 能: 实时测量温度,超过上下限报警,报警温度可手动调整。K1是用来 * 进入上下限调节模式的,当按一下K1进入上限调节模式,再按一下进入下限 * 调节模式。在正常模式下,按一下K2进入查看上限温度模式,显示1s 左右自动 * 退出;按一下K3进入查看下限温度模式,显示1s 左右自动退出;按一下K4消除 * 按键音,再按一下启动按键音。在调节上下限温度模式下,K2是实现加1功能, * K1是实现减1功能,K3是用来设定上下限温度正负的。 * 编程者:Jason * 编程时间:2009/10/2 *********************************************************************/ #include //将AT89X52.h 头文件包含到主程序 #include //将intrins.h 头文件包含到主程序(调用其中的_nop_()空操作函数延时) #define uint unsigned int //变量类型宏定义,用uint 表示无符号整形(16位) #define uchar unsigned char //变量类型宏定义,用uchar 表示无符号字符型(8位) uchar max=0x00,min=0x00; //max 是上限报警温度,min 是下限报警温度 bit s=0; //s 是调整上下限温度时温度闪烁的标志位,s=0不显示200ms ,s=1显示1s 左右 bit s1=0; //s1标志位用于上下限查看时的显示 void display1(uint z); //声明display1()函数 #include"ds18b20.h" //将ds18b20.h 头文件包含到主程序 #include"keyscan.h" //将keyscan.h 头文件包含到主程序 #include"display.h" //将display.h 头文件包含到主程序

C51单片机定时器及数码管控制实验报告

理工大学信息工程与自动化学院学生实验报告 (201 — 201学年第1 学期) 课程名称:单片机技术

一、实验目的 1.掌握定时器T0、T1 的方式选择和编程方法,了解中断服务程序的设计方法,学会实时程序的调试技巧。 2.掌握LED 数码管动态显示程序设计方法。 二、实验原理 1.89C51 单片机有五个中断源(89C52 有六个),分别是外部中断请求0、外部中断请求1、定时器/计数器0 溢出中断请求、定时器/计数器0 溢出中断请求及串行口中断请求。每个中断源都对应一个中断请求位,它们设置在特殊功能寄存器TCON 和SCON 中。当中断源请求中断时,相应标志分别由TCON 和SCON 的相应位来锁寄。五个中断源有二个中断优先级,每个中断源可以编程为高优先级或低优先级中断,可以实现二级中断服务程序嵌套。在

同一优先级别中,靠部的查询逻辑来确定响应顺序。不同的中断源有不同的中断矢量地址。 中断的控制用四个特殊功能寄存器IE、IP、TCON (用六位)和SCON(用二位),分别用于控制中断的类型、中断的开/关和各种中断源的优先级别。中断程序由中断控制程序(主程序)和中断服务程序两部分组成: 1)中断控制程序用于实现对中断的控制; 2)中断服务程序用于完成中断源所要求的中断处理的各种操作。 C51 的中断函数必须通过interrupt m 进行修饰。在C51 程序设计中,当函数定义时用了interrupt m 修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按MCS-51 系统中断的处理方式自动把它安排在程序存储器中的相应位置。 在该修饰符中,m 的取值为0~31,对应的中断情况如下: 0——外部中断0 1——定时/计数器T0 2——外部中断1 3——定时/计数器T1 4——串行口中断 5——定时/计数器T2 其它值预留。 89C51 单片机设置了两个可编程的16 位定时器T0 和T1,通过编程,可以设定为定时器和外部计数方式。T1 还可以作为其串行口的波特率发生器。

51单片机实例程100讲全集

目录 目录 (1) 函数的使用和熟悉 (4) 实例3:用单片机控制第一个灯亮 (4) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4) 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (5) 实例6:使用P3口流水点亮8位LED (5) 实例7:通过对P3口地址的操作流水点亮8位LED (6) 实例8:用不同数据类型控制灯闪烁时间 (7) 实例9:用P0口、P1 口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (9) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (10) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (11) 实例15:用P0口显示按位"异或"运算结果 (11) 实例16:用P0显示左移运算结果 (11) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (12) 实例19:用if语句控制P0口8位LED的流水方向 (13) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (13) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (15) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (17) 实例25:用P0口显示字符串常量 (18) 实例26:用P0 口显示指针运算结果 (19) 实例27:用指针数组控制P0口8位LED流水点亮 (19) 实例28:用数组的指针控制P0 口8 位LED流水点亮 (20) 实例29:用P0 、P1口显示整型函数返回值 (21) 实例30:用有参函数控制P0口8位LED流水速度 (22) 实例31:用数组作函数参数控制流水花样 (22) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (25) 实例34:用指针数组作为函数的参数显示多个字符串 (26) 实例35:字符函数ctype.h应用举例 (27) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (28) 实例38:字符串函数string.h应用举例 (29) 实例39:宏定义应用举例2 (29) 实例40:宏定义应用举例2 (29) 实例41:宏定义应用举例3 (30)

基于AT89C51单片机的温度传感器

基于AT89C51单片机的温度传感器 目录 摘要.............................................................. I ABSTRACT........................................................... I I 第一章绪论 (1) 1.1 课题背景 (1) 1.2本课题研究意义 (2) 1.3本课题的任务 (2) 1.4系统整体目标 (2) 第二章方案论证比较与选择 (3) 2.1引言 (3) 2.2方案设计 (3) 2.2.1 设计方案一 (3) 2.2.2 设计方案二 (3) 2.2.3 设计方案三 (3) 2.3方案的比较与选择 (4) 2.4方案的阐述与论证 (4) 第三章硬件设计 (6) 3.1 温度传感器 (6) 3.1.1 温度传感器选用细则 (6) 3.1.2 温度传感器DS18B20 (7) 3.2.单片机系统设计 (13)

3.3显示电路设计.................................错误!未定义书签。 3.4键盘电路设计................................错误!未定义书签。 3.5报警电路设计.................................错误!未定义书签。 3.6通信模块设计.................................错误!未定义书签。 3.6.1 RS-232接口简介..............................错误!未定义书签。 3.6.2 MAX232芯片简介.............................错误!未定义书签。 3.6.3 PC机与单片机的串行通信接口电路.............错误!未定义书签。 第四章软件设计..................................错误!未定义书签。 4.1 软件开发工具的选择..........................错误!未定义书签。 4.2系统软件设计的一般原则.......................错误!未定义书签。 4..3系统软件设计的一般步骤......................错误!未定义书签。 4.4软件实现....................................错误!未定义书签。 4.4.1系统主程序流程图.........................错误!未定义书签。 4.4.2 传感器程序设计...........................错误!未定义书签。 4.4.3 显示程序设计.............................错误!未定义书签。 4.4.4 键盘程序设计.............................错误!未定义书签。 4.4.5 报警程序设计.............................错误!未定义书签。 4.4.6 通信模块程序设计.........................错误!未定义书签。 第五章调试与小结..................................错误!未定义书签。致谢...............................................错误!未定义书签。参考文献...........................................错误!未定义书签。附录...............................................错误!未定义书签。系统电路图.......................................错误!未定义书签。系统程序.........................................错误!未定义书签。

基于AT8951单片机原理及应用

◎<习题一>◎<习题二>◎<习题三> ◎<习题四>◎<习题五>◎<习题六> ◎<习题七>◎<习题八>◎<习题九> ◎<习题十>◎<总复习题> ※<习题一> 第一章习题答案 一、选择题 DCABD DACAC ACDBA BCCBA BB (ABE) B 二、计算题 1、将下列十进制数分别转换成二进制、十六进制和BCD码的 形式 (1)33D=00100001B=21H=00110011BCD (2)22 .37D=00010110.0101B=16.5H=00100010.00110111BCD 2、将下列二进制数分别转换成十进制、十六进制的形式。(1) 10101100 B=172D=ACH (2) 1001.01 B= 9.25D=9.4H (3)11001100. 011B=CC.6H=204.375D 3、将下列十六进制数分别转换成二进制、十进制的形式。(1)7B H=01111011B=123D (2)0E7.2 H=231.125D=11100111.0010B (3)21A9H=8617D=0010000110101001B 4、将下列BCD码转换成十进制数。 (1)10010010BCD=92D (2)01010010=52D (3)1000111. 0110=47.6D 5、将下列带符号数分别用原码、反码、补码来表示。 (1)+39 原码、反码、补码为00100111B

(2)-121 原码为11111001B,反码为10000110B,反码为10000111B 三、填空题 1、带符号数在机器中可用_原_码、_反_码和_补_码表示。 2、___运算器___和_控制器_____是计算机硬件的核心,称为中央处理器(CPU)。 3. CPU一次可处理的二进制数的位数称为___字长___。 4、字长为___8___的整数倍。 5、.MCS-51的最基本时间单位是_ 时钟___周期。 6、.8051的一个机器周期由___12___个时钟周期组成。 7、半导体存储器分为__ROM__和__RAM____。 8、根据信息传送的属性,总线可分为___地址总线___、_数据总线_____和__控制总线____。 四、问答题 1、什么是字长?Intel公司的MCS-51系列单片机的字长是多少?答:字长是指计算机能一次处理二进制数码的位数,MCS—51系列单片机字长为8位,又称8位机。 2、简述半导体存储器的分类及各类存储器的功能。 答:(1)只读存储器(ROM) ROM在使用过程中,存储的信息只能被读出,而不能用通常的方法写入。在系统断电时,ROM中的信息并不会丢失。因此,这类存储器适用于存放各种固定的系统程序、应用程序和常数等。 ROM按制造工艺的不同可分为以下几种: A)掩膜ROM 存储在ROM中的信息是在生产过程中用“掩膜”工艺固化在ROM芯片中的,一旦做好,不能更改。只适用于存储成熟的固定程序和数据,在大批量生产时,可降低成本。 B)可编程ROM(PROM) PROM中的信息是由用户写入,但只能写一次,写入后的信息以后不能更改。 C)可擦除ROM 允许用户对已写入的信息进行多次修改,但修改之前要先将原来的内容擦除掉,按擦除方法不同,又分为两种: 紫外线擦除的ROM(EPROM):在芯片上有一窗口,用紫外线擦抹器照射该窗口约20分钟后就可擦除,然后加规定的编程电压可重新写入程序。 电擦除的ROM(EEPROM):它允许用户利用+5V的电压擦除已存入的信息,并可进行重新写入,擦除和写入过程可在线完成,不需将芯片从用户系统中取出。

51单片机定时器的使用

1 51单片机定时器/计时器的使用 步骤: 1、 打开中断允许位: 对IE 寄存器进行控制,IE 寄存器各位的信息如下图所示: EA : 为0时关所有中断;为1时开所有中断 ET2:为0时关T2中断;为1时开T2中断,只有8032、8052、8752才有此中断 ES : 为0时关串口中断;为1时开串口中断 ET1:为0时关T1中断;为1时开T1中断 EX1:为0时关1时开 ET0:为0时关T0中断;为1时开T0中断 EX0:为0时关1时开 2、 选择定时器/计时器的工作方式: 定时器TMOD 格式 CPU 在每个机器周期内对T0/T1 检测一次,但只有在前一次检测为1和后一次检测为0时才会使计数器加1。因此,计数器不是由外部时钟负边沿触发,而是在两次检测到负跳变存在时才进行计数的。由于两次检测需要24个时钟脉冲,故T0/T1线上输入的0或1的持续时间不能少于一个机器周期。通常,T0或T1输入线上的计数脉冲频率总小于100kHz 。 方式0:定时器/计时器按13位加1计数,这13位由TH 中的高8位和TL 中的低5位组成,其中TL 中的高3位弃之不用(与MCS-48兼容)。 13位计数器按加1计数器计数,计满为0时能自动向CPU 发出溢出中断请求,但要它再次计数,CPU 必须在其中断服务程序中为它重装初值。 方式1:16位加1计数器,由TH 和TL 组成,在方式1的工作情况和方式0的相同,只是计数器值是方式0的8倍。

2 方式2:计数器被拆成一个8位寄存器TH 和一个8位计数器TL ,CPU 对它们初始化时必须送相同的定时初值。当计数器启动后,TL 按8位加1计数,当它计满回零时,一方面向CPU 发送溢出中断请求,另一方面从TH 中重新获得初值并启动计数。 方式3:T0和T1工作方式不同,TH0和TL0按两个独立的8位计数器工作,T1只能按不需要中断的方式2工作。 在方式3下的TH0和TL0是有区别的:TL0可以设定为定时器/计时器或计数器模式工作,仍由TR0控制,并采用TF0作为溢出中断标志;TH0只能按定时器/计时器模式工作,它借用TR1和TF1来控制并存放溢出中断标志。因此,T1就没有控制位可以用了,故TL1在计满回零时不会产生溢出中断请求的。 显然,T0和T1设定为方式3实际上就相当于设定了3个8位计数器同时工作,其中TH0和TL0为两个由软件重装的8位计数器,TH1和TL1为自动重装的8位计数器,但无溢出中断请求产生。由于TL1工作于无中断请求状态,故用它来作为串口可变波特 3、 为计数器赋值 计数器初值计算 TC =M ?C TC :计数器初值,M :计数器模值(2k ),C :把计数器计满的计数值 定时器初值计算 T =(M ?TC )T 计数 或 TC =M ?T/T 计数 M :模值,T 计数:单片机时钟周期T CLK (ΦCLK 的倒数)的12倍;TC 为定时器的定时初值,T 为欲定时的时间。 TC =M ?T ×ΦCLK /12 M :模值,ΦCLK :单片机时钟周期ΦCLK ;TC 为定时器的定时初值,T 为欲定时的时间。 例如:单片机主脉冲频率ΦCLK 为12MHz ,最大定时时间为: 方式0时 T MAX = 213×1us = 8.192ms 方式1时 T MAX = 216×1us = 65.536ms 方式2和方式3 T MAX = 28×1us = 0.256ms 4TR0:为0时,停T0计数;为1时,启T0计数

基于51单片机DS18B20温度传感器的C语言程序和电路

基于51单片机DS18B20温度传感器的C语言程序和电路 DS18B20在外形上和三极管很像,有三只脚。电压范围为3.0 V至5.5 V 无需备用电源测量温度位温度转换为12位数字格式最大值为750毫秒用户可定义的非易失性温度报警设置应用范围包敏感系统。 下面是DS18B20的子程序,本人用过完全可行的: #include #include #define uchar unsigned char #define uint unsigned int sbit DQ=P2^0; void reset(); //DS18B20 void write_byte(uchar val); //DS18B20写命令函数 uchar read_byte(void); //DS18B20读1字节函数 void read_temp(); //温度读取函数 void work_temp(); //温度数据处理函数 uchar data temp_data[2]={0x00,0x00}; uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //对于温度显示值值 uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x0数部分查表 main() { while(1) { 自己添加; } } void delay1(uint t) { for(;t>0;t--); } ///////温度控制子函数 void reset() { uchar presence=1; while(presence) { while(presence) {

51单片机实用汇编程序库(word)

51 单片机实用程序库 4.1 流水灯 程序介绍:利用P1 口通过一定延时轮流产生低电平 输出,以达到发光二极管轮流亮的效果。实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。 程序实例(LAMP.ASM) ORG 0000H AJMP MAIN ORG 0030H MAIN: 9 MOV A,#00H MOV P1,A ;灭所有的灯 MOV A,#11111110B MAIN1: MOV P1,A ;开最左边的灯 ACALL DELAY ;延时 RL A ;将开的灯向右边移 AJMP MAIN ;循环 DELAY: MOV 30H,#0FFH D1: MOV 31H,#0FFH D2: DJNZ 31H,D2 DJNZ 30H,D1 RET END 4.2 方波输出 程序介绍:P1.0 口输出高电平,延时后再输出低电 平,循环输出产生方波。实际应用中例如:波形发生器。 程序实例(FAN.ASM): ORG 0000H MAIN: ;直接利用P1.0 口产生高低电平地形成方波////////////// ACALL DELAY SETB P1.0 ACALL DELAY 10 CLR P1.0 AJMP MAIN ;////////////////////////////////////////////////// DELAY: MOV R1,#0FFH DJNZ R1,$ RET

五、定时器功能实例 5.1 定时1 秒报警 程序介绍:定时器1 每隔1 秒钟将p1.o 的输出状态改变1 次,以达到定时报警的目的。实际应用例如:定时报警器。程序实例(DIN1.ASM): ORG 0000H AJMP MAIN ORG 000BH AJMP DIN0 ;定时器0 入口 MAIN: TFLA G EQU 34H ;时间秒标志,判是否到50 个 0.2 秒,即50*0.2=1 秒 MOV TMOD,#00000001B;定时器0 工作于方式 1 MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05 秒,定时 20 次则一秒 11 SETB EA ;开总中断 SETB ET0 ;开定时器0 中断允许 SETB TR0 ;开定时0 运行 SETB P1.0 LOOP: AJMP LOOP DIN0: ;是否到一秒//////////////////////////////////////// INCC: INC TFLAG MOV A,TFLAG CJNE A,#20,RE MOV TFLAG,#00H CPL P1.0 ;////////////////////////////////////////////////// RE: MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05 秒,定时 20 次则一秒 RETI END 5.2 频率输出公式 介绍:f=1/t s51 使用12M 晶振,一个周期是1 微秒使用定时器1 工作于方式0,最大值为65535,以产生200HZ 的频率为例: 200=1/t:推出t=0.005 秒,即5000 微秒,即一个高电

基于51单片机的数字温度报警器

摘要:随着传感器在生产生活中更加广泛的应用,一种新型的数字式温度传感器实现对温度的测试与控制得到了更快的开发。本文设计了一种基于单片机AT89C52的温度检测及报警系统。该系统将温度传感器DS18B20接到单片机的一个端口上,单片机对温度传感器进行循环采集。将采集到的温度值与设定的上下限进行比较,当超出设定范围的上下限时,通过单片机控制的报警电路就会发出报警信号,从而实现了本次课程设计的要求。该系统设计和布线简单、结构紧凑、体积小、重量轻、抗干扰能力较强、性价比高、扩展方便,在工农业等领域的温度检测中有广阔的应用前景。本次课程设计的测量范围为0℃--99℃,测量误差为±2℃。 关键字:温度传感器、单片机、报警、数码管显示 一、概述 本次设计可以应用到许多我们用过的软件设计,将前面所学的知识融汇在一起实现温度监测及其报警的功能,来提醒农民当前大棚内温度是否适合农作物的生长。 电子技术是在十九世纪末、二十世纪初开始发展起来的新兴技术,在二十世纪发展最迅速,应用最广泛,成为近代科学技术发展的一个重要标志。 随着电子技术的飞速发展,电子技术在日常生活中得到了广泛的应用,各类转换电路的不断推出以及电子产品的快速更新,电子技术已成为世界发展和人们生活中必不可少的工具。 本次课设应用Protues软件设计一个温度检测报警系统,用温度传感器DS18B20采集大棚内的温度,当大棚内的温度高于30℃。或低于15℃。时,电路发出报警信号并显示当前温度,达到提醒农民的效果。 本次课设要求设计一个温度监测报警显示电路,要求温度范围:0℃--99℃;测量误差为±2℃;报警下限温度为:15℃;报警上限温度为:30℃。 二、方案论证 设计一个用于温室大棚温度监测系统。大棚农作物生长时,其温度不能太低,也不能太高,太低或太高均不适合农作物生长。该系统可实时测量、显示大棚的温度,当大棚温度超过农作物生长的温度范围时,报警提醒农民。 方案一: 方案一原理框图如图1所示。 图1 大棚温度检测系统的原理框图 方案二: 方案二原理框图如图2所示。

51单片机原理及应用期末考试试题汇总

单片机原理及应用期末考试试题汇总 1、单片机是将微处理器、一定容量的RAM 和ROM以及I/O口、定时器等电路集成在一块芯片上而构成的微型计算机。 2、单片机89C51片集成了4KB的FLASH ROM,共有5个中断源。 3、两位十六进制数最多可以表示256个存储单元。 4、89C51是以下哪个公司的产品?(C) A、INTEL B、AMD C、ATMEL D、PHILIPS 5、在89C51中,只有当EA引脚接高电平时,CPU才访问片的Flash ROM。 6、是非题:当89C51的EA引脚接低电平时,CPU只能访问片外ROM,而不管片是否有程序存储器。T 7、是非题:当89C51的EA引脚接高电平时,CPU只能访问片的4KB空间。F 8、当CPU访问片外的存储器时,其低八位地址由P0口提供,高八位地址由P2口提供,8位数据由P0口提供。 9、在I/O口中,P0口在接LED时,必须提供上拉电阻,P3口具有第二功能。 10、是非题:MCS-51系列单片机直接读端口和读端口锁存器的结果永远是相同的。F 11、是非题:是读端口还是读锁存器是用指令来区别的。T 12、是非题:在89C51的片RAM区中,位地址和部分字节地址是冲突的。F 13、是非题:中断的矢量地址位于RAM区中。F 14、MCS-51系列单片机是属于(B)体系结构。 A、诺依曼 B、普林斯顿 C、哈佛 D、图灵 15、89C51具有64KB的字节寻址能力。 16、是非题:在89C51中,当CPU访问片、外ROM区时用MOVC指令,访问片外RAM区时用MOVX 指令,访问片RAM区时用MOV指令。T 17、在89C51中,片RAM分为地址为00H~7FH的真正RAM区,和地址为80H~FFH的特殊功能寄存器(SFR) 区两个部分。 18、在89C51中,通用寄存器区共分为4组,每组8个工作寄存器,当CPU复位时,第0组寄存器为当前的工作寄存器。 19、是非题:工作寄存器区不允许做普通的RAM单元来使用。F 20、是非题:工作寄存器组是通过置位PSW中的RS0和RS1来切换的。T 21、是非题:特殊功能寄存器可以当作普通的RAM单元来使用。F 22、是非题:访问128个位地址用位寻址方式,访问低128字节单元用直接或间接寻址方式。T 23、是非题:堆栈指针SP的容可指向片00H~7FH的任何RAM单元,系统复位后,SP初始化为00H。F 24、数据指针DPTR是一个16位的特殊功能寄存器寄存器。 25、是非题:DPTR只能当作一个16位的特殊功能寄存器来使用。F 26、是非题:程序计数器PC是一个可以寻址的特殊功能寄存器。F 27、在89C51中,一个机器周期包括12个振荡周期,而每条指令都由一个或几个机器周期组

51单片机实例(含详细代码说明)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

基于单片机的温度传感器的设计说明

基于单片机的温度传感器 的设计 目录 第一章绪论-------------------------------------------------------- ---2 1.1 课题简介 ----------------------------------------------------------------- 2 1.2 设计目的 ----------------------------------------------------------------- 3 1.3 设计任务 ----------------------------------------------------------------- 3 第二章设计容与所用器件 --------------------------------------------- 4第三章硬件系统设计 -------------------------------------------------- 4 3.1单片机的选择------------------------------------------------------------- 4 3.2温度传感器介绍 ---------------------------------------------------------- 5 3.3温度传感器与单片机的连接---------------------------------------------- 8 3.4单片机与报警电路-------------------------------------------------------- 9 3.5电源电路----------------------------------------------------------------- 10 3.6显示电路----------------------------------------------------------------- 10 3.7复位电路----------------------------------------------------------------- 11 第四章软件设计 ----------------------------------------------------- 12 4.1 读取数据流程图--------------------------------------------------------- 12 4.2 温度数据处理程序的流程图 -------------------------------------------- 13 4.3程序源代码 -------------------------------------------------------------- 14

51单片机基本程序

1第一位隔一秒闪烁一次 #include #define uint unsigned int sbit led1=P1^0; uint i; uint j; void main() { while(1) { led1=0; for(i=1000;i>0;i--) for(j=110;j>0;j--); led1=1; for(i=1000;i>0;i--) for(j=110;j>0;j--); } } 2复杂广告灯 #include #define uint unsigned int #define uchar unsigned char uchar discode[]={ 0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,//正向流水灯 0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,//反向流水灯 0xAA,0x55,0xAA,0x55,0xAA,0x55,0xFF,//隔灯闪烁3次 0xF0,0x0F,0xF0,0x0F,0xFF,//高四盏。低四盏闪烁2次 0x33,0xCC,0x33,0xCC,0x33,0xCC,0xFF//隔两盏闪烁3次 }; void delayms(uint ms) { uint i; while(ms--) { for(i=0;i<120;i++); } } void main(void) { uchar i; P0=0xFF;

while(1) { for(i=0;i<35;i++) { P0=discode[i]; delayms(250); } } } 3拉幕式与闭幕式广告灯 #include #define uint unsigned int #define uchar unsigned char uchar discode1[4]={0x18,0x24,0x42,0x81}; uchar discode2[4]={0x7E,0x3C,0x18,0x00}; void delayms(uint ms) { uint i; while(ms--) { for(i=0;i<120;i++); } } void main(void) { uchar i,j; P0=0xFF; while(1) { for(i=0;i<4;i++) { j=discode1[i]; P0=~j; delayms(500); } j=0xFF; P0=~j; delayms(500); for(i=0;i<4;i++) { j=discode2[i]; P0=~j;

51单片机实现数码管99秒倒计时

51单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现。 目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全可以做出任意倒计时如10秒倒计时程序。 定时器定时时间计算公式:初值X=M(最大计时)-计数值。 初值,换算成十六进制,高位给TH0,低位给TL0,如果用定时器0的话。 M(最大计时)如果是16位的,就是2的16次方,最大定时,65535 微秒,实现1秒定时,可以通过定时10毫秒,然后100次改变一次秒值即可。10*100毫秒=1S 计数值:你要定时多长时间,如果定时1毫秒,就是1000微秒,(单位为微秒),如果定时10毫秒,就是10000(微秒),当然,最大定时被定时器本身位数限制了,最大2的16次方(16位定时计数器),只能定时65.535毫秒。定时1S当然不可能1S定时器中断。 下面为实现99秒倒计时C语言源程序 /*了解定时器,这样的话,就可以做一些基本的实验了,如定时炸弹~~,10秒后打开关闭继电器*/ /*数码管,12M晶振*/ #include #define uchar unsigned char sbit p11=P1^1; //连的是继电器。。 code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar shiwei; uchar gewei; void delay(unsigned int cnt) { while(--cnt); } void main() { TMOD|=0x01; /*定时器0 16位定时器X=65535-10000(10毫秒)=55535=D8F0(十六进制)定时10ms */ TH0=0xd8; TL0=0xf0; IE=0x82; //这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时

【51单片机】温度传感器DS18B20程序-LCD1602显示

仿真截图: //仿真文件网盘地址: //程序: #include #include #define uchar unsigned char #define uint unsigned int sbit P00 = P0^0; sbit P01 = P0^1; sbit P02 = P0^2; sbit P03 = P0^3; sbit P04 = P0^4; sbit P05 = P0^5; sbit P06 = P0^6; sbit P07 = P0^7; sbit P10 = P1^0; sbit P11 = P1^1; sbit P12 = P1^2; sbit P13 = P1^3; sbit P14 = P1^4;

sbit P15 = P1^5; sbit P16 = P1^6; sbit P17 = P1^7; sbit P20 = P2^0; sbit P21 = P2^1; sbit P22 = P2^2; sbit P23 = P2^3; sbit P24 = P2^4; sbit P25 = P2^5; sbit P26 = P2^6; sbit P27 = P2^7; sbit P30 = P3^0; sbit P31 = P3^1; sbit P32 = P3^2; sbit P33 = P3^3; sbit P34 = P3^4; sbit P35 = P3^5; sbit P36 = P3^6; sbit P37 = P3^7; //****** DS18B20 ****** #define DQ P17 /*************精确延时函数*****************/ void delay10us(void) //误差0us { unsigned char a,b; for(b=1;b>0;b--) for(a=2;a>0;a--); } void delay20us(void) //误差0us { unsigned char a,b; for(b=1;b>0;b--) for(a=7;a>0;a--); } void delay30us() //误差0us { unsigned char a,b; for(b=3;b>0;b--) for(a=3;a>0;a--); }

51单片机定时器使用

51单片机定时器使用——小灯闪烁一、定时器工作方式设置TMOD=0x01 GATE =0 由TR=1控制开始计时; C/ T=0 作为定时时器使用; M1=0\M0=1 用作16位定时器 二、计数寄存器TH0\TL0初始值计算如定时0.02秒 普通51单片机12T模式: (一)手工计算例如晶振为10.6850MHZ 定时20毫秒 X/10.6850*1000000*12=20毫秒 X=17808 原始值T0=Y Y+17808=65536 Y=47728 利用科学计算器进行16进制转换为0Xb800 TH0=0x80 TL0=0x00 (二)单片机公式计算 TL0=T1MS;//初始化定时的计数初值(第8位),高8位丢失 (三)启动定时器(TR0=1),判断是否溢出(If(TF0==1){//}),时间到。 (四)闪烁的小灯代码 #include //P1 0脚接LED小灯 sbit led=P1^0;

//定义延时函数,循环cs次,时间长为20*cs毫秒 void delay20(unsigned int cs) { unsigned int shuL=0; TMOD=0x01; //初始值根据单片机时钟频率计算 TH0=0xB8; TL0=0x00; //启动定时器 TR0=1; while(shuL<=cs) { if(TF0==1) //查询是否溢出,溢出后复位溢出标志,赋初始值,循环计数加。{TF0=0; TH0=0xBA; TL0=0x70; shuL=shuL+1; } } } void main()

{ delay20(500); //小灯取反,亮500*20毫秒,即10秒; led=~led; delay20(500); }

51单片机50个实例代码

51单片机50个例程代码程序里有中断,串口等驱动,直接复制即可使用1-IO输出-点亮1个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.sodocs.net/doc/548509636.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 sbit LED=P1^0;// 用sbit 关键字定义LED到P1.0端口, //LED是自己任意定义且容易记忆的符号 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用bit位对单个端口赋值 LED=1; //将P1.0口赋值1,对外输出高电平 LED=0; //将P1.0口赋值0,对外输出低电平 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 2-IO输出-点亮1个LED灯方法2 /*-----------------------------------------------

名称:IO口高低电平控制 论坛:https://www.sodocs.net/doc/548509636.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用1个字节对单个端口赋值 P1 = 0xFF; //P1口全部为高电平,对应的LED灯全灭掉, //ff换算成二进制是1111 1111 P1 = 0xfe; //P1口的最低位点亮,可以更改数值是其他的灯点亮 //0xfe是16进制,0x开头表示16进制数, //fe换算成二进制是1111 1110 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 3-IO输出-点亮多个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.sodocs.net/doc/548509636.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的多个LED灯

相关主题