气敏传感器信号采集系统设计

气敏传感器信号采集系统设计

摘 要:随着电子领域的快速发展,采用电子设备探测气体引起了人们的广泛关注。由于年龄、经验、环境、身体状况等因素会存在一定的主观性,采用人或者其他动物对瓦斯、有毒气体、酒精、天然气等气体的检测,影响其判断力,而采用电子设备,利用传感器检测气体后经过A/D转换,再由MCU 对其进行处理,能够得知气体浓度,对不良或者超标的检测结果进行报警灯功能,电子检测仪能高效的完成任务。由此被广泛应用于能源化工、环境污染检测、医疗、工业生产和交通等行业。

本文以AT89C51单片机为控制核心,设计了一套气敏传感器信号采集装置。气体采集的传感器采用MJC4/3.0L瓦斯检测传感器;A/D转换模块采用ADC0809将传感器检测到的电压进行数字化传送给MCU 处理;运算放大器采用OP07模块;显示采用LED 数码管,其驱动为MAX7219串行输入/输出共阴显示驱动;电源模块采用的是LM317稳压芯片。

关键词:气敏传感器;AT89C51;A/D转换;数码管显示

Design of Gas Sensor Signal Acquisition system

Abstract :Along with the rapid development of the electronic field, adopting electronic equipment to detect gas has aroused extensive attention. Due to the subjectivity of age, experience, environment, healthy conditions, the detection of gases like gas, toxic gas, alcohol and natural gas practiced by people or animals will affect the accuracy of judgments, while electronic devices like sensors are adopted to detect gases. After the A/D conversion, gases are processed by MCU that can recognize the concentration of gases and show the alarm lamp for adverse or excessive results, so electronic detector can efficiently complete tasks. This method is widely employed in the energy and chemical industry as well as industries of environmental pollution detection, medical treatment, industrial production and transportation.

Taking single chip Microcomputer of AT89C51 as the control core, this paper will design a set of signal collection devices with gas sensors. The sensor used for collecting gases is the gas detection sensor of MJC4/3.0 L; A/D conversion module utilizes ADC0809 to transmit digitized voltage detected by sensors to MCU. Operational amplifier is OP07 module and the display device uses LED digital tube whose display driver is serial input/output common cathode of MAX7219. Power module is LM317 voltage chip.

Key words: Gas sensor; AT89C51; A/D conversion;Digital display

目 录

摘要 . ................................................................................................................................. I Abstract ............................................................................................................................ I I 目 录 . ............................................................................................................................ III

1 引言 . ............................................................................................................................. 1

1.1 选题背景 . ............................................................................................................... 1

1.2 国内外发展现状 . ................................................................................................... 1

1.3 本文设计方案 . ....................................................................................................... 2

2 气敏传感器原理及MCU 选择 .................................................................................. 3

2.1 气敏传感器 . .............................................................................................................. 3

2.2 MJC4/3.0L气体检测传感器 ................................................................................... 3

2.3 MJC4/3.0L气体检测传感器技术指标 ................................................................... 4

2.4 系统MCU 介绍 ......................................................................................................... 4

3 系统硬件电路设计...................................................................................................... 6

3.1 单片机最小系统 . ........................................................................................................ 6

3.2 运算放大电路 . ............................................................................................................ 8

3.3 A/D采样电路 ............................................................................................................ 10

3.4 数码管显示电路及其驱动 . ...................................................................................... 10

3.4.1显示器结构与原理以及显示方式 . ........................................................................ 10

3.4.2 显示驱动器MAX7219 ......................................................................................... 11

3.5 电源模块 . .................................................................................................................. 12

3.6 报警电路 . .................................................................................................................. 14

4 系统软件设计 . ........................................................................................................... 15

5 仿真结果分析 . ........................................................................................................... 17

致 谢 . ............................................................................................................................. 18

参 考 文 献 . ................................................................................................................... 19

附录 A Protues 仿真图 . .............................................................................................. 21

附录 B 系统原理图 . .................................................................................................... 22

附录 C PCB Top Layer .............................................................................................. 23

附录 D PCB Bottom Layer . ....................................................................................... 24

附件 E 系统主要程序 . ................................................................................................ 25

