资源描述
引言2一 设计思路21.1单片机与PC机的串口通信212 数据采集系统的结构原理2121 数据采集系统的分类3122 数据采集系统的基本功能3123 数据采集系统的结构形式3二 数据采集系统设计的基本原则421 硬件设计的基本原则422 软件设计的基本原则4三 芯片介绍53.1 At89s5153.2 AD080993.3 ADC1674113.4 MAX7221133.5 MAX232143.6 2864153.7 6264153.8 74LS37316四 硬件电路174.1数据采集电路174.2数据存储电路174.3 数据显示电路184.4串口电路184.5电源电路194.6复位电路194.7 晶振电路19五,软件设计20六 心得体会24参考文献25附录25protel原理图25proteus仿真图25PCB板25实物图25引言在计算机控制系统中,数据采集是必不可少的一个组成部分,一个好的数据采集系统应具有多路数据采集功能、数据处理能力强、数据存贮量大、控制界面美观且易于操作等特点。传统的单片机数据采集控制系统,数据存贮量小,控制界面简单,图表的显示、打印等不易实现。本文以ADC0809的低成本数据采集器设计为实例,分析了Windows环境下串行通信的基础上,详解数据采集系统中PC机与单片机串行通信协议和数据块的发送与接收具体讲解了PC机和单片机串口通信在数据采集系统中的应用。系统采用可视化的编程语言C+实现单片机和PC机之间的通信。一 设计思路 数据采集是指从传感器和其他待测设备中自动采集模拟或数字信号电量或非电量信号送入控制器中进行分析和数据处理。本设计采用单路模拟信号(温度)的数据采集。设计思路为:通过滑动变阻器采集电压信号,经运算放大器OP07放大后送入模数转换器ADC0809在单片机的控制下进行模数转换,每次转换结束后,单片机在控制电路的作用下将数据读走存入片外存储器。而单片机则需要将收到的数据送入PC机中进行相应处理。单片机与PC间的数据通信方式为串口通信协议RS,通过芯片MAX进行电平匹配。1.1单片机与PC机的串口通信采用RS232串口通信协议。利用MAX232实现TTL到RS电平间的转换。12 数据采集系统的结构原理 数据采集系统一般包括模拟信号的输入输出通道和数字信号的输入输出通道。数据采集系统的输入又称为数据的收集;数据采集系统的输出又称为数据的分配。 121 数据采集系统的分类 数据采集系统的结构形式多种多样,用途和功能也各不相同,常见的分类方法有以下几种:根据数据采集系统的功能分类:数据收集和数据分配;根据数据采集系统适应环境分类:隔离型和非隔离型,集中式和分布式,高速、中速和低速型;根据数据采集系统的控制功能分类:智能化数据采集系统,非智能化数据采集系统;根据模拟信号的性质分类:电压信号和电流信号,高电平信号和低电平信号,单端输入(SE)和差动输入(DE),单极性和双极性;根据信号通道的结构方式分类:单通道方式,多通道方式。 122 数据采集系统的基本功能 数据采集系统的任务,具体地说,就是采集传感器输出的模拟信号并转换成计算机能识别的数字信号,然后送入计算机,根据不同的需要由计算机进行相应的计算和处理,得出所需的数据。与此同时,将计算得到的数根进行显显示和打印,以便文现对某些物理量的监视。由数据采集系统的任务可以知道,数据采集系统具有以下几方面的功能:数据采集、模拟信号处理、数字信号处理、开关信号处理、二次数据计算、屏幕显示、数据存储、打印输出、人机联系。 123 数据采集系统的结构形式 从硬件力向来看,白前数据采集系统的结构形式主要有两种:一种是微型计算机数据采集系统;另一种是集散型数据采集系统。 微型计算机数据采集系统是由传感器、模拟多路开关、程控放大器、采样/保持器、AD转换器、计算机及外设等部分组成。集散型数据采集系统是计算机网络技术的产物,它由十个“数据采集站”和一台上位机及通信线路组成。数据采集站一般是由单片机数据采集装置组成。位于生产设备附近,可独立完成数据采集和颈处理任务,还可将数据以数字信号的形式传送给上位机。 二 数据采集系统设计的基本原则 对于不同的采集对象,系统设计的具体要求是不相同的。但是,由于数据采集系统是由硬件和软件两部分组成的,因此,系统设计的一些基本原则是大体相同的。 21 硬件设计的基本原则 (1) 经济合理 系统硬件设计中,一定要注意在满足件能指标的前提下,尽可能地降低价格,以便得到高的性能价格比,这是硬件设计中优先考虑的一个主要因素,也是一个产品争取市场的主要因素之一。 (2) 安全可靠 选购设备要考虑环境的温度、湿度、压力、振动、粉尘等要求,以保认在规定的下作环境下,系统性能稳定、工作可靠。要有超量程和过载保护,保证输入、输出通道正常工作。要注意对交流市电以及电火花等的隔离。要保证连接件的接触可靠。 (3) 足够的抗干扰能力 有完善的抗干扰措施,是保证系统精度、工作正常和不产生错误的必要条件。 22 软件设计的基本原则 (1) 结构合理 程序应该采用结构模块化设计。这不仅有利于程序的进一步扩充,而且也有利于程序的修改和维护。在程序编序时,要尽量使得程序的层次分明,易于阅读和理解,同时还可以简化程序,减少程序对于内存的使用量。当程序中有经常需要加以修改或变化的参数时,应该设计成独立的参数传递群序,避免程序的频繁修改。 (2) 操作性能好 操作件能好是指使用方便。这点对数据采集系统来说是很重要的。在开发程序时,应该考虑如何降低对操作人员专业知识的要求。 (3) 系统应设计一定的检测程序,例如状态检测利诊断程序,以便系统发生故障时容易确定故障部位,对于重要的参数要定时存储,以防止因掉电而丢失数据。 (4) 提高程序的执行速度。 (5) 给出必要的程序说明。三 芯片介绍3.1 At89s51AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4K的可编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片机芯片中,ATMEL公司的功能强大,低价位AT89S51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。主要性能参数:l 与MCS-51产品指令系统完全兼容l 4K字节在系统编程(ISP)Flash 闪速存储器l 1000次擦写周期l 4.0-5.5V的工作电压范围l 全静态工作模式:0HZ-33MHZl 三级程序加密锁l 128*8字节内部RAMl 32个可编程I/O口线l 2个16位定时/计数器l 6个中断源l 全双工串行UART通道l 低功耗空闲和掉电模式l 中断可从空闲模式唤醒系统l 看门狗(WDT)及双数据指针l 掉电标示和快速编程特性l 灵活的在系统编程(ISP-字节或页写模式)功能特性概述: AT89S51提供以下标准功能:4K字节闪速存储器,128字节内部RAM,32个I/O口线,看门狗(WDT),两个数据指针,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89S51可降至0HZ的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中到内容,但振荡器停止工作并禁止其它所有工作部件直到下一个硬件复位。引脚功能说明:Vcc:电源电压GND:地P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。P1口:P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作为输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。Flash编程和程序校验期间,P1接收低8位地址。P2口:P2口是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输出口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVE DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVX Ri指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。Flash编程或校验时,P2亦接收高位地址和其他控制信号。P3口:P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输出端口。作输入端时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如下表所示:P3口还接手一些用于Flash闪速存储器编程和程序校验的控制信号。RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。WDT溢出将使该引脚输出高电平,设置SFR AUXR的DISRTO位(地址8EH)可打开或关闭该功能。DISRTO位缺省为RESET输出高电平打开状态。ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址所存允许)输出脉冲用于所存地址的低8位字节。即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令ALE才会被激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。PSEN:程序储存允许(PSEN)输出是外部程序存储器的选通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的PSEN信号。EA/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需要注意的是:如果加密位LB1被编程,复位时内部会所存EA端状态。如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。Flash存储器编程时,该引脚加上+12V的编程电压VPP。XTAL1:振荡器反相放大器及内部时钟发生器的输入端。XTAL2:振荡器反相放大器的输出端。3.2 AD0809 ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。ADC0809各脚功能如下:D7-D0:8位数字量输出引脚。IN0-IN7:8位模拟量输入引脚。VCC:+5V工作电压。GND:地。REF(+):参考电压正端。REF(-):参考电压负端。START:A/D转换启动信号输入端。ALE:地址锁存允许信号输入端。(以上两种信号用于启动A/D转换)EOC:转换结束信号输出引脚,开始转换时为低电平,当转换结束时为高电平。OE:输出允许控制端,用以打开三态数据输出锁存器。CLK:时钟信号输入端(一般为500KHz)。A、B、C:地址输入线。ADC0809对输入模拟量要求:信号单极性,电压范围是05V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。地址输入和控制线:4条 ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B和C为地址输入线,用于选通IN0IN7上的一路模拟量输入。数字量输出及控制线:11条ST为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE1,输出转换得到的数据;OE0,输出数据线呈高阻状态。D7D0为数字量输出线。CLK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,VREF(),VREF()为参考电压输入。ADC0809应用说明(1) ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。(2) 初始化时,使ST和OE信号全为低电平。(3) 送要转换的哪一通道的地址到A,B,C端口上。(4) 在ST端给出一个至少有100ns宽的正脉冲信号。(5) 是否转换完毕,我们根据EOC信号来判断。(6) 当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。3.3 ADC1674 AD1674是美国AD公司推出的一种完整的 12位并行模/数转换单片集成电路。该芯片内部自带采样保持器(SHA)、10伏基准电压源、时钟源以及可和微处理器总线直接接口的暂存/三态输出缓冲器。 1 AD1674的基本特点和参数如下: 带有内部采样保持的完全 12位逐次逼近(SAR)型模/数转换器; 采样频率为 100kHz; 转换时间为 10s; 具有1/2LSB的积分非线性(INL)以及12位无漏码的差分非线性(DNL); 满量程校准误差为 0.125%; 内有+10V基准电源,也可使用外部基准源; 四种单极或双极电压输入范围分别为5V,10V,0V和 0V20V; 数据可并行输出,采用8/12位可选微处理器总线接口; 内部带有防静电保护装置(ESD),放电耐压值可达4000v 采用双电源供电:模拟部分为12V/15V,数字部分为+5V; 使用温度范围: AD1674J/K为 070(C级); AD1674A/B为-4085(I级); AD1674T为-55+125(M级)。 采用 28脚密封陶瓷 DIP或 SOIC封装形式。 功耗低,仅为 385mW。 2 内部结构及引脚说明 AD1674的引脚按功能可分为逻辑控制端口、并行数据输出端口、模拟信号输入端口和电源端口四种类型。 (1)逻辑控制端口 12/8:数据输出位选择输入端。当该端输入为低时,数据输出为双8位字节;当该端输入为高时,数据输出为单 12位字节。 CS:片选信号输入端; R/C:读/转换状态输入端。在完全控制模式下,输入为高时为读状态;输入为低时为转换状态;在独立工作模式下,在输入信号的下降沿时开始转换。 CE:操作使能端;输入为高时,芯片开始进行读/转换操作。A0:位寻址/短周期转换选择输入端。在转换开始时,若 A0为低,则进行 12位数据转换;若A0为高,则进行周期更短的8位数据转换;当 R/C=1且 12/8=0时,若 A0为低,则在高 8位(DB4DB11)作数据输出;若A0为高,则在DB0DB3和 DB8DB11作数据输出,而 DB4DB7置零。 STS:转换状态输出端。输出为高时表明转换正在进行;输出为低时表明转换结束。 (2)并行数据输出端口 DB11DB8:在 12位输出格式下,输出数据的高 4位;在 8位输出格式下,A0为低时也可输出数据的高 4位。 (3)模拟信号输入端口10VIN:10V范围输入端,包括 0V10V单极输入或5V双极输入; 20VIN:20V范围输入端,包括 0V20V单极输入或10V双极输入; 应当注意的是:如果已选择了其中一种作为输入范围,则另一种不得再连接合作。 (4)供电电源端口 REF IN:基准电压输入端,在10V基准电源上接 50电阻后连于此端; REF OUT:+10V基准电压输出端; BIP OFF:双极电压偏移量调整端,该端在双极输入时可通过50电阻与 REF OUT端相连;在单极输入时接模拟地。图3给出了 AD1674在单极和双极输入时的两种连接电路。 VCC:+12V/+15V模拟供电输入; VEE:-12V/-15V模拟供电输入; VLOGIC:+5V逻辑供电输入;AGND/DGND:模拟/数字接地端; 表 1给出了 AD1674的逻辑控制真值表。 CE CS R/C 12/8 A0 执 行 操 作 0 无操作 1 无操作 1 0 0 0 启动 12位数据转换 1 0 0 1 启动 8位数据转换 1 0 1 1 允许 12位并行输出1 0 1 1 0 允许高8位并行输出 1 0 1 0 1 允许低4位并行输出3.4 MAX7221 MAX7221 是 Maxim(美信)公司专为 LED 显示驱动而设计生产的串行接口八位 LED 显 示驱动芯片.该芯片包含有七段译码器、位和段驱动器、多路扫描器、段驱动电流调节器、亮度 脉宽调节器及多个特殊功能寄存器.该芯片采用串行接口方式,可以很方便地和单片机相连,未经扩展最多可用于 8 位数码显 示或 64 段码显示.经实际使用发现,该芯片具有占用单片机 I/O 口少(仅三线)、显示多样、可 靠性高、简单实用、编程灵活方便的特点.(1)10MHz 的串行接口;(2)BCD 译码/非译码模式选择;(3)耗电仅 150uA 的省电模式(显示关闭);(4)数字和模拟双重亮度控制;(5)SPI、QSPI、Microwire 等多种串行接口;(6)显示位数可方便地进行扩展.Din 脚,串行数据输入端,数据存入内部 16 位移位寄存器.DIG0DIG7 脚,8 位共阴极数码管的控制输入端,显示关闭时输出高电平. GND 脚,接地端,4 和 9 脚都要接地.CS 脚,片选输入端,当 CS=0 时,串行数据存入移位寄存器,当 CS 为上升沿时锁存最后16 位数据.SEGASEGG,SEGDP 脚,数码管七段驱动和小数点驱动端,关闭显示时各段驱动输出为高电平。Iset 脚,连接到 Vdd 的电阻连接端,用来模拟设定各段驱动电流.Vdd 脚,5V 正电压输入端.Dout 脚,串行数据输出端,数据由 Din 输入,经 16.5 个时钟延迟后由 Dout 引脚输出,此引 脚用来扩展 MAX7221.串行数据输入输出时 CS 必须为低电平,串行数据由 Din 送入一个 16 位的数据包,并在每 个时钟上升沿时存入内部 16 位移位寄存器.数据经 16.5 个周期后,在时钟的下降沿由 Dout 引 脚输出.16 位数据 D0D15 的排列见表 1.D0D7 包含数据,D8D11 包含寄存器地址,D12D15 为未定义位,芯片最先接收 D15 位.控制寄存器的地址图见表 2.表 1D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0XXXX地址数据表 2寄存器地址HEX CODE寄存器地址HEX CODED15- D12D11D10D9D8D15- D11D10D9D8D7空操作X0000X0数字 6X0111X7数字 0X0001X1数字 7X1000X8数字 1X0010X2译码X1001X9数字 2X0011X3亮度X1010XA数字 3X0100X4显示位X1011XB数字 4X0101X5省电X1100XC数字 5X0110X6测试X1111XF3.5 MAX232MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。第三部分是供电。15脚GND、16脚VCC(+5v)。特点:1、符合所有RS232C所有特点。2、只需要单一 +5V电源供电3、片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压V+、V-4、功耗低,典型供电电流5mA5、内部集成2个RS-232C驱动器6、内部集成两个RS-232C接收器7、高集成度,片外最低只需4个电容即可工作。3.6 28642864为单一5V供电,读取时间最大为250ns,标准字节写入时间是10ms。2864有五种工作方式可供选择,见表3所列。表3 2864工作方式选择引脚状态方式I/O7I/O0RDY/读 出写 入维 持禁止写禁止写001010101数据输出数据输入高阻高阻/数据输出高阻/数据输出高阻低高阻高阻高阻3.7 6264Intel 6264芯片(1)Intel 6264的特性及引脚信号Intel 6264的容量为8KB,是28引脚双列直插式芯片,采用CMOS工艺制造A12A0(address inputs):地址线,可寻址8KB的存储空间。D7D0(data bus):数据线,双向,三态。(output enable):读出允许信号,输入,低电平有效。(write enable):写允许信号,输入,低电平有效。(chip enable):片选信号1,输入,在读/写方式时为低电平。CE2(chip enable):片选信号2,输入,在读/写方式时为高电平。VCC:+5V工作电压。GND:信号地。(2)Intel 6264的操作方式Intel 6264的操作方式由CE2的共同作用决定 写入:当和为低电平,且和CE2为高电平时,数据输入缓冲器打开,数据由数据线D7D0写入被选中的存储单元。 读出:当和为低电平,且和CE2为高电平时,数据输出缓冲器选通,被选中单元的数据送到数据线D7D0上。 保持:当为高电平,CE2为任意时,芯片未被选中,处于保持状态,数据线呈现高阻状态。3.8 74LS373373为三态输出的八 D 透明锁存器,共有 54S373 和 74LS373 两种线路 引脚图373 的输出端 O0O7 可直接与总线相连。 当三态允许控制端 OE 为低电平时,O0O7 为正常逻辑状态,可用来驱动负载或总线。当 OE 为高电平时,O0O7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。 当锁存允许端 LE 为高电平时,O 随数据 D 而变。当 LE 为低电平时,O 被锁存在已建立的数据电平。当 LE 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善 400mV。 引出端符号: D0D7 数据输入端 OE 三态允许控制端(低电平有效) LE 锁存允许端 O0O7 输出端四 硬件电路4.1数据采集电路4.2数据存储电路4.3 数据显示电路4.4串口电路4.5电源电路4.6复位电路4.7 晶振电路五,软件设计方案一:使用AD1674进行模数转换:#include#include#define uchar unsigned char #define uint unsigned int#define addo (10.0/4095.0)/转换进率,12位精度(212-1=4095),满量程为10V/*管脚定义*/sbit DIN = P25;sbit SCL = P26;sbit CS = P27;sbit STS = P20;sbit CS1 = P21;sbit A0 = P22;sbit CE = P23;sbit RC = P24;static uchar disbuf8;/显示缓存/*微秒延时函数*/void delay_us(uchar n) uchar i;while(n-) for(i=0;i10;i+);/*毫秒延时函数*/void delay_ms(uint n)uchar i;while(n-) for(i=0;i100;i+);/*向MAX7221串行写一个字节的数据*/void WriteData(uchar dat)uchar i;for(i=0;ii)?1:0; SCL = 0; delay_us(2); SCL = 1; delay_us(2);/*向MAX7221中指定的地址写入数据*/void MAX7221_Write(uchar addr,uchar dat)CS = 0;WriteData(addr);WriteData(dat);CS = 1;/*MAX7221的初始化*/void MAX7221_Initial(void)MAX7221_Write(0x0A,0x07);/LED亮度值设置为8/16MAX7221_Write(0x0B,0x07);/扫描显示器的个数为8个MAX7221_Write(0x0C,0x01);/正常操作模式(非掉电模式)MAX7221_Write(0x0F,0x00);/正常显示模式(非测试模式)MAX7221_Write(0x09,0xff);/对07的8个数据进行B型BCD译码/*LED显示函数*/void display(void)uchar i;for(i=0;i8;i+) MAX7221_Write(i+1,disbufi);/*读取AD1674转换结果*/uint AD1674_Read(void) uint temp; uchar temp1,temp2; CS1 = 1; CE = 0; /初始化,关闭数据采集 CS1 = 0; A0 = 0; RC = 0; CE = 1; /CE=1,CS1=0,RC=0,A0=0启动12位温度转换 _nop_(); while(STS=1);/等待数据采集结束 CE = 0; /芯片使能关闭 RC = 1; A0 = 0; CE = 1; /CE=1,CS1=0,RC=1,12/8=1,A0=0允许高八位数据并行输出 _nop_(); temp1 = P0;/读取转换结果的高八位 CE = 0;/芯片使能关闭 RC = 1; A0 = 1; CE = 1;/CE=1,CS1=0,RC=1,12/8=0,A0=1允许低四位数据并行输出 _nop_(); temp2 = P0;/读取转换结果的低四位 CE = 0; CS1 = 1;/关闭AD1674数据采集 temp = (temp14);/返回转换结果,右移四位是因为temp2为P0口的高四位/*向缓冲器中写入要显示的数据*/void HEXTOBCD(uchar chn) uint temp; temp = (int)(AD1674_Read()*addo*1000);/转换为可显示的实际温度值 disbuf0 = temp/10000; disbuf1 = (temp%10000/1000)|0x80;/带小数点的位显示 disbuf2 = temp%1000/100; disbuf3 = temp%100/10; disbuf4 = temp%10; disbuf5 = 15; disbuf6 = 15;/空显示 disbuf7 = chn;/显示通道号/*主函数*/void main()MAX7221_Initial();while(1) HEXTOBCD(1);/采集第一通道的数据 display();/显示采集到的数据 delay_ms(10);方案二:使用ADC0809进行模数转换:#include#include#define uchar unsigned char #define uint unsigned int#define addo (5.0/255.0)sbit DIN = P20;sbit SCL = P22;sbit CS = P21;/sbit STS = P23;/sbit EOC = P24;/sbit OE = P26;static uchar disbuf8;sbit ST=P30;sbit OE=P31;sbit EOC=P32;sbit CLK=P24;unsigned char channel=0xbc;/IN3void delay_us(uchar n) uchar i;while(n-)for(i=0;i100;i+);void delay_ms(uint n)uchar i;while(n-)for(i=0;i100;i+);void WriteData(uchar dat)uchar i;for(i=0;ii)?1:0;delay_us(2);SCL = 1;delay_us(2);void MAX7221_Write(uchar addr,uchar dat)CS = 0;WriteData(addr);WriteData(dat);CS = 1;void MAX7221_Initial(void)MAX7221_Write(0x0A,0x07);MAX7221_Write(0x0B,0x07);MAX7221_Write(0x0C,0x01);MAX7221_Write(0x0F,0x00);MAX7221_Write(0x09,0xff);void display(void)uchar i;for(i=0;i8;i+)MAX7221_Write(i+1,disbufi);uint AD0809_Read(void) unsigned char getdata; ST=0; ST=1; ST=0; while(EOC=0); OE=1; getdata=P0; OE=0; return (getdata);void HEXTOBCD(uchar chn) uint temp; temp = (int)(AD0809_Read()*addo*1000); disbuf0 = temp/10000; disbuf1 = (temp%10000/1000)|0x80; disbuf2 = temp%1000/100; disbuf3 = temp%100/10; disbuf4 = temp%10; disbuf5 = 15; disbuf6 = 15; disbuf7 = chn;void main()/* int i; for(i=0;i8;i+) disbufi=0; display(); delay_ms(10);*/ /*TMOD=0x02; TH0=216; TL0=216; TR0=1; ET0=1; EA=1;*/P3=channel; MAX7221_Initial();while(1) HEXTOBCD(1); display(); delay_ms(2);/*void t0(void) interrupt 1 using 0 CLK=!CLK;*/六 心得体会 先要谢谢指导我们以及一周来一直陪伴我们的毛建东老师和周春艳老师,同时也要感谢我们组的成员。这是我们第二次做电路板了,经过一段时间的查找资料,原理设计,画原理图,再到做pcd版,焊接元件,直到最后的调试成功。让我深有体会。一开始的工作是我们的韩康康组长动手比较多,作为组员的我虽然一直关心着我们的课程设计,但还是没在其中参与多少,只是组长一直辛苦在忙,我们的组长很负责任,时时刻刻在告诉我们课程设计的进展,让我们也慢慢的放下了心中的一块石头。在最后做板子以及实物的时候,我们一起开始了最后的课程设计的部分。因为组长的知识丰富,所以我们大部分的工作都交给了组长,但是我们的其他组员也没有偷懒,当出现困难的时候我们集思广益,查找资料,认真检查。韩康康主要负画电路以及焊电路板,我们主要负责调试程序和查找资料以及打下手,制作的过程中出现的种种问题,让我们焦头烂额,但是我们没有就此灰心,虽然我们是在最后才完成的,但是我相信我们的收获是最多的。首先,再一次让我知道了动手能力的重要性,即使我们能把专业知识学的非常的透彻,但是面对实物的时候,很多时候就会束手无策了,由于操作的原因会出现各种各样的问题。比如说,不细心就会用交流电去测直流电,焊接技术不熟练就会造成短路现象,操作顺序不当就会烧坏版子。其次,让我知道了团队精神的重要性,如果把这个事情让一个人来完成,是不可能的事情,因为设计电路板的时候会出现很多意想不到的问题与困难,这些问题和困难都是需要一个团队共同来解决与克服的。没有团队就没有课程设计的成功,在实训的这些天里,我们组的成员都是团结在一起的,无论什么时候我们都没有放弃,尽管有时候已经达到了我们的极限。 这一次实训真的很艰辛,很难忘。我们几乎就是早晨出,熄灯才回。每一天都很疲惫,但是经过这种一次次的磨练,我们的一支才会越坚定,我们的经验才会越丰富,我们的团队才会越团结,我相信在下一次实训中我们一定回又快又好的完成实训任务。参考文献1 51单片机C语言开发与实例 汤竞南 沈国琴编 人民邮电出版社2 单片机原理及实用技术 李刚民 陈忠平编 高等教育出版社3 51单片机C语言开发详解 张天凡 电子工业出版社附录protel原理图proteus仿真图PCB板实物图
展开阅读全文