单片机MAX7219驱动显示的温度控制报警系统设计.docx

上传人:b****9 文档编号:26004993 上传时间:2023-06-17 格式:DOCX 页数:29 大小:648.93KB
下载 相关 举报
单片机MAX7219驱动显示的温度控制报警系统设计.docx_第1页
第1页 / 共29页
单片机MAX7219驱动显示的温度控制报警系统设计.docx_第2页
第2页 / 共29页
单片机MAX7219驱动显示的温度控制报警系统设计.docx_第3页
第3页 / 共29页
单片机MAX7219驱动显示的温度控制报警系统设计.docx_第4页
第4页 / 共29页
单片机MAX7219驱动显示的温度控制报警系统设计.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

单片机MAX7219驱动显示的温度控制报警系统设计.docx

《单片机MAX7219驱动显示的温度控制报警系统设计.docx》由会员分享,可在线阅读,更多相关《单片机MAX7219驱动显示的温度控制报警系统设计.docx(29页珍藏版)》请在冰豆网上搜索。

单片机MAX7219驱动显示的温度控制报警系统设计.docx

单片机MAX7219驱动显示的温度控制报警系统设计

 

摘要

本系统为基于单片机芯AT89C51的温度控制报警系统,能够测量0~100°的温度值,采用四位液晶显示测量数值。

系统主要由51单片机最小系统、A/D转换电路、模拟量输入电路、数码管驱动电路、数码管显示电路以及温度报警电路这几部分组成。

单片机最小系统设计采用AT89C51单片机作为主控芯片,配以RC上电复位电路和12MHz震荡电路;本次设计功能简单,利用可调电阻RV1代替温度传感器AD590,利用ADC0808模数转换芯片转换温度测量值;为使系统更加稳定、简洁,采用MAX7219驱动数码管LED显示。

本文对测控系统的硬件、软件的组成进行了分项、模块化逐步分析设计,通过硬件与软件的相结合,完成了本次系统设计的功能与参数。

 

关键字:

单片机、MAX7219、温度控制、ADC0808

目录

摘要-2-

关键字:

-2-

目录-3-

1系统方案-4-

1.1设计目的-4-

1.2设计任务与要求-4-

1.3设计原理与分析-4-

2系统理论分析与计算-5-

2.1设计芯片选择及功能简介-5-

2.1.1AT89C51简介-5-

2.1.2AT89C51的主要特性-6-

2.1.3AT89C51引脚功能-6-

2.2.1ADC0808功能介绍-8-

2.2.2ADC0808的内部逻辑结构-8-

2.2.3ADC0808引脚结构-9-

2.3.1MAX7219功能介绍-10-

2.3.2MAX7219各引脚的功能-12-

2.3.3MAX7219内部的寄存器-12-

2.3.4MAX7219读写时序说明-14-

3电路与程序设计-15-

3.1电路的设计-15-

3.1.1系统总体框图-15-

3.1.2单片机最小系统电路原理图-16-

3.1.3ADC0808模数转换系统电路原理图-17-

3.1.3MAX7219显示系统电路原理图-17-

3.1.4报警系统电路原理图-18-

3.2程序的设计-18-

3.2.1程序功能描述与设计思路-18-

3.2.2程序流程图-18-

4测试方案与测试结果-20-

4.1测试方案-20-

4.2测试条件与仪器-20-

4.3测试结果及分析-20-

4.3.1测试结果(数据)-20-

4.3.2测试分析与结论-20-

参考文献-21-

附录1:

电路原理图-22-

附录2:

电路源程序-23-

1系统方案

本统主要由51单片机最小系统模块、A/D转换模块、数码管驱动模块、数码管显示模块以及温度报警模块这几部分组成。

1.1设计目的

1、利用51单片机实现家庭温度控制与报警系统的仿真与设计,加深对单片机的理性认识,通过实践操作提高我们的动手能力以及理论联系实际的能力。

2、熟悉ADC0808模/数转换器的工作原理,及其与单片机的接口方法和驱动程序设计。

3、熟悉MAX7219的工作原理,与单片机的接口设计,以及驱动数码管的程序设计方法。

4、熟悉AD590的工作原理以及ADC0808的接口与驱动程序的设计。

掌握温度控制报警系统的设计方法,提高单片机应用系统的设计和调试能力。

1.2设计任务与要求