1 引言

1.1 选题背景 天然气主要存藏于地下多岩层的空隙中,包括油田气、气田气、煤层气、泥火山气和生物生成气等,也有少量出产于煤层。天然气是优质的燃料和化工原料。它的主要用途是作为燃料,也可用于制造炭黑、化学制以及生产液化石油气,天然气生产的丙烷、丁烷是现代工业的重要原料。天然气主要由气态低分子烃和非烃气体混合组成。天然气主要成分烷烃,其中甲烷占绝大多数,另有少量的乙烷、丙烷和丁烷,此外一般有硫化氢、二氧化碳、氮和水气和少量一氧化碳及微量的稀有气体,如氦和氩等。天然气在送到最终用户之前,为助于泄漏检测,还要用硫醇、四氢噻吩等来给天然气添加气味。天然气不溶于水,密度为0.7174kg/Nm3,相对密度(水)为约0.45(液化) 燃点(℃) 为650,爆炸极限(V%)为5-15。在标准状况下,甲烷至丁烷以气体状态存在,戊烷以上为液体。甲烷是最短和最轻的烃分子。有机硫化物和(H₂S) 是常见的杂质,在大多数使用天然气的时候都必须预先把杂质去除。

然而在工业应用或者家用的天然气装置因某些因素会发生泄漏,当泄漏的气体达到一定浓度后,遇到明火或者高温,会产生爆炸或者剧烈燃烧,对人身和财产安全造成很大的隐患。因此设计一套电子气体检测装置,有利用解决以上安全隐患问题。

1.2 国内外发展现状

气敏传感器主要用于检测某些环境下气体的成分和浓度,由于检测现场的温度和湿度等各项条件具有很多不确定因素,有时检测的环境比较恶劣,所以对气敏传感器的稳定性、响应速度、敏感度、重复使用性等性能要求很高。不过由于所检测的气体种类具有多样性,而且其物理特性也各不相同,因此不可能采用同一种性能的传感器来检测不同种类的气体,所以气敏传感器的也分很多种类,譬如根据气体之间相互作用时产生不同的变化,可分为表面控制型和体控制型。表面控制型传感器原理是当半导体的表面吸附的气体和半导体之间发生电子交换,由此使半导体的导电率等物理性质发生变化,不过传感器内部的化学成份不会变化;体控制型传感器原理是半导体与气体发生化学反应,使半导体内部成份发生化学变化,从而使导电率发生变化。

从技术发展的角度来看,根据传感器原理及其应用环境的不同,所应用的领域和检测装置结构也有所不同,不过其共同点是多采用了以单片机为控制核心,把传感器采集到的信号转化为电信号,再由A/D转换为数字信号送往单片机进行分析处理。国外在应用半导体和催化原理的气体检测仪器上处于较领先水平,目前国内也相继研制出了能应用多个行业的不同种类的气体检测装置。

随着制造工业的成熟和新材料的研发,传感器的成本也在逐渐降低,这有利于促进电子检测装置的发展。超大规模集成电路技术的不断提升,使得单片机的发展迅猛,由最初的4位、8位字长,发展到现在的16位、32位字长,大大促进了数字化发展进程。在我国,智能化仪器仪表中,单片机以其高性能、低成本、高效率等特点,被广泛使用[1]。

1.3 本文设计方案

针对天然气泄漏的检测装置,传统方式上采用较多的是化学检测方法,比如分光光度计、化学滴定和色谱分析等。但是这些化学检测方法不仅耗费时间和劳动力,且大大降低了检测效率、成本也过高。随着电子设备的快速发展和传感器技术的提升,基于单片机的气体检测装置应运而生,并且在测试精度、范围、稳定性等标准上达到实际应用要求。

本文以AT89C51单片机为控制核心,设计了一套天然气检测装置。系统采用模块化设计方案,主要包括电源、A/D转换、按键、LED 显示、报警等。软件编程是在Keil uVision4环境下,采用C 语言编写。

2 气敏传感器原理及MCU 选择

2.1 气敏传感器

