微机原理课程设计05V和010V可选量程数字电压表.doc

上传人:文库蛋蛋多 文档编号:4143164 上传时间:2023-04-07 格式:DOC 页数:30 大小:267KB
返回 下载 相关 举报
微机原理课程设计05V和010V可选量程数字电压表.doc_第1页
第1页 / 共30页
微机原理课程设计05V和010V可选量程数字电压表.doc_第2页
第2页 / 共30页
微机原理课程设计05V和010V可选量程数字电压表.doc_第3页
第3页 / 共30页
微机原理课程设计05V和010V可选量程数字电压表.doc_第4页
第4页 / 共30页
微机原理课程设计05V和010V可选量程数字电压表.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《微机原理课程设计05V和010V可选量程数字电压表.doc》由会员分享,可在线阅读,更多相关《微机原理课程设计05V和010V可选量程数字电压表.doc(30页珍藏版)》请在三一办公上搜索。

1、交通与汽车工程学院课程设计说明书课 程 名 称: 微机原理及应用课程设计 课 程 代 码: 8234570 题 目:0-5V和0-10V可选量程数字电压表 年级/专业/班: 09级/车辆/理科班 学 生 姓 名: 学 号: 开 始 时 间: 2012 年 07 月 02 日完 成 时 间: 2012 年 07 月 06 日课程设计成绩:学习态度及平时成绩(30)技术水平与实际能力(20)创新(5)说明书(计算书、图纸、分析报告)撰写质量(45)总 分(100)指导教师签名: 年 月 日目 录摘要.1摘 要41 引言12设计原理及要求22.1数字电压表的实现原理22.2数字电压表的设计要求23整

2、体设计思路框图及原理图33.1设计思路33.2设计过程34 AT89C51及硬件的功能介绍54.1 AT89C51简介54.1.1简单概述54.1.2主要功能特性54.1.3 AT89C52的引脚介绍64.2 ADC0808的引脚及功能介绍74.2.1芯片概述74.2.2 引脚简介84.2.3 ADC0808的转换原理84.3 LED数码管的控制显示94.3.1 LED数码管的模型9LED数码管模型如图3-6所示。94.3.2 LED数码管的接口简介95. 所用软件环境介绍105.1 proteus软件环境介绍105.2KEIL C51简介116.系统软件程序的设计136.1 主程序136.2

3、 A/D转换子程序146.3 中断显示程序157电压表的调试及性能分析177.1 调试与测试177.2 性能分析188电路仿真图和PCB图199总 结20致 谢20摘 要 本设计是基于89C51单片机为控制核心的数字电压表设计。系统采用了美国DALLAS公司的A/D0808芯片构成了模数电路,实现了电压的显示。在系统显示部分,采用了共阴极的LED数码管构成了显示模块,此模块用于实时的显示信息。本设计说明书对该系统的硬件电路,工作原理进行了详细的介绍。同时给出了软件设计的流程图和主要源代码。数字电压表的设计即将连续的模拟电压信号经过A/D转换器转换成二进制数值,再经由单片机软件编程转换成十进制数