利用AD590温度传感器的功能,将测得的数值通过ADC0808模/数转换器完成模/数转换;采用MAX7219完成数码管的驱动;用51单片机进行数据处理最终将所测电压值通过数码管完成显示;当温度低于30°、高于60°时,发出报警信号,温度测量范围在0—100°。

1.3设计原理与分析

1、当ADC0808完成数/模转换完由AD590发出的模拟信号后发出EOC信号通知单片机接收转换后的数字信号,并且进行数据处理和驱动MAX7219去驱动数码管完成显示功能。

2、ADC080用到模拟通道1,启动START信息号线与P3^3连接,OE线与P3^1连接,EOC与P3^2连接,CLOCK时钟输入端与P3^4连接。

3、通过单片机的控制,对AD590进行实时监控,当超出设定的温度值后,发出报警信号。

2系统理论分析与计算

2.1设计芯片选择及功能简介

2.1.1AT89C51简介

  AT89C51是一种带4K字节FammableandErasableReadOnlyMemory)的低电压、高性LASH存储器(FPEROM—FlashProgr能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除1000次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

外形及引脚排列如图所示AT89C51外形及引脚排列

图2.1AT89C51的引脚结构

2.1.2AT89C51的主要特性

1、与MCS-51兼容。

2、4K字节可编程FLASH存储器。

3、寿命:

1000写/擦循环。

4、数据保留时间:

10年。

5、全静态工作:

0Hz-24MHz。

6、三级程序存储器锁定。

7、128×8位内部RAM。

8、2可编程I/O线。

9、两个16位定时器/计数器。

10、5个中断源。

11、可编程串行通道。

12、低功耗的闲置和掉电模式。

13、片内振荡器和时钟电路。

2.1.3AT89C51引脚功能

VCC:

供电电压。

  GND:

接地。

  P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P0口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。

  P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为低八位地址接收。

  P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

  P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

  P3口也可作为AT89C51的一些特殊功能口,如下表所示:

  口管脚备选功能

  P3.0RXD(串行输入口)

  P3.1TXD(串行输出口)

  P3.2/INT0(外部中断0)

  P3.3/INT1(外部中断1)

  P3.4T0(记时器0外部输入)

  P3.5T1(记时器1外部输入)

  P3.6/WR(外部数据存储器写选通)

  P3.7/RD(外部数据存储器读选通)

  P3口同时为闪烁编程和编程校验接收一些控制信号。

  RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

  ALE/PROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:

每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

  /PSEN:

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

  /EA/VPP:

当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

  XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

  XTAL2:

来自反向振荡器的输出。

  振荡器特性:

  XTAL1和XTAL2分别为反向放大器的输入和输出。

该反向放大器可以配置为片内振荡器。

石晶振荡和陶瓷振荡均可采用。

如采用外部时钟源驱动器件,XTAL2应不接。

有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

芯片擦除:

整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。

在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。

此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。

在闲置模式下,CPU停止工作。

但RAM,定时器,计数器,串口和中断系统仍在工作。

在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。

2.2.1ADC0808功能介绍

ADC0808是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。

它是逐次逼近式A/D转换器,可以和单片机直接接口。

2.2.2ADC0808的内部逻辑结构

图2.2ADC0808的内部逻辑结构

上图可知,ADC0808由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。

多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。

三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。

2.2.3ADC0808引脚结构

图2.3ADC0808引脚结构图

IN0-IN7:

8条模拟量输入通道

ADC0808对输入模拟量要求:

信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。

地址输入和控制线:

4条。

ALE为地址锁存允许输入线,高电平有效。

当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。

A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。

通道选择表如下表所示。

表2.1地址输入线的通道选择

C

B

A

选择的通道

0

0

0

IN0

0

0

1

IN1

0

1

0

IN2

0

1

1

IN3

1

0

0

IN4

1

0

1

IN5

1

1

0

IN6

1

1

1

IN7

表2.1地址输入线的通道选择

数字量输出及控制线:

11条。

ST为转换启动信号。

当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。

EOC为转换结束信号。

当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。

OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。

OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。

D7-D0为数字量输出线。

CLK为时钟输入信号线。

因ADC0808的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,VREF(+),VREF(-)为参考电压输入。

ADC0808应用说明:

(1)ADC0808内部带有输出锁存器,可以与AT89S51单片机直接相连。

(2)初始化时,使ST和OE信号全为低电平。

(3)送要转换的哪一通道的地址到A,B,C端口上。

(4)在ST端给出一个至少有100ns宽的正脉冲信号。

(5)是否转换完毕,我们根据EOC信号来判断。

(6)当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机。

2.3.1MAX7219功能介绍

MAX7219是MAXIM公司生产的串行输入/输出共阴极数码管显示驱动芯片,一片MAX7219可驱动8个7段(包括小数点共8段)数字LED、LED条线图形显示器、或64个分立的LED发光二级管。

该芯片具有10MHz传输率的三线串行接口可与任何微处理器相连,只需一个外接电阻即可设置所有LED的段电流。

它的操作很简单,MCU只需通过模拟SPI三线接口就可以将相关的指令写入MAX7219的内部指令和数据寄存器,同时它还允许用户选择多种译码方式和译码位。

此外它还支持多片7219串联方式,这样MCU就可以通过3根线(即串行数据线、串行时钟线和芯片选通线)控制更多的数码管显示。

MAX7219的外部引脚分配如图2.4所示及内部结构如图2.5所示。

图2.4  MAX7219的外部引脚分配

 

图2 .5MAX7219的内部引脚分配

2.3.2MAX7219各引脚的功能

DIN:

串行数据输入端;

DOUT:

串行数据输出端,用于级连扩展;

LOAD:

装载数据输入;

CLK:

串行时钟输入;

DIG0~DIG7:

8位LED位选线,从共阴极LED中吸入电流;

SEGA~SEGG、DP  7段驱动和小数点驱动;

ISET:

 通过一个10k电阻和Vcc相连,设置段电流。

2.3.3MAX7219内部的寄存器

如图2.6:

主要有译码控制寄存器、亮度控制寄存器、扫描界限寄存器、关断模式寄存器、测试控制寄存器。

编程时只有正确操作这些寄存器,MAX7219才能工作。

 

图2.6 MAX7219内部的相关寄存器

 

分别介绍如下:

(1)译码控制寄存器(X9H)

如图2.7所示,MAX7219有两种译码方式:

B译码方式和不译码方式。

当选择不译码时,8个数据为分别一一对应7个段和小数点位;B译码方式是BCD译码,直接送数据就可以显示。

实际应用中可以按位设置选择B译码或是不译码方式。

图2.7 MAX7219的译码控制寄存器

(2)扫描界限寄存器(XBH)

如图2.8所示,此寄存器用于设置显示的LED的个数(1~8),比如当设置为0xX4时,LED0~5显示。

 

图2.8  MAX7219的扫描界限控制寄存器

 

(3)亮度控制寄存器(XAH)

共有16级可选择,用于设置LED的显示亮度,从0xX0~0xXF

(4)关断模式寄存器(XCH)

共有两种模式选择:

关断状态(最低位D0=0)、正常工作状态(D0=1)。

(5)显示测试寄存器(XFH)

用于设置LED是测试状态还是正常工作状态,当测试状态时(最低位D0=1)各位显示全亮,正常工作状态(D0=0)。

各寄存器具体操作见驱动程序详解。

 2.3.4MAX7219读写时序说明

MAX7129是SPI总线驱动方式。

它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。

要想与MAX7129通信,首先要先了解MAX7129的控制字。

MAX7129的控制字格式如图2.9

图2.9  控制字(即地址及命令字节)

 

如图,工作时,MAX7219规定一次接收16位数据,在接收的16位数据中:

D15~D12可以与操作无关,可以任意写入,D11~D8决定所选通的内部寄存器地址,D7~D0为待显示数据或是初始化控制字。

在CLK脉冲作用下,DIN的数据以串行方式依次移入内部16位寄存器,然后在一个LOAD上升沿作用下,锁存到内部的寄存器中。

注意在接收时,先接收最高位D16,最后是D0,因此,在程序发送时必须先送高位数据,在循环移位。

工作时序图见图2.10。

由于51是8位单片机故需要分两次来送数据。

具体操作见驱动程序详解。

图2.10 数据读写时序

3电路与程序设计

3.1电路的设计

3.1.1系统总体框图

本统主要由51单片机最小系统模块、A/D转换模块、数码管驱动模块、数码管显示模块以及温度报警模块这几部分组成,系统框图所示如下:

图3.1 系统总体方框图

3.1.2单片机最小系统电路原理图

图3.2 单片机最小系统电路原理图

3.1.3ADC0808模数转换系统电路原理图

图3.3 ADC0808模数转换系统电路原理图

3.1.3MAX7219显示系统电路原理图

图3.4 MAX7219显示系统电路原理图

3.1.4报警系统电路原理图

图3.5 报警系统电路原理图

3.2程序的设计

3.2.1程序功能描述与设计思路

1、程序功能描述

根据题目要求软件部分主要实现ADC数据转换、与显示。

1)ADC数据转换功能:

8位数据的采集。

2)显示:

通过MAX7219驱动程序驱动数码管显示。

2、程序设计思路

首先初始化MAX7219,然后初始化定时器,并打开定时器,为ADC0808提供时钟。

最后开始ADC的转换,通过转换的值,检测是否报警,并送到MAX7219驱动LED显示。

3.2.2程序流程图

1、主程序流程图

图3.6 主程序流程图

2、MAX7219驱动LED显示子程序流程图

图3.7MAX7219驱动LED显示子程序流程图

4测试方案与测试结果

4.1测试方案

1、硬件测试

经过电路硬件测试,电路工作正常。

2、软件仿真测试

经过Protuse软件仿真,电路工作正常。

3、硬件软件联调

经过软件与硬件共同调试,电路工作正常,满足给定任务的数据。

4.2测试条件与仪器

测试条件:

检查多次,仿真电路结构正确,工作正常,检查无误。

测试仪器:

proteus虚拟毫伏表。

4.3测试结果及分析

4.3.1测试结果(数据)

电压值

0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

5

温度显示

0

9

19

30

40

50

59

70

80

90

100

表4.1

4.3.2测试分析与结论

根据上述测试数据,,由此可以得出以下结论:

1、ADC0808的线性度的较好,不存在非线性转换。

2、ADC0808精度较大,仅8位,只能适用于一般精度不高的场合。