气体传感器是组成气体传感器信号采集系统的核心元器件,其性能在整个系统中起着至关重要的作用。气体传感器就是能够感知被测环境中气体成分的一种敏感行元器件,它将气体的种类及其浓度的相关信息转化为电信号,再根据这些电信号的强弱就可获得与待测气体在环境中存在情况有关的信息,从而可以进行检测、监控、报警,有些气体传感器还能通过接口电路与PC 组成电子自动检测控制、显示检测数据和报警的系统。从本质来说,气体传感器是一种将检测到的某种气体浓度转化成为MCU 和识别信号并进行数据处理转化器。它是对气体做定量和定性检测的必备元器件。

气敏传感器是化学传感器分类汇总一个比较大的门类[2]。从所采用原材料到加工工艺,从工作原理到测量技术,从检测对象到应用领域,都可视为一个独立的分类标准,衍生出一个庞大复杂的分类体系,在分类上目前还没有统一标准。按照气敏传感器采用的材料和气敏传感器特征的不同,可分为半导体、电化学和聚合物气体传感器等类型[3]。

2.2 MJC4/3.0L气体检测传感器

适宜制成半导体气体传感器的材料主要是金属氧化物。图2-1为MJC4/3.0L催化燃烧式气敏传感器的外形结构图。

图2-1 MJC4/3.0L外形结构图

其检测电路如图2-2所示。黑元件是载体催化燃烧式元件,当甲烷气体在元件表面与氧气产生无焰燃烧时,电桥失去平衡,输出一个电压信号,白元件是补偿元件,基本结构和技术参数与黑元件相同,但表面不涂镀催化剂,所以它不掺入低温燃烧。图2-2为MJC4/3.0L传感器电路原理图。

BATTERY

图2-2 MJC4/3.0L传感器电路原理图

2.3 MJC4/3.0L气体检测传感器技术指标

MJC4/3.0L气体检测传感器技术指标如表2-1所示:

表2-1 MJC4/3.0L气体检测传感器技术指标

长期稳定性:在空气中每年漂移小于±2个mV ,在1%CH4中每年漂移小于±2个mV [4]。短期储存(两周内)30分钟即可稳定,如长期储存(一年),则需老化5小时才可稳定[6]。

2.4 系统MCU 介绍

ATMEL 的AT89C51是一种将多功能8位CPU 和闪速存储器组合在单个芯片中的高效微控制器。AT89C051是它的一种精简版本[8]。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案[9]。图2-3系列单片机DIP 封装图

机的引脚完全兼容, 可互换使用。外形及引脚排列如图2-3所示。

给出了双列直插式封装(DIP. Dualln-line Package), DIP 封装与MCS 一51系列单片中北大学信息商务学院2016届毕业设计说明书

图2-3 AT89C51DIP 封装引脚排列

中北大学信息商务学院2016届毕业设计说明书

3 系统硬件电路设计

气敏传感器信号采集系统主要由电源模块、气敏传感器及其适配电路、A/D转换模块、复位电路、显示模块、报警电路等模块组成。

图3-1 系统总设计方案框图

3.1 单片机最小系统

本设计中单片机的最小系统由AT89C51、12M 晶振、两个33pf 电容、10K 电阻、复位开关组成。如图3-2所示。

电路中的晶振即石英晶体震荡器。由于石英晶体震荡器具有非常好的频率稳定性和抗外界干扰的能力,所以石英晶体震荡器可用来对单片机产生基准频率[7]。通过基准频率来控制电路中的频率的准确性。同时,它还可以产生振荡电流,向单片机发出时钟信号。片内电路与片外器件就构成一个时钟产生电路,CPU 的所有操作均在时钟脉冲同步下进行。片内振荡器的振荡频率非常接近晶振频率,一般多在

1.2MHz ~24MHz 之间选取。C1、C2是反馈电容,其值在20pF ~100pF 之间选取。

中北大学信息商务学院2016届毕业设计说明书

本电路选用的电容为33pF ,晶振频率为12MHz [18]。

振荡周期=1/12μs ;

机器周期S m =1μs

指令周期T =1~4μs

XTAL1接外部晶体的一个引脚,XTAL2接外晶体的另一端。在单片机内部,

接至上述振荡器的反相放大器的输出端。采用外部振荡器时,对HMOS 单片机,