4、值并通过显示屏显示。 按系统实现要求,决定控制系统采用AT89C51单片机,A/D转换由于仿真这里用ADC0808,它和ADC0809区别很小。关键词: 89C51单片机 A/D0808芯片 LED显示器1 引言随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器计数电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。 数字电压表(DigitalVoltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。与此同时,由DVM扩展而成的各种通用及专

5、用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。本章重点介绍单片A/D 转换器以及由它们构成的基于单片机的数字电压表的工作原目前,由各种单片A/D 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力理。本设计AT89C51单片机的一种电压测量电路,该电路采用ADC0808本文介绍一种基于A/D转换电路,测量范围直流 05V 的4路输入电压值,并在四位LED数码管上显示或单路选择显示。测量最小分辨率为0.019V,测量最小精度为0.01V。2设计原理及要求本设计是利用单片机AT89C51与ADC0808设计一个数字电压表,测

6、量05V之间的直流电压值,四位数码显示,但要求使用的元器件数目最少。2.1数字电压表的实现原理 ADC0808是8位的A/D转换器。当输入电压为5.00V时,输出的数据值为255(0FFH),因此最大分辨率为0.0196(5/255)。ADC0808具有8路模拟量输入端口,通过3位地址输入端能从8路中选择一路进行转换。如每隔一段时间依次轮流改变3位地址输入端的地址,就能依次对8 路输入电压进行测量。LED数码管显示采用软件译码动态显示。通过按键选择可对8路循环显示,也可单路显示,单路显示可通过按键选择显示的通道数。2.2数字电压表的设计要求可以测量05V范围内的3路直流电压值。在4位LED数码

7、管上轮流显示各路电压值或单路选择显示,其中3位LED数码管显示电压值,显示范围为0.00V5.00V。3整体设计思路框图及原理图3.1设计思路 多路数字电压表应用系统硬件电路由单片机、A/D转换器、数码管显示电路和按键处理电路组成,由于ADC0808在进行A/D转换时需要有CLK信号,本试验中ADC0808的CLK直接由外部电源提供为500kHz的方波。由于ADC0808的参考电压VREFVCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。实际显示的电压值(D/256*VREF) ADC0808采用逐次逼近法转换,把模拟电压转换成16进制的D,由于是对直流电压05V进行采集,所以

8、D对应的电压为V0,我们的目的就是要把V0显示在LED显示器上,因为单片机不好进行小数点计算,所以有:V0=2*D扩大了100倍,扩大100倍后的结果,通过查表使之显示在LED显示器。3.2设计过程简易数字电压测量电路由A/D转换、数据处理及显示控制等组成。电路原理图见附录2。A/D转换由集成电路0808完成。0808具有8路模拟输入端口,地址(23-25)脚可决定对哪路模拟输入作A/D转换,22脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存。6脚为测试控制,当输入一个2us宽高电平脉冲时,就开始A/D转换。7脚为A/D转换结束标志,当A/D转换结束时7脚输出高电平。9脚为A/D转换数

9、据输出允许控制,当OE脚为高电平时,A/D转换数据从该端口输出。10脚为0808的时钟输入端,由外部信号源提供。单片机的P1、P3.0-P3.3端口作为四位LED数码管现实控制。P3.5端口用作单路显示/循环显示转换按钮,P3.6端口用作单路显示时选择通道。P0端口作A/D转换数据读入用,P2端口用作0808的A/D转换控制。 模拟电 压AT89C51 单片机ADC0808转换数据显 示图3-1 整体框图系统通过软件设置单片机的内部定时器T1产生中断信号。通过片选选择8路通道中的一路,将该路电压送入ADC0808的EOC端口产生高电平,同时将ADC0808的OE端口置为高电平,单片机将转换后结

10、果存到片内RAM。系统调出转换显示程序,将转换为二进制的数据在转换成十进制数并输出到LCD显示电路,将相应电压显示出来。原理图见下附录图 图3-24 AT89C51及硬件的功能介绍4.1 AT89C51简介4.1.1简单概述AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C51是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造

11、技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图3-2所示。图4-1 AT89C52芯片模型4.1.2主要功能特性(1) 4K字节可编程闪烁存储器。 (2) 32个双向I/O口;1288位内部RAM 。(3) 2个16位可编程定时/计数器中断,时钟频率0-24MHz。 (4) 可编程串行通道。 (5) 5个中断源。 (6) 2个读写中断口线。 (7) 低功耗的闲

12、置和掉电模式。(8) 片内振荡器和时钟电路。4.1.3 AT89C52的引脚介绍89C51单片机多采用40只引脚的双列直插封装(DIP)方式,下面分别简单介绍。(1)电源引脚电源引脚接入单片机的工作电源。Vcc(40引脚):+5V电源。GND(20引脚):接地。(2)时钟引脚XTAL1(19引脚):片内振荡器反相放大器和时钟发生器电路的输入端。XTAL2(20引脚):片内振荡器反相放大器的输出端。图4-2 电源接入方式(3)复位RST(9引脚)在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。(4)/Vpp(3

13、1引脚)为外部程序存储器访问允许控制端。当它为高电平时,单片机读片内程序存储器,在PC值超过0FFFH后将自动转向外部程序存储器。当它为低电平时,只限定在外部程序存储器,地址为0000HFFFFH。Vpp为该引脚的第二功能,为编程电压输入端。(5)ALE/(30引脚)ALE为低八位地址锁存允许信号。在系统扩展时,ALE的负跳沿江P0口发出的第八位地址锁存在外接的地址锁存器,然后再作为数据端口。为该引脚的第二功能,在对片外存储器编程时,此引脚为编程脉冲输入端。(6)(29引脚)片外程序存储器的读选通信号。在单片机读片外程序存储器时,此引脚输出脉冲的负跳沿作为读片外程序存储器的选通信号。(7) p

14、in39-pin32为P0.0-P0.7输入输出脚,称为P0口。P0是一个8位漏极开路型双向I/O口。内部不带上拉电阻,当外接上拉电阻时,P0口能以吸收电流的方式驱动八个LSTTL负载电路。通常在使用时外接上拉电阻,用来驱动多个数码管。 在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,不需要外接上拉电阻。(8)Pin1-Pin8为P1.0-P1.7输入输出脚,称为P1口,是一个带内部上拉电阻的8位双向I/0口。P1口能驱动4个LSTTL负载。(9)Pin21-Pin28为P2.0-P2.7输入输出脚,称为P2口。P2口是一个带内部上拉电阻的8位双向I/O口,P2口

15、能驱动4个LSTTL负载。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接收高8位地址和控制信息。在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。 (10)Pin10-Pin17为P3.0-P3.7输入输出脚,称为P3口。P3口是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载,这8个引脚还用于专门的第二功能。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接控制信息。4.2 ADC0808的引脚及功能介绍4.2.1芯

16、片概述ADC0808是一种典型的A/D转换器。它是由8位A/D转换器,一个8路模拟量开关,8位模拟量地址锁存译码器和一个三态数据输出锁存器组成; +5V单电源供电,转化 时间在100us左右;内部没有时钟电路,故需外部提供时钟信号。芯片模型如图3-4所示。图4-3ADC0808芯片模型4.2.2 引脚简介 (1) IN0IN7:8路模拟量输入端。(2) D0D7:8位数字量输出端口。(3) START:A/D转换启动信号输入端。(4) ALE:地址锁存允许信号,高电平有效。(5) EOC:输出允许控制信号,高电平有效。(6) OE: 输出允许控制信号,高电平有效。(7) CLK:时钟信号输入端

17、。(8)A、B、C:转换通道地址,控制8路模拟通道的切换。A、B、C分别与地址线或数据线相连,三位编码对应8个通道地址端口,A、B、C=000111分别对应IN0IN7通道的地址端口。4.2.3 ADC0808的转换原理ADC 0808 采用逐次比较的方法完成A/D转换,由单一的+5V电源供电。片内带有锁存功能的8路选1的模拟开关,由A、B、C的编码来决定所选的通道。ADC0809完成一次转换需100s左右,它具有输出TTL三态锁存缓冲器,可直接连接到AT89C51的数据总线上。通过适当的外接电路,ADC0808可对05V的模拟信号进行转换。 (3) G:数据输入锁存选通信号。当加到该引脚的信

18、号为高电平时,外部数据选通到内部锁存器,负跳变时,数据锁存到锁存器中。(4):数据输出允许信号,低电平有效。当该信号为低电平时,三态门打开,锁存器中的数据输出到数据输出线上,当该信号为高电平时,输出线为高阻态。4.3 LED数码管的控制显示4.3.1 LED数码管的模型LED数码管模型如图3-6所示。图4-4 LED数码管模型4.3.2 LED数码管的接口简介LED 的段码端口AG分别接至AT89C52的P1.0P1.7口,位选端14分别接至P3.3、P32、P3.1、P3.0,如图3-7所示。 图4-5 LED数码管模型5. 所用软件环境介绍5.1 proteus软件环境介绍本系统的硬件设计

19、首先是在Proteus软件环境中仿真实现的。Proteus软件是来自英国Labcenter electronics公司的EDA工具软件,Proteus软件有十多年的历史,在全球广泛使用,除了具有和其它EDA工具一样的原理布图、PCB自动或人工布线及电路仿真的功能外,其革命性的功能是,它的电路仿真是互动的。针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试。如果有显示及输出,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,还能看到运行后输入输出的效果。Proteus建立了完备的电子设计开发环境,尤其重要的是Proteus Lite可以完全免费,也可以花微不足道的

20、费用注册达到更好的效果。Proteus是目前最好的模拟单片机外围器件的工具。可以仿真51系列、AVR、PIC等常用的MCU及其外围电路(如LCD,RAM,ROM,键盘,马达,LED,AD/DA,部分SPI器件,部分IIC器件.)。其实Proteus 与 multisim比较类似,只不过它可以仿真MCU,当然,软件仿真精度有限,而且不可能所有的器件都找得到相应的仿真模型,用开发板和仿真器当然是最好选择,可是初学者拥有它们的可能性比较小。当然,硬件实践还是必不可少的。在没有硬件的情况下,Proteus能像pspice 仿真模拟/数字电路那样仿真MCU及外围电路。另外,即使有硬件,在程序编写早期用软

21、件仿真一下也是很有必要的。Proteus软件主要具有以下几个方面的特点:1、设计和仿真软件Proteus 是一个很有用的工具,它可以帮助学生和专业人士提高他们的模拟和数字电路的设计能力。2、它允许对电路设计采用图形环境,在这种环境中,可以使用一个特定符号来代替元器件,并完成不会对真实电路造成任何损害的电路仿真操作。3、它可以仿真仪表以及可描述在仿真过程中所获得的信号的图表。4、它可以仿真目前流行的单片机,如PICS, ATMEL-AVR, MOTOROLA, 8051 等。5、在设计综合性方案中,还可以利用ARES开发印制电路板。Protel印制板设计软件包是澳大利亚protel techno

22、logy公司与1990年推出的电子CAD产品,具有方便、易学、实用、快速以及高速度、高步通率的特点。它采用了分层次下拉窗口菜单结构形式,用户基本上不需要记背太多的键盘命令,用鼠标点击菜单命令就能操作,protel有着很高的自动布线布通率。布通率是电子产CAD产品的一项重要指标,它反映电子元件在电路图中连接关系有多少能在印刷版图中实现。在设计常用的单、双面印制板时只要选择适当的元件布局和布线策略方法,protel就可以轻易的达到98%-100%的布通率。对于极少数不能布通的定方,protel可以用飞线指示出来,引导用户用手工方法连通。另外,protel有强大的宏命令设置功能,利用宏命令功能多定义

23、的热键可以大大提高操作速度。 Protel对微机的软硬件配置要求很低:cpu在8088以上,dos2.0以上版本,内存640kb以上,双软件(或一个软件一个硬盘),单色显示器(多层板设计时最好用彩色),各种兼容打印机。也能在Windows9X平台的模拟DOS下运行。Protel已成为印制板设计加工方面的工业标准。据初步统计protel在CAD的市场占有率达 95%,成为电子产品制造业界的首选CAD软件。5.2KEIL C51简介支持8051微控制器体系结构的Keil开发工具,适合每个阶段的开发人员,不管是专业的应用工程师,还是刚学习嵌入式软件开发的学生。 产业标准的Keil C编译器、宏汇编器

24、、调试器、实时内核、单板计算机和仿真器,支持所有的251系列微控制器,帮助你如期完成项目进度。 以下图表显示Keil的开发工具以及它们相互之间的接口。 KEIL C51开发工具旨在解决嵌入式软件开发商面临的复杂问题。 当你开始一个新项目,只需简单的从设备数据库选择使用的设备,uVision IDE将设置好所有的编译器、汇编器、链接器和存储器选项。 包含大量的例程,帮助你着手使用最流行的嵌入式8051设备。 Keil Vision调试器准确地模拟8051设备的片上外围设备(IC、CAN、UART、SPI、中断、I/O端口、A/D转换器、D/A转换器和PWM模块)。模拟帮助你了解硬件配置,避免在安

25、装问题上浪费时间。 此外,使用模拟器你可以在没有目标设备的情况下编写和测试应用程序。 当你准备在目标硬件上测试软件应用时,可以使用MON51、MON390、NONADI、或者FlashMON51目标监视器、ISD51 In-System调试器、ULINK USB-JTAG适配器在目标系统上下载并测试程序代码。 PK51专业开发工具包支持8051微控制器的PK51专业开发工具,支持所有的8051系列的芯片,包括那些具有扩展存储器和指令集的新设备(比如 Dallas 390/5240/400,Philips 51MX以及Analog Devices MicroConverters),经典设备以及具

26、有IP核的设备,即来自以下公司的设备:Analog Devices,Atmel,Cypress Semiconductor, Dallas Semiconductor,Goal,Hynix,Infineon,Intel,NXP,OKI,Silicon Labs,SMSC,STMicroelectronics,Synopsis,TDK,Temic,Texas Instruments及Winbond。 使用PK51专业开发套件,你可轻松访问8051系列的片上外设和其他关键功能。 Vision 集成开发环境 调试器 模拟器 Keil扩展8051编译工具 AX51 宏汇编器 CX51 ANSI C 编

27、译器 LX51链接器/定位器 OHX51 Object-HEX 转换器 Keil经典8051编译工具 A51 宏汇编器 C51 ANSI C 编译器 BL51 Code Banking 链接器/定位器 OH51 Object -HEX转换器 OC51 Banked Object 转换器 目标调试器 FlashMON51目标监控器 MON51目标监控器 MON390(Dallas 390)目标监控器 MONADI(Analog Devices 812)目标监控器 ISD51 In-System调试器 RTX51小实时内核6.系统软件程序的设计多路数字电压表系统软件程序主要有主程序、A/D转换子程

28、序和中断显示程序组成。6.1 主程序主程序包含初始化部分、调用A/D转换子程序和相应外部0中断显示电压数值程序,初始化部分包含存放通道的缓冲区初始化和显示缓冲区初始化。另外,对于单路显示和循环显示,系统设置了一个标志位00H控制,初始化时00H位设置为0,默认为循环显示,当它为1时改变为单路显示控制,00H位通过单路、循环按键控制。流程图如图4-1所示。开始判断按键按下?0通道转换子程序初始化1通道转换子程序显示程序显示程序结束图6-16.2 A/D转换子程序A/D转换子程序用于对ADC0808的1路输入模拟电压进行A/D转换,并将转换的数值存入1个相应的存储单元中,A/D转换子程序每隔一定时

29、间调用一次,即隔一段时间对输入电压采样一次,如图4-2所示。启动A/D转换延迟读取数据换算数值显示返回图6-26.3 中断显示程序 定时中断提供脉冲LED 数码管采用软件译码动态扫描的方式。在中断程序中包含多路循环显示程序和单路显示程序,多路循环显示程序把4个存储单元的数值依次取出送到4个数码管上显示,每一路显示一秒。单路显示程序只对当前选中的一路数据进行显示。每路数据显示时需经过转换变成十进制BCD码,放于4个数码管显示缓冲区中。单路或多路循环显示通过标志位00H控制。在显示控制程序中加入了对单路或多路循环按键的判断。分离出电压的个位,小数位P1口送个位数P3口选中第2个数码管 P1口送十分

30、位数P1口送个位数P3口选中第3个数码管P3口选中第4个数码管返回 图6-3中断启动CLK取反并自动重装初值中断初始化返回 图6-47电压表的调试及性能分析7.1 调试与测试通过上面的硬件设计和软件设计过程,设计的工作已经基本完成,接下来的工作就是对所设计好的应用系统进行调试。通过调试可以检查出系统出现的一些错误,从而进行下一步的修改。(1) 在Protel 99 SE中,对硬件电路图进行ERC电气规则检查。 图 7-1 图 7-2 本设计应用KEIL51软件,首先根据自己设计的电路图用Proteus6软件画出电路模型,关于这个软件的使用通过查一些资料和自己的摸索学习;然后我们用KEIL51软

31、件对所编写的程序进行编译、链接,如果没有错误和警告便可生成程序的hex文件,将此文件加到电路图上使软硬件结合运行,最后进行端口电压的对比测试,测试的第一路对比见图4-1中标准电压值采用Proteus6软件中的模拟电压表测得。 图 7-3 图 7-4 从图中可以看出,简易数字电压表与“标准”数字电压表测得的绝对误差均在0.02V以内,这与采用8位A/D转换器所能达到的理论误差精度相一致,在一般的应用场合可以完全满足要求。7.2 性能分析由于单片机为8位处理器,当输入电压为5.00V时,输出数据值为255(FFH)因此单片机最大的数值分辨率为0.0196V(5/255)。这就决定了该电压表的最大分

32、辨率(精度)只能达到0.0196V。测试时电压数值的变化一般以0.02V的电压幅度变化,如要获得更高的精度要求,应采用12位、13位的A/D转换器。简易数字电压表测得的值基本上均比标准值偏大0.01-0.02V。这可以通过校正0808的基准电压来解决,因为该电压表设计时直接用7805的供电电源作为基准电压,电压可能有偏差。另外可以用软件编程来校正测量值。ADC0808的直流输入阻抗为1M欧姆,能满足一般的电压测试需要。另外,经测试ADC0808可直接在2MHz的频率下工作,这样可省去分频率14024。8电路仿真图和PCB图图8-1为进行模拟仿真时的电路图图8-1仿真时的电路图 图8-2 PCB

33、9总 结经过一周的努力终于设计成功,LED的显示结果和直接用数字电压表测试模拟量输入所得结果几乎一致,误差完全在合理的范围之内,LED最大值5.0V,达到预期目的,设计成功。 本设计参考了教材上第十一章89C51与ADC0809转换的接口连线,设计出电路图的连线,从并中理解了许多基本的知识和接线方法,在程序的设计与电压表调试的过程中中遇到了很多的问题,刚开始时四个数码管根本不显示,后来发现用的是共阳极的数码管,而设计是共阴极的,更换后数码管终于显示,但问题又出现了,经过仔细地检查电路和修改程序,功夫不负有心人,最后终于调试成功。在此再次向带领我们这次课程设计的老师说声:谢谢! 致 谢在陈飞老师

34、的指导下,我完成了本次设计。本设计从选题到完成,每一步都是在她的指导下完成的,倾注了老师大量的心血。另外,本设计的完成也离不开其他老师和各位同学给我的建议和帮助,是他们让我明白了团队合作的精神。在此,我谨向赵玲老师和帮助过我的老师和同学们,表示崇高的敬意和衷心的感谢!参考文献1Protel99SE EDA 技术及应用徐峥颖编著,北京:机械工业出版社,20052单片机系统的protues设计与仿真张靖武编著,北京:电子工业出版社,20073单片机原理及接口技术李朝青编著,北京:北京航空航天大学出版社,20054MCS-51单片机应用开发实用子程序边春远编著,北京:人民邮电出版社,2005 附录1

35、 源程序#include #define uchar unsigned charunsigned char code dispcode=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00;unsigned char num;unsigned char getdata,dispbuf4;unsigned int temp=0,vreal=0;unsigned int temp1=0,temp2=0,temp3=0,temp4=0;sbit ST=P37;sbit OE=P36;sbit EOC=P35;sbit CLK=P34;void

36、 Display1();sbit t=P07;void delay(uchar ms);void Display();void main(void) ST=0; OE=0; TMOD=0x02; TH0=0x14; TL0=0x00; IE=0x82; TR0=1; P3=0xf0; while(1) /进行一次数据采集if (t=1) P0=0X00; ST=0; ST=1; ST=0;while(EOC = 0);/等待ADC0809转换完成OE=1; delay(5);getdata=P2; delay(5);temp1=getdata*5.0/255.0*1000.0; OE = 0;

37、 /进行次二数据采集 ST=0; ST=1; ST=0;while(EOC = 0);/等待ADC0809转换完成OE=1;getdata=P2; delay(5);temp2=getdata*5.0/255.0*1000.0; delay(5);OE = 0;temp=(temp1+temp2)/2; Display(); delay(5); else P0=0X01; ST=0; ST=1; ST=0;while(EOC = 0);/等待ADC0809转换完成OE=1; delay(5);getdata=P2; delay(5);temp3=getdata*5.0/255.0*2000.0

38、; OE = 0; /进行次二数据采集 ST=0; ST=1; ST=0;while(EOC = 0);/等待ADC0809转换完成OE=1;getdata=P2; delay(5);temp4=getdata*5.0/255.0*2000.0; delay(5);OE = 0;temp=(temp3+temp4)/2; Display1(); delay(5); /*利用定时中断为ADC0809提供频率*/void t0(void) interrupt 1 using 0 CLK=CLK;/延时子函数void delay(uchar ms)uchar i,j;for(i=0;ims;i+)f

39、or(j=0;j110;j+);/*将数据分解为百十个三位并利用动态扫描显示*/P3口控制位选,P1口控制段选 void Display()dispbuf0=temp/10%10;dispbuf1=temp/100%10;dispbuf2=temp/1000%10;dispbuf3=num; P3 = 0xf7;P1 = dispcodedispbuf0;delay(5);P3=0xff;P3 = 0xfb;P1 = dispcodedispbuf1; delay(5);P3=0xff;P3 = 0xfd;P1 = dispcodedispbuf2|0x80;delay(5); void Display1()dispbuf0=temp/10%10;dispbuf1=temp/100%10;dispbuf2=temp/1000%10;dispbuf3=num; P3 = 0xf7;P1 = dispcodedispbuf0;delay(5);P3=0xff;P3 = 0xfb;P1 = dispcodedispbuf1; delay(5);P3=0xff;P3 = 0xfd;P1 = dispcodedispbuf2|0x80;delay(5);

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号