综上所述,本设计达到设计要求。

 

参考文献

[1]张毅刚单片机原理及接口技术人民邮电出版社2008年10月

[2]谭浩强C程序设计(第三版)清华大学出版社2005年7月

[3]华成英模拟电子技术基本教程清华大学出版社2006年2月[5]张永瑞电子测量技术基础(第三版)西安电子科技大学出版社2004年4月

附录1:

电路原理图

附录2:

电路源程序

/***************************************************************

程序功能:

1、实现MAX7219驱动

2、实现ADC0808驱动

3、温度控制及报警

***************************************************************/

#include

/******************定义MAX7219内部寄存器*****************/

#defineDECODE_MODE0x09//译码控制寄存器

#defineINTENSITY0x0A//亮度控制寄存器

#defineSCAN_LIMIT0x0B//扫描界限寄存器

#defineSHUT_DOWN0x0C//关断模式寄存器

#defineDISPLAY_TEST0x0F//测试控制寄存器

/**********************定义端口信号**********************/

sbitDIN=P0^5;//串行数据输入

sbitCS=P0^6;//片选信号

sbitCLK=P0^7;//串行时钟

sbitADC_CLK=P3^4;//ADC时钟

sbitSTART=P3^3;//ADC开始转化

sbitOE=P3^1;//ADC数据输出允许

sbitEOC=P3^2;//转换结束信号

sbitLED1=P3^6;//控制灯1

sbitLED2=P3^7;//控制灯2

sbitSPK=P3^5;//报警开关

/********************函数原型说明**********************/

voidInit_Time();

voidInit_max7219(void);

voidWrite7219(unsignedcharaddress,unsignedchardat);

voidDisplay_Num(unsignedchars);

voiddelay(unsignedlongval);

unsignedcharRead_Adc(void);

voidalarm(temp);

/********************主函数**********************/

voidmain(void)

{unsignedchartemp;

Init_max7219();//初始化MAX7219

Init_Time();//初始化定时器,为ADC0808提供工作时钟

while

(1)

{

Read_Adc();//开始通道1转换

while(EOC);//转换完成

temp=(float)((float)(Read_Adc())/255)*100;

alarm(temp);

Display_Num(temp);//显示电压

}

}

/********************************************************

*函数原型:

voidWrite7219(unsignedcharaddress,unsignedchardat)

*功能:

向指定的MAX7219内部寄存器写入数据

*参数:

address=MAX7219内部寄存器地址

dat=待写入的数据

*****

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 笔试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1