该引脚接外部振。在石英晶体的两个管脚加交变电场时,它将会产生一定频率的机械变形,而这种机械振动又会产生交变电场,上述物理现象称为压电效应。一般情况下,无论是机械振动的振幅,还是交变电场的振幅都非常小。但是,当交变电场的频率为某一特定值时,振幅骤然增大,产生共振,称之为压电振荡。这一特定频率就是石英晶体的固有频率,也称谐振频率。石英晶振起振后要能在XTAL2线上输出一个3V 左右的正弦波,以便使片内的OSC 电路按石英晶振相同频率自激振荡。

在上电或复位过程中控制CPU 的复位状态,这段时间内让CPU 保持复位状态,而不是一上电或刚复位完毕就工作,防止CPU 发出错误的指令,执行错误操作,也可以提高电磁兼容性能。无论使用哪种类型的单片机, 总要涉及到单片机复位电路的设计。而单片机复位电路设计的好坏, 直接影响到整个系统工作的可靠性。许多用户在设计完单片机系统, 并在实验室调试成功后, 在现场却出现了“死机”、“程序走飞”等现象, 这主要是单片机的复位电路设计不可靠引起的。

复位后,PC 内容初始化为0000H, 是单片机从0000H 单元开始执行程序。单片机复位后不影响内部RAM 的状态。AT89C51单片机复位信号的输入端是RESET 引脚,高电平有效。其有效时间持续24个时钟周期以上。

单片机RESET 端得外部复位电路有两种操作方式:上电自动复位和按键手动复位。

上电自动复位是利用电容储电来实现的上电瞬间,RC 电路充电,RESET 端出现正脉冲,随着充电电流的减少,RESET 的电位逐渐下降。按键手动复位用电平方式[10]。按键电平复位是相当于RESET 通过电阻接高电平, 复位按键为S6[12]。

第 7 页 共 39 页

3.2 运算放大电路

为OP07芯片内部引脚。

电压范围:±14V ;宽的电源电压范围:±3V-±22V 。 图3-2 AT89C51最小系统 中北大学信息商务学院2016届毕业设计说明书 图3-3 OP07芯片内部引脚 0.2μV/MO;低的输入偏置电流:±1nA ;高的共模抑制比:126dB ;宽的共模输入OP07芯片是一种低噪声,非斩波稳零的双极性运算放大器集成电路[13]。图3-3OP07芯片的特点:低的输入噪声电压幅度:0.35μVP-P (0.1Hz -10Hz);极低的输入失调电压:10μV;极低的输入失调电压温漂:0.2μV/ ℃;具有长期的稳定性:

第 8 页 共 39 页

图3-4 OP07外部接线图

电路分析计算:

由电路可得:

所以由式(1)和式(2)得:

又因为输入共模电压U ic =

们带入式(3)可得: (U i 1+ U i 2)2,输入差模电压U id = U i 1- U i 2,将它

因为从传感器输出得电压信号为0-90mv ,为了取得较大的A/D转换器输入信

第 9 页 共 39 页

号,需要对其放大,取R3=R6=5000Ω,R4= R5=100Ω,放大倍数为51倍。

3.3 A/D采样电路

图3-5 ADC 芯片引脚图

3.4 数码管显示电路及其驱动

3.4.1显示器结构与原理以及显示方式

LED 显示块是由发光二极管显示字段的显示器件[15]。在单片机中通常使用的是7段LED 。当某个发光二极管阴极为低电平时,发光二极管点亮;共阴极LED 显示块的发光二极管阴极共地[17]。当某个发光二极管的阳极为高电平时,发光二极管点亮,共阴和共阳电路如图3-6所示。

第 10 页 共 39 页

图3-6 共阴和共阳电路 通常使用的7段显示块有8个二极管组成,故也称8段显示器。其中7个发光二极管构成7笔字型“8”;一个发光二极管构成小数点“.”。7段LED 显示器如图3-7所示。

图3-7 7段LED 显示器

3.4.2 显示驱动器MAX7219

