摘 要
本论文介绍了一种基于单片机的简易数字电压表的设计。该设计主要由三个模块组成:A/D转换模块,数据处理模块及显示模块。A/D转换主要由芯片ADC0809来完成,它负责把采集到的模拟量转换为相应的数字量在传送到数据处理模块。数据处理则由芯片STCC52来完成,其负责把ADC0809传送来的数字量经过一定的数据处理,产生相应的显示码送到显示模块进行显示;此外,它还控制着ADC0809芯片工作。
该系统的数字电压表电路简单,所用的元件较少,成本低,且测量精度和可靠性较高。此数字电压表可以测量0-5V的0-7路模拟直流输入电压值,并通过一个
四位一体的7段数码管显示出来。
关键词 单片机;数字电压表;A/D转换;STCC52
I
湖北理工学院 毕业设计(论文)
ABSTRACT
This paper which introduces a kind of simple digital voltmeter is based on single-chip microcontroller design. The circuit of the voltage meter is mainly consisted of three mould pieces: A/D converting mould piece, A/D converting is mainly completed by the ADC0809, it converts the collected analog data into the digital data and transmits the outcome to the manifestation controlling mould piece. Data processing is mainly completed by the STCC52 chip, it processes the data produced by the ADC0809 chip and generates the right manifestation codes, also transmits the codes to the manifestation controlling mould piece. Also, the STCC52 chip controls the ADC0809 chip to work.
The voltmeter features in simple electrical circuit, lower use of elements, low cost, moreover, its measuring precision and reliability. The voltmeter is capable of measuring voltage inputs from zero to seven route ranging from 0 to 5 volt, and displaying the measurements though a digital code tube of 7 pieces of LED.
Keywords Single-chip microcontroller; Digital voltmeter; A/D converter; STCC52
II
湖北理工学院 毕业设计(论文)
目 录
摘要
1 绪论 ............................................................... 1
1.1 研究背景及其意义 ............................................. 1 1.2 该课题研究的主要内容 ......................................... 1 1.3系统总体设计方案的确定 ........................................ 2 2 数据采集显示系统的硬件设计 ......................................... 3
2.1单片机最小系统 ................................................ 3
2.1.1单片机概述 .............................................. 3 2.1.2单片机引脚介绍 .......................................... 3 2.1.3时钟电路 ................................................ 5 2.1.4复位电路 ................................................ 5 2.2数据采集电路 .................................................. 7
2.2.1 ADC0809的介绍 .......................................... 7 2.2.2 ADC0809工作过程 ........................................ 8 2.3显示电路 ..................................................... 10 2.4 按键电路及总体硬件电路的确定 ................................ 11 3 数据采集显示系统的软件设计 ........................................ 13
3.1 系统主程序设计 .............................................. 13 3.2显示子程序设计 ............................................... 15 3.3 按键子程序设计 .............................................. 16 3.4 A/D转换子程序设计 ........................................... 17 4 仿真与制作 ........................................................ 19
4.1 系统的仿真 .................................................. 19
4.1.1 系统原理图的绘制 ....................................... 19 4.1.2 程序调试 ............................................... 21 4.1.3显示结果及误差分析 ..................................... 21 4.2 实物制作 .................................................... 23
III
湖北理工学院 毕业设计(论文)
4.2.1 材料准备 ............................................... 24 4.2.2 制作过程 ............................................... 25 4.3 本系统优化分析 .............................................. 27 总 结 .............................................................. 28 致 谢 .............................................................. 29 参 考 文 献 ......................................................... 30 附录一 .............................................................. 31 附录二 .............................................................. 35
IV
湖北理工学院 毕业设计(论文)
1 绪论
1.1 研究背景及其意义
数据采集显示系统起始于20世纪50年代,随着其不断的应用和发展,受到了人们越来越广泛的关注,尤其是单片机数据采集显示系统技术发展,在各个领域中得到了广泛应用。
上个世纪中后期,微型计算机有了长足的发展,数据采集系统与采集器和各种仪表仪器有了更紧密的联系。为此通过改良后数据采集系统不仅有着优良的性能,更是超越了传统的专用数据采集系统和单纯的自动检测仪表,并获得较快的发展。
尽管现在以微机为核心的可编程数据采集与处理采集技术的发展方向得到了迅速的发展,而且组成一个数据采集系统只需要一块数据采集卡,把它插在微机的扩展槽内并辅以应用软件,就能实现数据采集功能,但这并不会对基于单片机为核心的数据采集系统产生影响。相对于数据采集板卡成本和功能的,单片机具多功能、高效率、高性能、低电压、低功耗、低价格等优点,而双单片机又具有精度较高、转换速度快、能够对多点同时进行采集,因此能够开发出能满足实际应用要求的、电路结构简单的、可靠性高的数据采集系统。这就使得以单片机为核心的数据采集系统在许多领域得到了广泛的应用。
1.2 该课题研究的主要内容
数据采集技术是信息科学的重要分支之一, 它研究信息数据的采集、存储、处理以及控制等问题。它是对传感器信号的测量与处理, 以微型计算机等高技术为基础而形成的一门综合应用技术。数据采集是从若干个对象中获取信号信息的过程。数据采集监测技术越来越成为一门重要的检测技术, 并随着微型计算机技术的普及和快速发展,主要在工农业等场合需要同时监控压力、温度以及压力等领域得到广泛应用。数据采集系统是各个工业控制以及生产中必不可缺的环节之一,并应用该系统的一些相对的单片机系统功能来实现其性能,这是测控系统不可或缺的组成部分,整个性能的优劣将受到数据采集的性能特点直接影响,足可见数据采集系统的重要性。
1
湖北理工学院 毕业设计(论文)
在温度、压力、流量的计算机控制系统中,必须进行数据采集,因此本设计采用MCS-51单片机作为控制器核心设计数据采集显示系统,采集的模拟信号可以是0-5V的8路电压,并在四位LED数码管上轮流显示或者单路显示,测量最小分辨率为0.019V,测量误差约为+-0.02V。具有自动检测功能、零点调整功能、具有抗干扰措施。利用MCS-51系列单片机设计简易数字电压表测量0~5v的8路输入电压值,并在四位LED数码管上轮流显示或单路选择显示。测量误差约为±0.02V。
1.3系统总体设计方案的确定
根据设计要求,可以选择型号为STCC52RC的单片机为系统核心控制器件,A/D转换采用ADC0809实现,各引脚分别与单片机的P1口和P3口相连,电压显示采用4位一体的共阴极LED数码管显示,LED数码管的段码输入由并行端口P0产生,位码输入由并行端口P2低四位产生。
硬件电路设计由6个部分组成: A/D转换电路,STCC52单片机系统,LED显示系统、时钟电路、复位电路以及测量电压输入电路。硬件电路设计框图如图2-1所示。
图1-1 系统总体硬件设计框图
复位电路 时钟电路 STCC52 P1 P3 P0 P2 A/D转换电路 测量电压输入 显示系统
2
湖北理工学院 毕业设计(论文)
2 数据采集显示系统的硬件设计
单片机数据采集显示系统的硬件电路由时钟电路、复位电路、A/D转换器电路、单片机处理系统、及显示控制系统等组成。在各个硬件正确工作的前提下,通过单片机用软件程序的方式控制整个系统有条不紊的工作,从而达到预期的设计目的。
2.1单片机最小系统
2.1.1单片机概述
单片机是一种集成的电路芯片块将各种微处理器和具有随机存取数据能力的数据存储器,以及各种电路集成到一块单片机上,构成一个最小然而很完善的计算机系统。这些电路能在软件的控制下准确快速的完成程序设计者事先规定的任务。总的而言单片机的特点可以归纳为以下几个方面:集成度高、存储容量大、外部扩展能力强、控制功能强、低电压、低功耗、性能价格比高、可靠性高这几个方面。
单片机按内部数据通道的宽度,可分为4位单片机、8位单片机、16位单片机以及32位单片机。它们被应用在不同领域里,8位单片机由于功能强大,被广泛的应用在工业控制、智能接口、仪表仪器等各个领域。8位单片机在中、小规模应用场合仍占主流地位,代表了单片机的主要发展趋势,在应用单片机领域发挥越来越大的作用。随着网络技术、多媒体技术和通讯技术等现代高科技产品不断进入家庭,单片机中的32位系列将是未来单片机发展的主要方向。纵观单片机的发展过程,可以预示单片机的发展趋势:
1.微型单片化 2. 低功耗CMOS 3、与多品种共存
4、可靠性和应用水平越来越高 2.1.2单片机引脚介绍
在本设计中所使用的单片机型号为STCC52,该单片机是一种具有8K可编程并具有可擦除功能Flash存储器,并具有低功耗和功能强大的微控制器芯片。STC公司生产的51系列单片机中主要具有以下标准功能: 4k、8k、16k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,
3
湖北理工学院 毕业设计(论文)
一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,STCC52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。其引脚图,如图2-1所示
图2-1 STCC52引脚图
由上图可以,此型号的单片机继承了传统的80C51一切功能和引脚外观,它一共有40个引脚,引脚又分为四类,其中有四个电源引脚,用来接入单片机的工作电源,工作电源又分主电源、备用电源和编程电源;还有两个时钟引脚XTAL1、XTAL2;还有由P0口、P1口、P2口、P3口的所有引脚构成的单片机的输入/输出(I\\O)引脚;最后一种是控制引脚,控制引脚有四条,部分引脚具有复位功能。
综上所述,单片机的引脚特点是:
1.单片机多功能,少引脚,使得引脚复用现象较多。
2.单片机具有四种总线形式:P0和P2组成的16位地址地址总线,P0分时复用为8位数据总线;ALE、PSEN、RST、EA和P3口的INT0、INT1、T0、T1、WR、RD以及P1口的T2、T2EX组成控制总线;而P3口的RXD、TXD组成串行通信总线。
在单片机最小系统中,若使单片机能够正常工作,时钟电路和复位电路是必不可少的,因此在设计硬件电路时对系统的时钟电路和复位电路进行合理设计也是非常重要的。
4
湖北理工学院 毕业设计(论文)
2.1.3时钟电路
单片机时钟内部有一个高增益反向放大器,用于构成时钟震荡电路,XTAL1为该放大器的输入端,XTAL2为放大器的输出端,但要形成时钟还需附加其他的电路;因此可以说时钟电路是单片机工作必要条件,时钟方式主要有内部时钟方式和外部时钟方式两种。 (1) 内部时钟方式
利用单片机内部的高增益反相放大器,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路便产生自激振荡。定时元件一般采用石英晶体和电容组成的并联谐振回路。晶体可在1.2~12MHz之间任选,电容可在5~30pF之间选择,电容C1和C2的大小可起频率微调的作用,电容大小要和晶体的容性负载阻抗相匹配,否则不易起振。
(2) 外部时钟方式
外部时钟方式常用于多机系统,以便各个单片机能够同步工作。对外部振荡信号无特殊要求,但需保证脉冲宽度不小于20ns,且频率应低于单片机所支持的最高频率。
由此在设计本系统的时钟电路时,我选择了内部时钟方式,将单片机的XTAL1和XTAL2分别接12M Hz晶振,并选用两片33pf瓷片电容一端接晶振一端接地的方式起频率微调的作用,时钟电路设计如图2-2所示
图2-2时钟电路图
2.1.4复位电路
单片机在启动运行时都需要复位,使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。
MCS-51单片机有一个复位引脚RST,采用施密特触发输入,对于CHMOS单片机,RST引脚的内部有一个低拉电路。当振荡器起振后,只要该引脚上出现2个机器周期以上的高电平时即可确保使器件复位。复位完成后,如果RST端继续保持高电平,
5
湖北理工学院 毕业设计(论文)
单片机就一直处于复位状态,只有RST端恢复低电平后,单片机才能进入其他工作状态。
RST端的外部复位电路有两种复位操作形式:上电自动复位和按键手动复位。 (1)上电自动复位电路
对于HMOS型单片机,只要在RST复位端接一个电容至VCC和一个电阻至VSS(地),就能实现上电自动复位。在加电瞬间,电容通过电阻充电,就在RST端出现一定宽度的高电平,只要高电平时间足够长,就可以使单片机有效复位。RST端在加电时应保持的高电平时间包括VCC的上升时间和振荡器起振的时间。VCC上升时间约为10ms,振荡器起振时间和频率有关。10MHz时约为1ms.1MHz时约为10ms,所以一般为了可靠的复位,RST在上电时应保持20ms以上的高电平。当振荡频率为12MHz时,典型值为C=10Uf,R=8.2K。
(2)按键手动复位
按键手动复位有电平方式和脉冲方式两种。按键电平复位是通过使复位端经电阻与VCC接通而实现的;按键脉冲复位则是利用RC微分电路产生正脉冲来实现的。
考虑到本系统设计并不是很复杂,而且系统工作环境良好,并没有较多的干扰,因此单片机在工作的过程中死机或程序执行出错的可能性几乎不存在,即使程序出错,需要单片机进行复位,断电对系统运行和其他外围设施没有影响,则可以使单片机断电自动复位,综合这些在本设计的电路中采用单片机上电自动复位电路,选用极性电容正极接电源,RST端接极性电容下极板,同时RST与一个8.2k电阻相连,复位电路如下图2-3所示
图2-3复位电路图
结合单片机的特性和上述对时钟电路和复位电路的设计过程,在本课题研究中,单片机作为系统的主控芯片,要完成A/D转换控制信号,数据处理,以及显示模块等功能,最后确定本系统中单片机最小系统如下图2-4所示:
6
湖北理工学院 毕业设计(论文)
图2-4 单片机最小系统
2.2数据采集电路
在我们所测控的信号中均是连续变化的物理量,而要对这些信号进行处理,则需要将其转换为数字量,A/D转换器就是为了将连续变化的模拟量转换成计算机能接受的数字量。
按模拟量转换成数字量的原理可以分为3种:双积分式、逐次逼近式及并行式A/D转换器。而该系统选用的是ADC0809,下面就具体的介绍一下ADC0809的工作原理。
2.2.1 ADC0809的介绍
ADC0809是八通道的八位逐次逼近式A/D转换器,由单一的5V电源供电,片内带有锁存功能的8选1的模拟开关,由C、B、A的编码来决定所选的模拟通道,转换时间为100us,转换误差为1/2LSB;其引脚图见图2-5所示,引脚特性如下所示:
IN7~IN0 :八个通道的模拟输入量。
ADDA、ADDB、ADDC:模拟通道地址线。当CBA=000时,IN0输入,当CBA=111时,IN7输入。
ALE:地址锁存信号。
START:转换启动信号,高电平有效。
D7~D0:数据输出线。三态输出,D7是最高位,D0是最低位。 OE:输出允许信号,高电平有效。
7
湖北理工学院 毕业设计(论文)
CLK:时钟信号,最高频率为 0KHZ。
EOC:转换结束状态信号。上升沿后高电平有效。
图2-5 ADC0809的引脚图
2.2.2 ADC0809工作过程
ADC0809的工作过程是:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中,此地址经译码选通8路模拟输入之一到比较器;START上升沿将逐次逼近寄存器复位,下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行,直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请,当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。ALE为地址锁存允许输入线,高电平有效,当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换,A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入,通道选择表如下表2-1所示。
8
湖北理工学院 毕业设计(论文)
表2-1 通道选择表
C 0 0 0 0 1 1 1 1 B 0 0 1 1 0 0 1 1 A 0 1 0 1 0 1 0 1 选择的通道 IN0 IN1 IN2 IN3 IN4 IN5 IN6 IN7 ST为转换启动信号,当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平,EOC为转换结束信号;当 EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换,OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据,OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态,D7-D0为数字量输出线,VREF(+),VREF(-)为参考电压输入;CLK为时钟输入信号线,因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,在本设计中未采用分频器,而是通过软件来提供时钟信号。
结合ADC0809使用方法的基础上,对A/D转换器硬件电路设计如图2-6所示:
图2-6 ADC0809硬件接线图
从图2-6可以看出本设计的A/D转换电路主要分为两部分,其一为单片机控制ADC0809工作,其二就是ADC0809输入端与产生模拟信号电路连接。本部分的电路设计最大限度的利用了单片机I/O口和内部资源。
9
湖北理工学院 毕业设计(论文)
2.3显示电路
简单的讲,LED数码显示器就是由发光二极管组成的,其内部结构如图2-8(a)所示,LED数码显示器有两种连接方式:
(1)共阴极接法:把发光二极管的阴极连在一起构成公共阴极,使用时公共阴极接地。每个发光二极管的阳极与输入端相连。如图2-8(b)所示
(2)共阳极接法。把发光二极管的阳极连在一起构成公共阳极,使用时公共阳极接+5V,每个发光二极管的阴极通过电阻与输入端相连。如图2-8(c)所示
图2-7 数码管内部原理图
为此本系统显示部分选用的是4位一体共阴极数码管和相应的外围电路来实现。而此类四位一体数码管也可以分为共阳极与共阴极两种,共阳极就是把所有LED的阳极连接到共同接点com,如图2-8中,而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点);共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点),而共阳极数码管和共阴极数码管的管脚对应断码是相同的。
对于这次设计的系统所用的四位一体共阴极数码管作如下说明:在仿真图中所使用的四位一体共阴极数码管很容易识别其各个引脚,但是在实际实物面前如何准确的识别各个引脚也是需要了解的知识。在实际实物面前可通过图2-8的方法来区别各个引脚,首先正向面对数码管,以数码管左上角为第一管脚,按照顺时针顺序排列,则左下角为第12管脚,对应的管脚序号可作如下解释,第1,4,5和7管脚为该数码管从左往右各个数码管的位选端,则第2,6,9,11,12,3,8,10管脚对应的
10
湖北理工学院 毕业设计(论文)
段选端分别为a,b,c,d,e,f,g和dp,值得注意的是四个数码管的相同段选端内部是连在一起的。
图2-8 数码管引脚图
在本设计中只用到一个四位一体共阴极数码管作为主要显示LED,显示电路显示模块需要实时显示当前的通道数和当前测得的电压值, LED显示器的显示控制方式按驱动方式可分成静态显示方式和动态显示方式两种,对于多位LED显示器,通常都是采用动态扫描的方法进行显示,本设计亦是采用动态显示的方式进行扫描显示,第一位显示通道数,后三位显示测得的电压值,具体是从左到右显示范围在0到5v电压,硬件连接方式如图2-9所示:
图2-9显示电路图
2.4 按键电路及总体硬件电路的确定
通过前文对单片机最小系统硬件电路、数据采集电路和系统显示电路的设计完成,接下来就是对按键通道选择电路进行设计,此次设计用到的按键共两个,分别命名为K1和K2,K1按键一段接单片机P2.5口另一端接地,按键K2一端接单片机P2.7口另一端接地,由于此电路较为简单,电路原理图可参见总体硬件原理图2-10所示。自此系统总体电路就全部设计完成,系统总体硬件电路设计见图2-10所示:
11
湖北理工学院 毕业设计(论文)
图2-10 总体硬件电路图
12
湖北理工学院 毕业设计(论文)
3 数据采集显示系统的软件设计
软件的设计的最终目的就是要写出满足要求的程序,但在编写程序前必须理清自己的思路,使用程序流程图可以事半功倍;因此,此次的软件设计首先应绘制软件流程图,程序流程图是人们对解决问题的方法、思路或算法的一种描述。流程图主要有以下优点:1.采用简单规范的符号,画法简单;2.结构清晰,逻辑性强;3.便于描述,容易理解;软件流程图可以简单名了的展现自己的编程思想。然后必须明确自己要实现的目标,根据要求编写相应的子程序,只有做到思路清晰才能又快又好的编写出相应的程序。
3.1 系统主程序设计
在刚上电时,系统默认为只显示当前通道的电压值状态。每当按下K1键后则通道数加一并进行一次测量后显示在四位数码管上,当通道数到达第八路时,下一次按键将自动回到第一通道。若按下K2键时将启动循环显示各路测量结果,每个通道的数据显示时间可由软件调整,主程序在调用显示子程序和转换子程序之间循环,主程序流程图如图3-1所示:
显示子程序 A/D转换子程序 初始化 开始
图3-1主程序流程图
对于主函数C语言编程函数如下所示: void main()
13
湖北理工学院 毕业设计(论文)
{
unsigned char I; //设置变量i xun1=0; ch=0;
//初始化为手动通道选择
//初始化通道数 //无穷循环
while(1)
{ }
display(); //调用显示子函数 keyscan(); //调用按键子函数 if(xun1==1) { ch++; } AD();
//调用A/D转换子函数
if(ch==8)
ch=0;
//检测是否为自动循环
for(i=5;i>0;i--) //自动循环时延时每路显示时间 {
keyscan(); //调用按键子函数
AD();
//调用A/D转换子函数
}
}
对于主函数中须有如下说明,当检测为自动循环显示各通道测量值时用了for语句来延时各路显示的时间,但在这里我加上了按键检测子函数调用,原因是当不加此语句时会出现以下bug,当函数正在执行if语句时,有按键被按下后但不能及时检测出来,从而使按键不准照成失真现象,在此加上此条语句既可以完美解决此问题,可以让程序在手动循环和自动循环之间来回切换自如。
14
湖北理工学院 毕业设计(论文)
3.2显示子程序设计
显示子程序的功能就是在四位数码管上显示当前通道测量的电压值,并采用动态扫描法完成数码管的数值显示。通过ADC0809测量的数据通过硬件电路传人P1口,由程序将数据由从P1传递到P0口,进而通过P2的第四位控制哪个数码管显示。在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为2ms。在本设计中,为了简化硬件设计,主要采用软件定时的方式,通过软件延时程序来实现2ms的延时。为此对显示子函数的程序设计如下所示:
void display() {
char code table[] = { //共阴段码 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, //0~7 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; //8~F
P0 = 0; P2 = 0xfe; P0 = table[ch]; delay(2);//通道号码 P0 = 0; P2 = 0xfd; P0 = table[num / 100] + 128; delay(2);//百位加上小数点
P0 = 0; P2 = 0xfb; P0 = table[num % 100 / 10]; delay(2);//十位 P0 = 0; P2 = 0xf7; P0 = table[num % 10]; delay(2);//个位 P0 = 0; //关闭显示器 }
在显示子函数中可以看出,我在设计的过程中虽用的是动态显示扫描过程,由先送位码让哪个数码管亮,在送段码让改数码管显示什么数字,亮2ms后关闭数码管,即起到消影作用,再进行下轮显示,整个过程并没有应用锁存器,主要原因分析如下:选用的是共阴极四位一体数码管,当断码送高电平,位码送低电平时对应的LED数码管即发光,由于段码由P0口送给,且P0口有上拉电阻的作用故具有驱动LED发光的能力,因此通过这种编程是非常合理的。
15
湖北理工学院 毕业设计(论文)
3.3 按键子程序设计
由于按键的硬件设计采用的是按键的形式,因此在程序设计时只需要分出两个单片机引脚进行控制,按键子函数主要可以分为两部分,第一部分是在循环标志变量xun1==0时,即是此时是手动循环选择通道数,此时按下k1按键,则通道数变量ch自加1,若ch大于等于8时即变为0;当xun1==1时,此时按下k1键不起作用,此时通道选择切换为自动循环状态,若此时检测到按键k2被按下,则xun1变为0,停止自动循环状态,切换到手动选择通道状态,若再次检测到k2键被按下时则再次进入自动循环选择通道的状态,需要注意的是在每次检测按键的时候都要进行消抖动处理和等待按键释放的处理。按键子函数如下所示:
void keyscan() {
if(xun1==0&dan==0) //若处在手动循环检测到k1键按下 { }
if(xun==0) {
delay(2); if(xun==0) {
xun1++;
//xun1自加1
16
delay(2); if(dan==0) {
ch++; }
//延时两毫秒 消抖动
//检测到k1确实被按下
//通道数加1
if(ch==8) //若通道数到达8则取0
ch=0;
while(!dan); //等待按键释放
//检测到按键k2被按下
//延时两毫秒消抖动 //检测到按键k2确实被按下
湖北理工学院 毕业设计(论文)
} }
}
if(xun1>=2) //若xun1大于等于2则取0
xun1=0;
while(!xun); //等待按键释放
3.4 A/D转换子程序设计
A/D转换是本系统设计的核心部分,在已经设计好的硬件电路中能否编写出高效率执行程序是本设计取得成功的关键。由于在本系统中读取数模转换器数值并将其显示出来是单片机执行程序的主要任务,因此在A/D转换器的转换过程中可以调用显示函数,一方面可以让显示数码管显示上一次采集到的电压继续显示,另一方面通过执行显示子函数可以为P3.7口送去时钟频率,为转换器提供时钟频率,中只需要不断的A/D转换子程序流程图,如图3-2所示:
启动一次转换 选择转换通道 开始
A/D转换结束EOC=1? 否 取数据(OE=1) 结束 图3-2 A/D转换子程序流程图
17
湖北理工学院 毕业设计(论文)
由A/D转换子程序流程图可以将AD转换子函数程序编写如下: void AD() {
P3 = ch+0XF8 ; //送给ADC0809 ALE = 1; _nop_(); ALE = 0; //地址锁存
STA = 1;_nop_(); _nop_(); STA = 0; //开始转换,稍候,才可读EOC display(); //显示,既做延时,又输出CLK while(EOC == 0) display(); //等待转换结束
OE=1; //允许单片机P1口读取数据 num = P1; //取出转换结果
num = num * 100 /51; //比例变换:255 --> 500 }
对AD转换子程序可做如下说明:此AD转换子函数编写很简练,在满足数据转换的同时解决了硬件电路没有分频器件的问题,通过在等待转换结束的同时,调用延时子函数,而延时子函数中对转换器的clock引脚不断通过软件方式取非,从而通过此种方法为转换器提供时钟频率,这在AD转换器的使用上是一大创新。在程序的最后通过对数据的转换使输出的数据与电压值相吻合,达到数据处理的要求。
18
湖北理工学院 毕业设计(论文)
4 仿真与制作
4.1 系统的仿真
Proteus是世界上著名的仿真软件,从原理图布图、代码调试到单片机与外围电路协同仿真,尤其是在编译方面,完美支持Keil等多种编译器。在本系统的设计过程中,所有的电路设计和程序调试均是在proteus中进行。具体说来就是在Proteus中绘制单片机最小系统,A/D转换电路,按键电路以及数据显示电路等模块,并通过合理的连接方式将各个模块有机地联系在一起,构成系统总体电路图,通过对硬件电路进行合理分析后在keil软件中应用C语言编程、编译生成hex文件,在将hex文件导入到仿真电路的单片机中进行仿真,通过观察程序执行情况对程序修改,通过反复不断的调试编写出高效率的程序代码,完成设计目的。 4.1.1 系统原理图的绘制
电路原理图的设计与绘制是整个系统设计的基础,任何高质量的程序代码都需要与之相适应的硬件电路为载体才能发挥出其功能,而应用电路原理图的设计与绘制的流程主要包括设置电路图纸、放置元器件、调整元器件的布局、放置导线等步骤。在本次系统设计中主要利用Proteus软件进行系统电路图的设计、绘制以及仿真,下面将着重讲述系统硬件电路的绘制过程。
打开Proteus软件,在原理图编辑窗口绘制电路图。在该界面环境下,有预览窗口和元件列表区,编辑窗口主要用于放置元器件,进行连线,绘制硬件电路图;而预览窗口可以显示全部原理图,在左侧工具箱中,有供使用的工具。
首先要建立设计文件,选择合适的模板,并保存在预先建立好的文件夹中。选择图纸,由于本次设计并不是很复杂,所以选用的是A4图纸,然后就开始在A4图纸中进行硬件电路图的绘制了。利用软件的搜索功能在元件库中找到所需要的各个元件,并放置到图纸中的合适位置,并分别设置好各个元器件的参数,再设置好各个元器件的参数,最后将各个元器件连接起来,这样电路原理图就初步绘制完成了。最后是对所绘制的电路原理图进行检查,如有错误就要作进一步的调整与修改,以保证原理图准确无误,并在绘制原理图结束后,保存电路图文件
根据设计任务书的要求,本系统电路原理图主要包含数单片机最小系统电路、数据采集转换电路,数据显示电路和按键电路四个部分,下面分这四个部分对原理
19
湖北理工学院 毕业设计(论文)
图的绘制进行说明。 (一)单片机最小系统电路
由于Proteus中对单片机元件有对应的仿真模型,所以单片机的电源(VCC和GND)、时钟电路以及复位电路可以绘制出也可以不用绘制,但值得注意的是在单片机的P0口一定要接上拉电阻,由于本系统设计并不是很复杂且为了设计电路的严谨性,因此本系统中将单片机最小系统所需要的硬件条件全部绘制出来,其详细硬件图可参见第2章图2-4。 (二)数据采集转换电路
本部分电路主要以ADC0809为核心进行展开,通过ADC0809将采集到的模拟电压量转换成数字电压量,而本部分电路就是要完成将模拟电压送人AD转换器,通过AD转换器转换后在将数字电压送人单片机中的任务。ADC0809是一个有8路输入的AD转换器,可以根据需要来选择使用的输入通道个数,用ABC三个端口可以控制通道的选择,这里因为需要对八路数据进行采集转换,所以,这里需要使用ADC0809所有的输入通道,为了简化模型将通道0到7分为两组,将0、2、4、6通道的输入口与电压源RV1连接,其它几路则与电压源RV2连接。通道选择端控制端ABC分别用单片机的P3.0,P3.1和P3.2三个端口来控制,转换启动信号START 和地址所存信号ALE都是用单片机的 P3.6和P3.3口连接来控制,允许输出信号OE由P3.4口连接控制,转换结束状态信号EOC与单片机P3.5口连接控制,时钟信号CLK与单片机P3.7口控制,转换结果输出端(OUT0到OUT7)通过总线分别与单片机的P1.7到P1.0口连接。具体连接方式见第2章图2-6所示。 (三)数据显示电路
本部分电路主要由STCC52单片机和一个四位一体的共阴极数码管构成。其中,第一个数码管用来显示当前数据采集来自于哪路通道,后三个数码管用来显示采集到的电压值。单片机的P2.0,P2.1,P2.2,P2.3口分别用来控制四位一体数码管的位选,用P0口来送数码管的段选,具体连接方式可见第2章图2-9所示: (四)按键电路
本系统的按键电路较为简单,知识将两个按键分别与单片机P2.5和P2.7口相连接,具体电路图见第2章图2-10 所示
在绘制完成了所有模块的电路图后,系统的总体电路图也就绘制出来了,总体归纳起来总体电路图由单片机模块,数据转换模块,按键模块和数据显示模块组成,
20
湖北理工学院 毕业设计(论文)
系统总体原理图见第2章图2-10所示:
4.1.2 程序调试
编写完程序后就进入程序调试阶段,调试程序就是验证程序的正确性。程序调试主要有两种方法,即静态调试和动态调试。程序的静态调试就是在程序编写完以后,由人工“代替”“模拟”计算机,对程序进行仔细检查,主要检查程序中的语法规则和逻辑结构的正确性。程序的动态调试就是实际上机调试,它贯穿在编译、连接和运行的整个过程中。根据程序编译、连接和运行时计算机给出的错误信息进行程序调试,这是程序调试中最常用的方法,也是最初步的动态调试。在此基础上,通过“分段隔离”、“设置断点”、“跟踪打印”进行程序的调试。
在本次设计中我同时兼顾程序的静态调试和程序的动态调试。应用单片机C语言编程并在keil编译软件中写程序和编译程序,生产hex文件后导入proteus中进行仿真,通过这种结合方式进行程序调试。具体调试过程如下:首先在keil软件中对程序要实现的某个功能进行编写,完成后进行编译,通过编译解决语法错误以及一些逻辑错误,在没有编译问题后生产相应的hex文件,再在Proteus将生成的hex文件导入到单片机中,在进行实时仿真,通过仿真现象找出所需要实现功能能够实现多少,并通过运行中的现象找出错误所在位置,这里面的错误一般都是逻辑错误,只有通过仿真现象来找错误才是高效的,在调试的过程中需要对实验现象仔细分析后才能得到错误所在,有些错误是很隐秘的需要长时间的不懈努力才能够解决。在实现当前所要实现的功能后进而在程序中编写函数在满足上面调试成功功能的同时加上将要实现的功能语句,这就需要对单片机C语言有较熟练的掌握,在通过上述调试过程将调试出高效率的优质程序。
程序调试是软件设计中最为耗时的过程,在很多情况下,为了寻找一个错误需要好几天的时间。程序调试需要耐心细致的工作作风,本系统正是由于结合Proteus仿真软件才能够快速高效的结束程序调试过程。 4.1.3显示结果及误差分析
程序调试固然枯燥,但完成任务的喜悦更能给人以动力不断去努力解决问题,在经过悉心程序编写和调试后,终于实现了任务书中的各个功能,系统总体仿真图见图4-1所示:
21
湖北理工学院 毕业设计(论文)
图4-1 系统总体仿真图
22
湖北理工学院 毕业设计(论文)
完成系统设计后就是对系统性能进行评估了,在本设计中主要考察指标就是数字电压表的测量精度,因此对自己设计的系统进行误差分析是必不可少的,可以通过仿真测量任一路(以IN0路为例)结果可与“标准”数字电压表对比测试表,如下表4-1所示:
表4-1 测量电压与“标准”数字电压表对比测试表
标准电简易电压表压值/V 测量值/V 0.00 0.00 0.55 0. 1.00 1.00 1.55 1. 2.00 2.00 2.50 2.50 3.10 3.09 3.50 3.50 4.05 4.05 5.00 5.00 绝对误差/V 0.00 0.01 0.00 0.01 0.00 0.00 0.01 0.00 0.00 0.00 可以从上表知,在测量的过程中绝对误差均在-0.01v电压,满足任务书中要求的测量误差在±0.02v范围内,因此本设计满足设计要求。为什么会有0.01v的误差呢?这是因为单片机STCC52为8位处理器,当输入电压为5.00V时,ADC0809输出数据值为255(FFH),因此单片机最高的数值分辨率为0.0196V(5/255)。这就决定了电压表的最高分辨率只能到0.0196V,从上表可看到,测试电压也就在0.01V的幅度变化。这个问题可以通过校正ADC0809的基准电压来解决。该系统设计时直接用5V的供电电源作为电压,所以电压可能有偏差,若当要测量大于5V的电压时,可在输入口使用分压电阻,而程序中只要将计算程序的除数进行调整就可以了。
4.2 实物制作
通过不懈努力自己设计的系统终于在proteus中调试并仿真成功,接下来就是实物制作了,虽然系统并不是很复杂,但之前并没有制作过什么东西,所以这对我来说还是有难度的,同时我也要通过利用这次难得的机会来锻炼自己。我始终相信只有自己肯学肯钻研,才一定会有所收获,也许结果很重要,但最重要的是自己亲自动手尝试的过程。
23
湖北理工学院 毕业设计(论文)
4.2.1 材料准备
系统硬件电路设计完成,程序调试成功,整个系统在Proteus中仿真也达到了设计的要求,接下来就是实物制作了。考虑到实物制作与应用电脑软件仿真是有很大差异的,所以在制作实物的过程中尽量购买与仿真中应用相同的元器件,使用到的元器件见下表5-1所示:
表5-1 元器件列表
序号 1 2 3 4 5 6 7 8 9 10 11 名称 单片机 极数码管 按键 排阻 转换器 极性电容 电阻 晶振 瓷片电容 电位器 40p单排座 型号/大小 STCC52RC 四位一体共阴极 四脚 1k欧姆 ADC0809 10uf 8.2k欧姆 12M Hz 30pf 10k欧姆 数量 1 1 2 1 1 1 1 1 2 2 2 用途 主控芯片 显示 通道选择 P0口上拉电阻 转换芯片 上电复位电路 上电复位电路 产生时钟频率 晶振电路 分压 插电位器和数码管 12 13 14 15 16 17 18 19 20
24
40p IC座 28p IC座 USB母口 洞洞板 跳线 焊锡 USB数据线 电烙铁 细铜线 9X15厘米 双公头 1 1 1 1 若干 若干 1 1 若干 插单片机 插转换器 电源接口 系统板 连线 焊接 电源线 焊接 跳线 湖北理工学院 毕业设计(论文)
4.2.2 制作过程
在准备好必需的元器件后,首先就是要对一些大的元器件进行合理的布局,在本设计中主要就是对单片机、ADC0809、四位一体共阴极数码等大的元器件布局,主要元器件具有合理的布局才能使其他小的元器件布局更合理,为后面的工序提供方便。我的布局如下,考虑到ADC0809将要向单片机的P1口传输数据,因此将单片机适当往板子的右方挪动,ADC0809在其左侧,四位一体共阴极数码管在单片机的右上方,两个按键在单片机右下方适当位置,两个高精度电位器在ADC0809左上方,电源USB在系统板的左下方,这是整个系统的元件布局。
布局完成后就是对照原理图进行焊接了,对各个元器件进行焊接也是非常重要的步骤,此步骤将直接影响实物的制作结果。因此我在焊接的过程中很严格地遵循了以下几个原则:
1、对电源和地线进行合理布局:整个系统的运行都需要电源的参与,对电源布局合理可以使整个系统电路简洁合理且可以提高电路的工作效率,比如有些面包板在其内部有贯穿整块板子的铜箔,应该利用其特性,将这些铜箔作为系统地线和电源线;如若所用的面包板没有这样的铜箔,就要对地线、电源线的布局有个合理恰当的规划。
2、要善于利用各种元器件被剪下无用的引脚;面包板的焊接需要很多的跨接线、跳线等,因此在焊接完元器件后不要急于剪断元器件多余的引脚,此时我们可以利用这些不用的长引脚跨接到其旁边待连接的元器件引脚上进行焊接,即满足了系统的要求又节约了材料,从而使有百利而无一害。因此我们可以把剪断的元器件引脚收集起来作为跳线用材料。
3、善于设置跳线:多设置跳线不仅可以简化连线,而且要美观得多(见下图横卧的跳线)。
4、善于利用排针:排针有许多灵活的用法,例如两块板子相连,就可以将排座和排针按照一定方式插在两块板子上,这样排针既可以将两块板子连接起来又可以在两块板子间架起电气连接的桥梁。
5、有时候我们不需要连在一起的板子那么就要隔断铜箔,尤其是在我们使用连孔板时会出现此种情形,为了能够合理利用空间,必要时可用刀具将板子的某些铜箔割断,从而能够做到在有限的空间内放更多的电子器件。
25
湖北理工学院 毕业设计(论文)
6、充分利用双面板。双面板比较昂贵,既然选择它就应该充分利用它。双面板的每一个焊盘都可以当作过孔,灵活实现正反面电气连接。
通过遵循以上以上几条焊接技巧,使我在焊接板子的过程中少走了很多弯路,给予我很大的帮助。接下来的问题就是走线方式,通常焊接洞洞板有很多种方法,传统用得最多的是“飞线连接法”,而近来比较流行的一种方法叫“锡接走线法”。在本设计中我采用的是“飞线连接法”。所谓的“飞线连接法”,一般选用细导线或者漆包线进行电路连接,尽量沿着水平和竖直走线,整洁清晰。不过这种方式对于稍微复杂的电路,假如布局不合理可能会存在较多交叉或者重叠的飞线,有可能会对电气特性有一点影响,而且焊接时要求头脑特别清晰且要有一定的焊接经验才能理清交错的飞线。
在焊接的过程中给我印象最深刻的印象就是解决各个元器件的引脚对应问题,由于单片机和ADC0809均使用了相应的插槽,所以在焊接的过程中只需要对照书本上的引脚顺序进行相应的连线,但四位一体共阴极数码管虽然在仿真电路图中很熟悉,但在实物面前要想分辨清楚其各个引脚尤其是在焊接的过程中还是需要一定的功夫的,在焊接的过程中应用第2章中识别四位一体数码管的引脚方法给了我很大的帮助。除此在焊接的过程中就是要有焊接的基本功,怎样拿捏的恰到好处使焊点饱满且标准美观而又不把相应的电子元器件烫坏,是很要练习的。
在通过种种不懈的努力后,系统板实物终于制作成功,导入程序,接上电源能够按照预期的要求正常工作,系统焊接成功后见图4-1所示:
图4-2 制作成品
26
湖北理工学院 毕业设计(论文)
4.3 本系统优化分析
本设计中虽然能够在仿真和实物制作中均能满足毕业设计的要求,但仍然存在一些缺陷,综合自己的分析,主要有一下几点不足:
(1)在通过按键选择通道或进入及退出自动循环通道选择时,数码管显示有影响,尤其是当按键长时间按下时,数码管不显示,直到松开按键后数码管继续显示,此缺陷并不影响本系统的性能要求,其原因就是单片机是单步执行,在按下按键时,单片机程序处于等待按键释放处,可通过软件方式解决此问题,即在等待按键释放的while语句中执行显示子函数,此不足即可完美解决。
(2)在实物中通过两个高精密电位器来调整输入ADC0809的输入电压,从而满足设计要求。此系统还能够继续扩展,可通过插排针的方式将外电压进入并测量,从而真正实现一个数字电压表的功能。
本设计将所测电压的负极与系统地连接,从而实现测量的准确性,很好的抑制了零点漂移,并将系统负极接入大地,并采用稳定的USB供电,具有很好地抗干扰功能。
27
湖北理工学院 毕业设计(论文)
总 结
经过一段时间的努力,毕业论文-单片机数据采集显示系统的设计仿真与制作基本完成。但设计中的不足之处仍然存在。这次设计是我第一次设计电路,并用Proteus实现了仿真。在这过程中,我对电路设计,单片机的使用等都有了新的认识。通过这次设计学会了Proteus和Keil软件的使用方法,掌握了从系统的需要、方案的设计、功能模块的划分、原理图的设计和电路图的仿真的设计流程,积累了不少经验。
单片机数据采集显示系统使用性强、结构简单、成本低、外接元件少。在实际应用工作应用好,测量电压准确,精度高。系统功能、指标达到了课题设计的预期要求。本文设计主要实现了简易数据采集显示系统测量各路电压的功能,详细说明了从原理图的设计、电路图的仿真再到软件的调试及实物制作。
通过本次设计,我对单片机有了进一步的了解。无论是在硬件连接方面还是在软件编程方面。本次设计采用了STCC52单片机芯片,与以往的单片机相比增加了许多新的功能,使其功能更为完善,应用领域也更为广泛。设计中还用到了模/数转换芯片ADC0809,以前在学单片机课程时只是对其理论知识有了初步的理解。通过这次设计,对它的工作原理有了更深的理解。在调试过程中遇到很多问题,硬件上的理论知识学得不够扎实,对电路的仿真方面也不够熟练。我感触最深就是对硬件电路的焊接,从中学到了很多课堂上学不到的知识,在增加自己动手实践能力中起到了最要作用。
总之这次电路的设计、仿真及制作,基本上达到了设计的功能要求。在以后的实践中,我将继续努力学习电路设计方面的理论知识,并理论联系实际,争取在电路设计方面能有所提升。
28
湖北理工学院 毕业设计(论文)
致 谢
通过本次单片机数据采集显示系统的设计仿真与制作的毕业设计,我将在湖北理工学院学习4年的专业知识联系起来。同时也将把原来学习中遇到的问题进一步消化,也为我即将面临就业提供一个和好的平台。
在此感谢刘东汉老师一直以来孜孜不倦的教诲,感谢刘老师在百忙之中对我们不厌其烦的讲解,一一解答我们在毕业设计过程中的各种疑问。同时感谢所有参与毕业设计答辩的各位老师,给予我们这样一个展现自我的机会。在这次设计过程中我不但学到了知识,还认识到了团结的力量及合作的精神。最后再次向所有给予我帮助的老师和同学致以深深的谢意。
鉴于自己的水平有限,加之时间紧张,错误之处在所难免,敬请各位老师批评指正。
29
湖北理工学院 毕业设计(论文)
参 考 文 献
[1] 郭天祥.新概念51单片机C语言教程.北京:电子工业出版社,2009年 [2] 谭浩强.C程序设计(第三版).北京:清华大学出版社,2005年 [3] 胡健主编.单片机原理及接口技术.北京机械工业出版社,2004年
[4] 张毅刚,彭喜元,孟升卫,刘兆庆. MCS-51单片机实用子程序设计(第二版).哈尔滨工
业大学出版,2003年.
[5] 李全利,迟荣强. 单片机原理及接口技术.高等教育出版社 ,2004年
[6] 李华. MCS—51系统单片机实用接口技术.北京:航空航天大学出版社,2000年. [7] 赵茂泰. 智能仪器原理及应用(第二版).北京:电子工业出版社,2004年
[8] 徐爱卿,孙涵芳,盛焕鸣. 单片微型计算机应用和开发系统. 北京:航空航天大学出版,
1992年.
[9] 邬宽明. 单片机外围器件实用手册、数据传输接口器件分册.北京:航空航天大学出版社,
1998年.
[10] 何立民,余永权,李小青,陈林康. 单片机应用系统的功率接口.北京:航空航天大学出
版,1992年.
[11] 李建忠.单片机原理及应用[M].西安:西安电子科技大学出版社, 2002年:76-95 [12] 赵伟军.Protel 99 SE教程[M].北京:人民邮电出版社,2004年:47- [13] 张毅刚.单片机原理及应用[M].北京:高教出版社,2004年:87-91
[14] 刘定斌.单片机系统实用抗干扰技术[M].北京:人民邮政出版社,2003年:13-96 [15] 唐俊翟.单片机原理及应用[M].北京:冶金工业出版社,2003年:147-1
30
湖北理工学院 毕业设计(论文)
附录一
源程序
#include /*--------------------------------------------------- 位变量声明 ---------------------------------------------------*/ sbit ALE = P3^3; sbit OE = P3^4; sbit EOC = P3^5; sbit STA = P3^6; sbit CLK = P3^7; sbit dan=P2^5; sbit xun=P2^7; //--------------------------------------------------- unsigned int num; //AD转换后的数字量 unsigned char ch,xun1; //通道号码 /*--------------------------------------------------- 延时子函数 ---------------------------------------------------*/ void delay(unsigned int z) { unsigned int x, y; for(x = z; x > 0; x--) for(y = 110; y > 0; y--) CLK = ~CLK; } //在延时函数中,给ADC0809送去CLK,也算是一个独创吧! 31 湖北理工学院 毕业设计(论文) /*--------------------------------------------------- 显示子函数 ---------------------------------------------------*/ void display() { char code table[] = { //共阴段码 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, //0~7 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; //8~F P0 = 0; P2 = 0xfe; P0 = table[ch]; delay(2);//通道号码 P0 = 0; P2 = 0xfd; P0 = table[num / 100] + 128; delay(2);//百位加上小数点 P0 = 0; P2 = 0xfb; P0 = table[num % 100 / 10]; delay(2);//十位 P0 = 0; P2 = 0xf7; P0 = table[num % 10]; delay(2);//个位 P0 = 0; //关闭显示器 } /*--------------------------------------------------- 自动循环和手动选择通道子函数 ---------------------------------------------------*/ void keyscan() { if(xun1==0&dan==0) { delay(2); if(dan==0) { ch++; } 32 //若处在手动循环检测到k1键按下 //延时两毫秒 消抖动 //检测到k1确实被按下 //通道数加1 if(ch==8) //若通道数到达8则取0 ch=0; while(!dan); //等待按键释放 湖北理工学院 毕业设计(论文) } } if(xun==0) { } delay(2); if(xun==0) { } xun1++; //xun1自加1 //若xun1大于等于2则取0 //延时两毫秒消抖动 //检测到按键k2确实被按下 //检测到按键k2被按下 if(xun1>=2) xun1=0; while(!xun); //等待按键释放 /*--------------------------------------------------- AD转换子函数 ---------------------------------------------------*/ void AD() { P3 = ch+0XF8 ; //送给ADC0809 ALE = 1; _nop_(); ALE = 0; //地址锁存 STA = 1;_nop_(); _nop_(); STA = 0; //开始转换,稍候,才可读EOC display(); //显示,既做延时,又输出CLK while(EOC == 0) display(); //等待转换结束 OE=1; num = P1; //取出转换结果 num = num * 100 /51; //比例变换:255 --> 500 } 33 湖北理工学院 毕业设计(论文) /*--------------------------------------------------- 主函数 ---------------------------------------------------*/ void main() { unsigned char i; //设置变量i xun1=0; //初始化为手动通道选择 ch=0; //初始化通道数 while(1) //无穷循环 { display(); //调用显示子函数 keyscan(); //调用按键子函数 if(xun1==1) //检测是否为自动循环 { ch++; if(ch==8) ch=0; for(i=5;i>0;i--) //自动循环时延时每路显示时间 { keyscan(); //调用按键子函数 AD(); //调用A/D转换子函数 } } AD(); //调用A/D转换子函数 } } 34 湖北理工学院 毕业设计(论文) 附录二 REG52.H头文件包含内容 /* Header file for generic 80C52 and 80C32 microcontroller. Copyright (c) 1988-2001 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved. */ /* BYTE Registers */ sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0xA0; sfr P3 = 0xB0; sfr PSW = 0xD0; sfr ACC = 0xE0; sfr B = 0xF0; sfr SP = 0x81; sfr DPL = 0x82; sfr DPH = 0x83; sfr PCON = 0x87; sfr TCON = 0x88; sfr TMOD = 0x; sfr TL0 = 0x8A; sfr TL1 = 0x8B; sfr TH0 = 0x8C; sfr TH1 = 0x8D; sfr IE = 0xA8; sfr IP = 0xB8; sfr SCON = 0x98; sfr SBUF = 0x99; /* 8052 Extensions */ sfr T2CON = 0xC8; sfr RCAP2L = 0xCA; sfr RCAP2H = 0xCB; sfr TL2 = 0xCC; sfr TH2 = 0xCD; /* BIT Registers */ /* PSW */ sbit CY = PSW^7; sbit AC = PSW^6; sbit F0 = PSW^5; sbit RS1 = PSW^4; sbit RS0 = PSW^3; sbit OV = PSW^2; sbit P = PSW^0; //8052 only /* TCON */ sbit TF1 = TCON^7; sbit TR1 = TCON^6; sbit TF0 = TCON^5; sbit TR0 = TCON^4; sbit IE1 = TCON^3; sbit IT1 = TCON^2; sbit IE0 = TCON^1; sbit IT0 = TCON^0; 35 湖北理工学院 毕业设计(论文) /* IE */ sbit EA = IE^7; sbit ET2 = IE^5; //8052 only sbit ES = IE^4; sbit ET1 = IE^3; sbit EX1 = IE^2; sbit ET0 = IE^1; sbit EX0 = IE^0; /* IP */ sbit PT2 = IP^5; sbit PS = IP^4; sbit PT1 = IP^3; sbit PX1 = IP^2; sbit PT0 = IP^1; sbit PX0 = IP^0; /* P3 */ sbit RD = P3^7; sbit WR = P3^6; sbit T1 = P3^5; sbit T0 = P3^4; sbit INT1 = P3^3; sbit INT0 = P3^2; sbit TXD = P3^1; sbit RXD = P3^0; /* SCON */ sbit SM0 = SCON^7; sbit SM1 = SCON^6; sbit SM2 = SCON^5; sbit REN = SCON^4; sbit TB8 = SCON^3; sbit RB8 = SCON^2; sbit TI = SCON^1; sbit RI = SCON^0; /* P1 */ sbit T2EX = P1^1; // 8052 only sbit T2 = P1^0; // 8052 only /* T2CON */ sbit TF2 = T2CON^7; sbit EXF2 = T2CON^6; sbit RCLK = T2CON^5; sbit TCLK = T2CON^4; sbit EXEN2 = T2CON^3; sbit TR2 = T2CON^2; sbit C_T2 = T2CON^1; sbit CP_RL2 = T2CON^0; 36 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- haog.cn 版权所有 赣ICP备2024042798号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务