MAX7219能方便的用模拟或数字方法控制段电流的大小,改变显示器的亮度;能对每一位进行译码或不译码控制;能选择驱动显示器的数量;能进入低功耗的关断模式(仅消耗150uA 电流,数据保留) ;而且其最重要的一点是,每个显示位都能个别寻址和刷新,而不需要重写其他的显示位,这使得软件编程十分简单且灵活

[11][19]。MAX7219的引脚排列如图3-8所示。

第 11 页 共 39 页

3.5 电源模块

1. +3V稳压源的设计

+3V电压的实现需要LM317芯片。LM317作为输出电压可变的集成三端稳压块,是一种使用方便、应用广泛的集成稳压块。输出电压范围为1.2V 到37V 之间可调节;内部有热过载保护;不随温度变化的内部短路电流限制;输入至少要比输出高2V ,否则不能调压;输出电流最好不超过1A ;可调整输出电压可低到1.2V 。用LM317实现+3V稳压电源,提供传感器工作电压。其稳压示意图如图3-9所示。

第 12 页 共 39 页

图3-9 LM317稳压示意图

2. +5V稳压源的设计

MAX756可接受一个输入电压低至0.7V ,并将其转换为更高3.3V 或5V 可选的输出电压。典型的全负荷的MAX756效率大于87%。

其关键特性是,输入电压为0.7V ;20mA 的效率为87%;静态电流为60µA ;20µA 的关闭模式;温度误差±1.5%;低电池最检波器 (LBI/LBO);8-Pin SO封装。用MAX756实现+5V的稳压电路如图所示。

图3-10 MAX756稳压电路图

3. -5V稳压源的设计

该稳压电源的设计采用芯片ICL7660来实现。LCL7660有8个引脚。其中的NC 是空脚;CAP+是储能电容正极;CAP-是储能电容负极;LV 是输入低电压控制

第 13 页 共 39 页

端,输入电压低于3.5V 时,该脚接地,输入电压高于5V 时该脚必须悬空;OSC 是作时钟输入端。采用ICL7660芯片实现-5V 稳压电源的电路如图所示。

图3-11 ICL7660稳压电路

3.6 报警电路

报警信号由单片机的P1.5口发出指令,经由光电隔离器,警告指示灯D2会亮,此时喇叭会发出警告声音。图3-12为报警电路示意图。

图3-12 报警电路

第 14 页 共 39 页

4 系统软件设计

第 15 页 共 39 页

第 16 页 共 39 页

5 仿真结果分析

系统的仿真是在Protues 软件上搭建,仿真软件编程在Keil 上编写,通过在Keli 上编译源程序生产HEX 格式文件。由Protues 于Keil 进行联和调试,最终实现仿真。其仿真过程分析如下:当气敏传感器检测到气体含量超标后,经由ADC0809模数转换,将电信号转换为单片机可识别的数字信号,由单片机进行处理,会在LED 数码管上显示当前的气体浓度,如果气体浓度超过设定浓度值时,系统的报警电路开始鸣笛提示。图5-1为LED 数码管显示的当前气体浓度为133(设定60为最高警戒值),此时已经超过预定值,报警电路工作,报警电路如图2-1所示。

图4-1 数码管显示当前气体浓度

图4-2 报警电路仿真图

致 谢

本论文是在岳凤英老师的悉心指导下完成的。从课题开始,岳老师以严谨的学术态度,孜孜不倦的求实精神使我受益匪浅。岳老师以优秀的学术底蕴,平易近人的人格魅力,在我写论文器件给予了无微不至的关怀与指导,耐心帮助我解答疑问,直至论文的完成。

当选定气敏传感器信号采集系统设计这个课题时,因为自身知识的局限性,我从茫然到熟悉了解,再到学习单片机的知识,设计硬件电路,学习使用Altium Designer 软件画原理图、PCB ,器件遇到了不少的困难,不过最终在岳老师和其他同学的帮助下得到解决。在学习C 语言编程过程中使我深刻意识到掌握一门嵌入式语言的重要性。通过这个课题的锻炼,不仅巩固了我本科学习的知识,还让我学会了为人处世的很多道理,磨练了我的意识,也增强了自主学习能力。

同时还要感谢帮助过我的同学,是你们的鼓舞与支持,让我能够顺利完成毕业设计,祝愿你们前程似锦。

在此完成之际,向岳老师致以崇高的敬意,向帮助过我的人表示由衷的感激。同时也感谢在百忙之中阅读和参加答辩的各位专家、教授!真诚的祝愿你们工作愉快、身体健康!

参 考 文 献

[1] 甲烷检测气体检测仪:国内外研究现状,http://www/ennix.net. [2] 刘迎春等. 传感器原理设计及应用[M].长沙:国防科技大学出版社,2009. [3] 孟立凡, 郑宾. 传感器原理及技术[M].北京:国防工业出版社.2004. [4] 陈锦荣. 传感器设计原理[M].南京:南京理工大学出版社.2005.

[5] 楼然苗,51系列单片机设计实例[M].北京:航空航天大学出版社,2005. [5] 于成波,传感器与自动检测技术[M].北京:高等教育出版社,2009. [9] 李朝青,单片机原理及接口技术[M].北京:航空航天大学出版社,2010. [11] 周润景等. 单片机电路设计、分析与制作[M].北京:机械工业出版社,2010.

[12] 刘奎学,陈丽华等. 智能型天然气检测装置的研究[J].电子测量与仪器学报2002增

刊.2002:177-180.

[13] 赫晓剑,杨述平等. 仪器电路设计与应用[M].北京:电子工业出版社,2007. [14] 郭天祥.51单片机C 语言教程M].北京:电子工业出版社,2009.

[15] 彭伟. 单片机C 语言程序设计实训100例-基于8051+Protues仿真[M].北京:电子工业出

版社,2008.

[16] Collier W A,Baird D B,Park —Ng Z A.Discrimination among milks and cultured dairy

products using screen —printed electrochemical arrays and an electronic nose .Sensorsand Actuators ,2003,92(1-2):232—239.

[17] Akrajas ,Muhamad Mat Salleh,Muhammad Yahaym Enriching the selectivity

Of metal loporphyrins chemical sensors by means of optical technique .Sensors and Actuators ,2002,85(3):191—196.

[18] 徐伟.51单片机综合学习系统--数码管原理与应用篇[J].电子制作,2007(1):26-27 [19] 张立科.单片机典型外围器件及应用实例[M].北京:人民邮电出版社,2007. [20] 张毅刚.单片机原理及应用[M].北京:高等教育出版社,2004.

[21] 彭爱华. 单片机高级语言C51应用程序设计[M].北京:北京工业出版社,2009. [22] 冯育长等. 单片机系统设计与实例分析[M]西安:西安电子科技大学出版社,2007

学院2016届毕业设计说明书

[M].北京:清华大学出版社,2002. 北京:机械工业出版社,2007.

中北大学信息商务[23] 吴金戌等.8051单片机实践与应用[24] 李念强等. 单片机原理及应用[M].

附录 A Protues仿真图

中北大学信息商务学院2016届毕业设计说明书

附录 B 系统原理图

中北大学信息商务学院2016届毕业设计说明书

附录 C PCB Top Layer

中北大学信息商务学院2016届毕业设计说明书

附录 D PCB Bottom Layer

中北大学信息商务学院2016届毕业设计说明书

附件 E 系统主要程序

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

** 程序:可燃性气体报警器

** 课题名称: 气敏传感器信号采集系统设计 ** 功能描述: 本设计主程序 ** 输 入: ** 内容: ** 输 出: ** 全局变量: ** 调用模块: ** 作 者: 何 强 ** 日 期: 2016.05.12

*******************************************************/ #include // 引用标准库的头文件 #include #include

#define uchar unsigned char #define uint unsigned int

sbit DIN = P2^0; // 串行数据输入 sbit CLK = P2^1; // 串行时钟 sbit LOAD = P2^2; // 显示数据锁存控制 sbit SOUND = P1^5; //用来进行蜂鸣器的报警 sbit ST=P3^6; //启动信号

sbit EOC=P3^3; //转换结束信号连到外部中断1口,转换结束后进入外中断 sbit OE=P3^7; //输出使能 #define NoOp 0x00 // 空操作寄存器 #define Digit0 0x01 // 数码管1寄存器 #define Digit1 0x02 // 数码管2寄存器

#define Digit2 0x03 // 数码管3寄存器 #define Digit3 0x04 // 数码管4寄存器 #define Digit4 0x05 // 数码管5寄存器 #define Digit5 0x06 // 数码管6寄存器 #define Digit6 0x07 // 数码管7寄存器 #define Digit7 0x08 // 数码管8寄存器 #define DecodeMode 0x09 // 译码模式寄存器 #define Intensity 0x0a // 亮度寄存器 #define ScanLimit 0x0b // 扫描位数寄存器 #define ShutDown 0x0c // 低功耗模式寄存器 //#define DisplayTest 0x0f // 显示测试寄存器 #define ShutdownMode 0x00 // 低功耗方式 #define NormalOperation 0x01 // 正常操作方式

#define ScanDigit 0x07 // 扫描位数设置,显示8位数码管 #define DecodeDigit 0xff // 译码设置,8位均为BCD 码 #define CommonDigit 0x00 // 译码设置,8位均为非译码方式 #define IntensityGrade 0x0a // 亮度级别设置 #define TestMode 0x01 // 显示测试模式

#define TextEnd 0x00 // 显示测试结束,恢复正常工作模式 float result; //AD采样采得的数据

uchar MAX,MIN; //报警极的最低值和不报警的最大值 uint f;

/********************************************************************** ** 函数名称: SendChar

** 功能描述: 向MAX7219写入字节(8位) ** 输 入: ch :要送入的数据 ** 输 出: ** 全局变量:

** 调用模块: 延时函数_nop_

***********************************************************************/ void SendChar(uchar ch)

{

uchar i,temp;

_nop_(); //短暂的延时

for (i=0;i

{

temp=ch&0x80;

ch=ch

if(temp) //当该位为1时写入

{

DIN=1;

CLK=0;

CLK=1;

}

else //当该位为0时写入

{

DIN=0;

CLK=0;

CLK=1;

}

}

}

/*********************************************************************** ** 函数名称: changestyle

** 功能描述: 译码功能,将需要显示的数字转成相应的七段译码表

如要显示的字符为“0”,则为7e ---0111 1111,只有中间的一个LED 不亮 ** 输 入: p:要转换的数据

** 输 出:

** 全局变量:

** 调用模块:

***********************************************************************/ uchar changestyle(uint p)

{

uchar c;

if(p==0) c = 0x7e;

if(p==1) c = 0x30;

if(p==2) c = 0x6d;

if(p==3) c = 0x79;

if(p==4) c = 0x33;

if(p==5) c = 0x5b;

if(p==6) c = 0x5f;

if(p==7) c = 0x70;

if(p==8) c = 0x7f;

if(p==9) c = 0x7b;

return(c);

}

/*********************************************************************** ** 函数名称: delay(ms)

** 功能描述: 译码功能,将需要显示的数字转成相应的七段译码表

如要显示的字符为“0”,则为7e ---0111 1111,就中间的一个LED 不亮 ** 输 入: ms:需要延时的长度

**

** 输 出:

** 全局变量:

** 调用模块:

***********************************************************************/ void delayms(uint ms)

{

uchar i;

while(ms--) for(i=0;i

}

/*********************************************************************** ** 函数名称: WriteWord

** 功能描述: 向MAX7219写入字(16位)

** 输 入: addr:需要延时的长度

** 输 出:

** 全局变量:

** 调用模块:

***********************************************************************/ /* 向MAX7219写入字(16位)*/

void WriteWord (uchar addr,uchar num)

{

LOAD=0;

_nop_();

SendChar(addr);

_nop_();

SendChar(num);

_nop_();

LOAD=1; // 锁存进相应寄存器

}

/* MAX7219初始化 */

void InitDisplay ()

{

WriteWord (ScanLimit,ScanDigit); // 设置扫描界限

WriteWord (DecodeMode,CommonDigit); // 设置译码模式为非译码模式 WriteWord (ShutDown,NormalOperation); // 设置为正常工作模式

}

/*********************************************************************** ** 函数名称: show

** 功能描述: 显示函数,其中Fdata 为状态为第一位,Sdata 状态为第二位,Tdata 为状态为第三位。

Fdata为状态为第四位。degdata 为显示的具体数值degdata 为4位 ** 输 入: Fdata Sdata Ddata Hdata

** 输 出:

** 全局变量:

** 调用模块:

***********************************************************************/ void show(float degdata,uint Fdata,Sdata,Ddata,Hdata)

{

uint a,b,c,d; //a为10位值,b 为个位值,c 为小数点后1位值,d 为小数点后2位值,e 为临时数据

InitDisplay (); // MAX7219初始化

_nop_(); //延时一小会

a=degdata/10;

b=(degdata-a*10)/1;

c=(degdata-a*10-b)*10;

d=(degdata-a*10-b-c*0.1)*100;

a=changestyle(a);

b=changestyle(b);

c=changestyle(c);

d=changestyle(d);

b=b|0x80;

WriteWord(Digit0,a);

WriteWord(Digit1,b);

WriteWord(Digit2,c);

WriteWord(Digit3,d);

WriteWord(Digit4,Fdata);

WriteWord(Digit5,Sdata);

WriteWord(Digit6,Ddata);

WriteWord(Digit7,Hdata);

}

/*********************************************************************** ** 函数名称: KEY

** 功能描述: 按键检测程序,实现检测标准的修改

** 输 入:

** 输 出: MAX , MIN

** 全局变量:

** 调用模块:

***********************************************************************/ void KEY()

{

if(P0&0X01)

{

EA = 0;

delayms(30);

if(P0&0X01)

{

MAX ++;

}

EA = 1;

}

else if(P0&0X02)

{

EA = 0;

delayms(30);

if(P0&0X02)

{

MAX--;

}

EA = 1;

}

else if(P0&0X04)

{

delayms(30);

if(P0&0X04)

{

MIN++;

}

}

else if(P0&0X08)

{ EA = 0;

delayms(30);

if(P0&0X08)

{

MIN--;

}

EA = 1;

}

}

/*********************************************************************** ** 函数名称: shutshow

** 功能描述: 用来熄灭所有的数码管

** 输 入:

** 输 出:

** 全局变量:

** 调用模块:

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

void shutshow() //数码管不显示函数

{

WriteWord(0x0c,0x00); //向低功耗模式寄存器(地址为0X0c )写入全1值

//(上电状态)用来熄灭显示器

}

main()

{

TMOD=0x02; //T1工作模式2

TH0=0x14; //定时器初始值高位

TL0=0x00;

IE=0x82; //IE.7位为1表示CPU 开放中断,IE.1位也为1,

//表示允许定时器T0溢出中断

TR0=1; //使能定时器

P1=0x00; //选择ADC0809的通道1(000)(P1.0~P1.2) // IT1=0;

//低电平触发

IT1=1; //下降沿触发

EX1=1; //使能外部中断1

EA=1; //允许全局中断

WriteWord(0x0f,0x00); //退出测试模式

WriteWord(0x0a,0x03); //调解亮度,16级可选择,用于设置LED 的显示亮度,

//从0xX0~0xXF

delayms(1000);

show(88.89,0x01,0x01,0x01,0x01);

delayms(1000);

while(1)

{

ST=0;ST=1;ST=0; //启动A/D转换

while(EOC==0); //等待转换完成

OE=1;

if(f==1)

{

delayms(1000); // 延时1s

if(result > MAX) SOUND = 0; //这里的60是设定的报警极限值,

//当超过该值时开始报警

if(result

show(result,0x01,0x01,0x01,0x01); //显示ad 转换后的电压值

delayms(1000);

}

else

{

show(0x01,0x01,0x01,0x01,55.55); //如果初始化未成功则显示55.55 }

//Display_Result(P3);

OE=0;

KEY();

}

}

/*********************************************************************** ** 函数名称: counter1

** 功能描述: 当数据采集完毕,出发单片机的外部中断进行数据的存储显示以及报警 ** 输 入:

** 输 出:

** 全局变量:

** 调用模块:

*******************************************************************/ void counter1(void) interrupt 2 using 2

{

EX1=0;

result = P0;

EX1=1;

}


© 2024 实用范文网 | 联系我们: webmaster# 6400.net.cn