《基于单片机的数码管显示的K型热电偶温度计的设计与仿真毕业论文.doc》由会员分享,可在线阅读,更多相关《基于单片机的数码管显示的K型热电偶温度计的设计与仿真毕业论文.doc(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 基于单片机的数码管显示的K型热电偶温度计的设计与仿真毕业论文34 / 36目 录摘要IABSTRACTII第1章绪论1第2章系统原理概述22.1 热电偶测温基本原理22.2 热电偶冷端补偿方案22.2.1分立元气件冷端补偿方案22.2.2集成电路温度补偿方案32.2.3方案确定42.3硬件组成原理42.4软件系统工作流程4第3章元件和软件介绍63.1单片机选择与最小系统63.2 热电偶介绍73.2.1K型热电偶概述73.3 数字温度转换芯片MAX6675简介73.3.1冷端补偿专用芯片MAX6675性能特点83.3.2冷端补偿专用芯片MAX6675温度变换93.4 KEIL软件仿真软件介绍9
2、3.5 PROTEUS硬件仿真软件介绍10第4章程序设计与硬件仿真114.1 数据的采集114.2 数据传输部分114.3 数据处理部分144.3.1 数据转换154.3.2 进制转换174.4 显示部分程序与仿真19第5章系统仿真23结论25参考文献26附录27致谢34 第1章绪论温度是反映物体冷热状态的物理参数,对温度的测量在冶金工业、化工生产、电力工程、机械制造和食品加工、国防、科研等领域中有广泛地应用。在某些特殊的场合对温度的检测速度有很高的要求,例如:在测量汽车发动机吸入空气的温度的时候,就要求热响应时间小于1s;航天飞机的主发动机的温度测量要求0.4s 完成等。因此针对以上问题就有
3、人提出温度快速测量的思想。通常用来测量温度的传感器有热电阻温度传感器、热敏电阻、热电偶、半导体温度传感器等几种。这些常用温度传感器一般的温度测量中可以满足响应速度的问题。但在特殊的场合就不能达到快速检测的要求,例如在气体温度测量时候,由于温度传感器自身的热滞特性,而气体传热过程又比较缓慢,气体温度测量就有很大滞后。工业常用的精度较高的温度传感器有铂热电阻、半导体温度传感器等。铂热电阻具有温度测量围大、重复性好、精度高等特点,但是响应不是很快,特别是在对气体温度测量时至少要几秒钟1。所以用温度传感器一般都存在着对气体温度变化响应较慢的问题。在对温度实时性测量要求比较高的系统,运用常用温度测量方法
4、很难做到对温度的快速测量,对系统的精度影响就很大。但是将热电偶应用在基于单片机的嵌入式系统领域时,却存在着以下几方面的问题2。非线性:热电偶输出热电势与温度之间的关系为非线性关系,因此在应用时必须进行线性化处理。冷端补偿:热电偶输出的热电势为冷端保持为0时与测量端的电势差值,而在实际应用中冷端的温度是随着环境温度而变化的,故需进行冷端补偿。数字化输出:与嵌入式系统接口必然要采用数字化输出与数字化接口,而作为模拟小信号测温元件的热电偶显然无法直接满足这个要求。在许多热工实验中,往往面临热电偶冷端温度问题,不管是采用恒温补偿法(冰点补偿法)还是电桥补偿法,都会带来实验费用较高、实际的检测系统较复杂
5、.难以达到实时测量、接口转换电路复杂等问题,而随着计算机测控技术在工业生产制造领域的普遍应用,温度参数的微机化测量与控制已成为必然趋势。因此我们必须解决对热电偶测量信号的放大调理、非线性校正、冷端补偿、模数转换、数字输出接口等一系列复杂的问题,以与解决模拟与数字电路硬件设计过程和建表、查表、插值运算等复杂的软件编制过程,以达到使电路简化,成本减少,增加系统可靠性的目的。鉴于上面的分析,本论文主要任务是设计一种基于高精度K型热电偶传感器测温系统。采用带有冷端补偿的温度转换芯片MAX6675、K型热电偶、89C51单片机、数码管等元器件设计出相应温度采集电路、温度转换电路、数码管显示电路。系统用单
6、片机对带有冷端补偿的温度转换芯片MAX6675进行控制,要达到任务书中的技术指标,并对系统进行protues的调试和仿真试验,使其具有良好的实用性能,能够实现对固体表面、液体和气体温度的高精度测量。第2章系统原理概述2.1热电偶测温基本原理热电偶测温的基本原理是两种不同成份的材质导体组成闭合回路2,当两端存在温度梯度时,回路中就会有电流通过,此时两端之间就存在热电动势,这就是所谓的塞贝克效应。两种不同成份的均质导体为热电极,温度较高的一端为工作端(热端),温度较低的一端为自由端(冷端),自由端通常处于某个恒定的温度下。根据热电动势与温度的函数关系制成热电偶分度表;分度表是自由端温度在0时的条件
7、下得到的,不同的热电偶具有不同的分度表。在热电偶回路中接入第三种金属材料时,只要该材料两个接点的温度相同,热电偶所产生的热电势将保持不变,即不受第三种金属接入回路中的影响。因此,在热电偶测温时,可接入测量仪表,测得热电动势后即可知道被测介质的温度。热电偶的热电势,应注意如下几个问题:、热电偶的热电势是热电偶两端温度函数的差,而不是热电偶两端温度差的函数;、热电偶所产生的热电势的大小当热电偶的材料是均匀时,与热电偶的长度和直径无关,只与热电偶材料的成份和两端的温差有关;、当热电偶的两个热电偶丝材料成份确定后,热电偶热电势的大小,只与热电偶的温度差有关。若热电偶冷端的温度保持一定,这时热电偶的热电
8、势仅是工作端温度的单值函数。2.2热电偶冷端补偿方案热电偶测量温度时要求其冷端(测量端为热端,通过引线与测量电路连接的端称为冷端)的温度保持不变,其热电势大小才与测量温度呈一定的比例关系。若测量时,冷端的(环境)温度变化,将影响严重测量的准确性。在冷端采取一定措施补偿由于冷端温度变化造成的影响称为热电偶的冷端补偿。2.2.1分立元气件冷端补偿方案方案一的热电偶冷端温度补偿器件是由分立元件构成的,其体积大,使用不够方便,而且在改变桥路电源或热电偶类型时需要重新调整电路的元件值。主要包括温度采集电路、信号放大电路、A/D转换电路、热电偶冷端补偿电路、数码管显示电路等。其系统框图如图2.1。信号放大
9、热电偶温度信号采集系统单片机控制器AD转换电路热电偶冷端测量电路数码管显示电路报警电路图2.1 分立元气件冷端补偿2.2.2集成电路温度补偿方案方案二采用热电偶冷端补偿专用芯MAX6675,MAX6675温度转换芯片具有冷端温度补偿与对温度进行数字化测量这两项功能5。一方面利用置温度敏感二极管将环境温度转换成补偿电压,另一方面又通过模数转换器将热电势和补偿电压转换为代表温度的数字量, 将二者相加后从串行接口输出的测量结果,即为实际温度数据。主要包括温度采集电路、MAX6675温度转换电路、数码管显示电路等。其系统框图如图2.2。热电偶温度信号采集系统MAX6675温度信号转换芯片单片机控制器数
10、码管显示电路报警电路图2.2 集成电路温度补偿2.2.3方案确定综合对比以上两种方案,方案一电路复杂,且测量不精确照成误差较大,方案二采用集成温度转换芯片不仅能很好的解决冷端温度补偿与温度数值化问题,并消除由热电偶非线性而造成的测量误差,且精确度高,可实现电路的优化设计。故最后采用方案二。2.3硬件组成原理本系统硬件主要由热电偶温度采集电路、MAX6675温度处理电路、89C51单片机控制电路、超量程报警电路和数码管显示电路组成。热电偶采用分度号为K的热电偶,为了减少外界信号的干扰通过双绞线跟MAX6675芯片直接相连接。MAX6675芯片通过模拟SPI串行接口传输数据,采用的89C51单片机
11、对带有冷端补偿的温度转换芯片MAX6675进行控制。本系统设计还具有报警的特点,当所测量的温度低于零摄氏度或者高于400摄氏度时报警电路发出警报。显示电路由89C51单片机通过74LS373对六位共阴数码管控制,当所测温度在规定围时就可以通过数码管快速显示出来2.4软件系统工作流程系统的软件工作流程为:热电偶采集的温度数据;温度数据经过MAX6675部电路的AD转换、冷端补偿、部校正6;温度转换电路将处理后12位数字温度量以串行方式送给单片机;单片机将数字量进行软件算法处理;如果测量温度在测量围,最后通过数码管显示出测量温度;如果超出测量围由单片机控制使报警电路报警。其软件工作流程图如图2.3
12、。系统软件设计主要包含主程序,重新测量、超量程报警子程序、显示子程序等功能模块。开始读取max6675数据数据是否稳定否是从16位数据中得到12位温度数据是否超出量程报警电路 是否将数据进行进制转换调用显示子程序 返回图2.3 软件设计总体流程图其中,SPI串口通信,可以利用proteus硬件仿真来查看,而数据处理是由keil软件仿真来查看结果,最后还是由proteus来验证整个设计是否成功。第3章 元件和软件介绍3.1单片机选择与最小系统MCU是整个系统的控制核心,由于温度测量系统的接口方便,综合考虑整个系统,选用美国ATMEL公司生产的AT89C51型单片机3。AT89C51是一种带4K字
13、节闪烁可编程可擦除只读存储器的低电压,高性能CMOS 8位微处理器。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,其外观引脚图如下:图3.7 AT89C51外观图 AT89C51提供以下标准功能4:4k字节的flash闪速存储器,128字节部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片振荡器与时钟电路。同时,AT89C51可降至0hz的静态逻辑操
14、作,并支持两种软件可选的节电工作模式、空闲方式停止CPU工作,但允许RAM,定时/技术器,串行通信口与中断系统继续工作。掉电方式保存RAM中的容,但振荡器停止工作并禁止其他所有部件工作指导下一个硬件复位。AT89C51共有4个双向的8位并行I/O端口,分别为P0P3,共有32根口线,端口的每一位均由锁存器、输出驱动器和输入缓冲器所组成。P0P3的端口寄存器属于特殊功能寄存器系列。这四个端口除了可以按字节寻址外还可以位寻址。其中P0口为漏极开路作为输出使用时应外加上拉电阻,P3口既可以做为普通I/O口使用,还可以作为特定的功能引脚。虽然51单片机只有一个串口接口,但其I/O口既可以用字节寻址也可
15、以位寻址,这样在实际应用中,我们就可以通过模拟不同总线的时序特征来实现各种数据的传输。AT89C51单片机部有一个功能强大的全双工的一部通信串口。其串行口有四种工作方式:分别为同步通信方式、8位异步收发、9位异步收发(特定波特率)、9位异步收发(定时器控制波特率)。它有两个物理上独立接收发送缓冲器SBUF,可同时发送、接收数据。波特率可由软件设置片的定时器来控制,而且每当串行口接收或发送1B完毕,均可发出中断请求5。3.2 热电偶介绍热电偶是工程上应用最广泛的温度传感器。它是将温度量转换为电量变化的装置。它构造简单,使用方便,具有较高的准确度、稳定性与复现性,温度测量围宽,在温度测量中占有重要
16、的地位。当两种不同材料的导体或半导体连成闭合回路时,将两个接点分别置于温度为T和T0的热源中,该回路会产生热电势。热电势的大小反映两个接点温度差,保持T0不变,热电势随着温度T变化而变化。测得热电势的值,即可知道温度T的大小。图3.1热电偶测温原理图产生的热电势由两部分组成:温差电势和接触电势。3.2.1K型热电偶概述K型热电偶作为一种温度传感器,K型热电偶通常和显示仪表,记录仪表和电子调节器配套使用。K型热电偶可以直接测量各种生产中从0到1300围的液体蒸汽和气体介质以与固体的表面温度6。图3.2热电偶镍铬-偶(K)型热电偶是目前用量最大的廉金属热电偶,其用量为其他热电偶的总和。K型热电偶丝
17、直径一般为1.24.0mm。正极(KP)的名义化学成分为:Ni:Cr=92:12,负极(KN)的名义化学成分为:Ni:Si=99:3,其使用温度为-1300。K型热电偶具有线性度好,热电动势较大,灵敏度高,稳定性和均匀性较好,抗氧化性能强,价格便宜等优点,能用于氧化性惰性气氛中广泛为用户所采用。K型热电偶不能直接在高温下用于硫,还原性或还原,氧化交替的气氛中和真空中,也不推荐用于弱氧化气氛.3.3 数字温度转换芯片MAX6675简介MAX6675是美国Maxin公司生产的基于SPI总线的专用芯片9,不仅能对K型热电偶进行冷端补偿,还能对热电势信号作数字处理,具有很高的可靠性和稳定性,可广泛应用
18、于工业、仪器仪表、自动化领域等。其部结构框图如图3.3所示。图3.3 MAX6675部结构框图3.3.1冷端补偿专用芯片MAX6675性能特点MAX6675的主要特性如下:简单的SPI串行口温度值输出。0+l024的测温围。12位0.25的分辨率。片冷端补偿。高阻抗差动输入。热电偶断线检测。单一+5V的电源电压.低功耗特性。工作温度围-20+85。2000V的ESD保护。该器件采用8引脚50贴片封装。引脚排列如图3.4所示,引脚功能如表3-1。图3.4脚功能图表3-1引脚功能表引脚名称功能1GND接地端2T-K型热电偶负极3T+K型热电偶正极4VCC正电源端5SCK串行时钟输入6CS片选端,C
19、S为低时、启动串行接口7SO串行数据输出8N.C.空引脚3.3.2冷端补偿专用芯片MAX6675温度变换MAX6675部具有将热电偶信号转换为与ADC输入通道兼容电压的信号调节放大器,T+和T-输入端连接到低噪声放大器A1,以保证检测输入的高精度,同时使热电偶连接导线与干扰源隔离。热电偶输出的热电势经低噪声放大器A1放大,再经过A2电压跟随器缓冲后,被送至ADC的输入端。在将温度电压值转换为相等价的温度值之前,它需要对热电偶的冷端温度进行补偿,冷端温度即是MAX6675周围温度与0实际参考值之间的差值。对于K型热电偶,电压变化率为41V/,电压可由线性公式Vout=(41V/)(tR-tAMB
20、)来近似热电偶的特性。上式中,Vout为热电偶输出电压(mV),tR是测量点温度;tAMB是周围温度3.4 KEIL软件仿真软件介绍 keil c51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统7,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么keil几乎就是你的不二之选
21、,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。 此次的毕业设计主要是利用KEIL来完成程序的编写,主要用汇编语言来编写程序,用计时器来完成数码管动态显示的。在16进制转换成10进制时,利用keil来查寄存器从而看程序是否能达到转换的目的。3.5 PROTEUS硬件仿真软件介绍proteus软件是英国Labcenter electronics公司出版的EDA工具软件8。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机与外围器件。它是目前最好的仿真单片机与外围器件的工具。虽然目前国推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致
22、力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。迄今为止是世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MATLAB等多种编译。此次设计中,利用proteus完成整个电
23、路的硬件仿真,并且在开始的数据采集阶段,利用proteus的示波器来查看数据是否传输。以与最后的阶段,看数据是否正确显示。第4章 程序设计与硬件仿真 在这个部分,是根据数据的采集,传输,处理,显示来逐渐完成的。其中,有的部分可以用keil来查看结果,有的部分可以用proteus来查看程序结果。4.1 数据的采集热电偶作为一种主要的测温元件,具有结构简单、制造容易、使用方便、测温围宽、测温精度高等特点14。但是,热电偶的应用却存在着非线性、冷端补偿、数字化输出等几方面的问题。设计中采用的MAX6675是一个集成了热电偶放大器、冷端补偿、A/D转换器与SPI串口的热电偶放大器与数字转换器,其电路如
24、图3-14所示。K型热电偶的两端分别跟MAX6675芯片的T-跟T+相连,为了允许热电偶断路检测,T-引脚必须接地。MAX6675的测量精度对电源耦合噪声较敏感。为降低电源噪声影响,在MAX6675的电源引脚附近接入1只0.1F陶瓷旁路电容。温度由热电偶采集,然后将数据直接送给冷端补偿芯片MAX6675芯片进行处理,处理后送给单片机控制电路,完成简单的温度采集过程9。图4.1 温度采集硬件图4.2 数据传输部分数据传输,即用单片机读取max6675的数字信号,其通信模式为SPI。 串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出
25、的一种同步串行接口,Motorola公司生产的绝大多数MCU(微控制器)都配有SPI硬件接口10。SPI 用于CPU与各种外围器件进行全双工、同步串行通讯。SPI可以同时发出和接收串行数据。它只需四条线就可以完成MCU与各种外围器件的通讯,这四条线是:串行时钟线(CSK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入数据线(MOSI)、低电平有效从机选择线CS。当SPI工作时,在移位寄存器中的数据逐位从输出引脚(MOSI)输出(高位在前),同时从输入引脚(MISO)接收的数据逐位移到移位寄存器(高位在前)。发送一个字节后,从另一个外围器件接收的字节数据进入移位寄存器中。主SPI的时
26、钟信号(SCK)使传输同步。其时序图如下:图4.2 SPI通信模式时序图对于不带SPI串行总线接口的AT89C51系列单片机来说,可以使用软件来模拟 SPI的操作,包括串行时钟、数据输入和数据输出11。MAX6675从SPI串行接口输出数据的过程如下:MCU使CS变低并提供时钟信号给SCK,由S0读取测量结果。CS变低将停止任何转换过程:CS变高将启动一个新的转换过程。一个完整串行接口读操作需16个时钟周期,在时钟的下降沿读16个输出位,第l位和第15位是一伪标志位,并总为0,第14位到第3位为以MSB到LSB顺序排列的转换温度值;第2位平时为低,当热电偶输入开放时为高,开放热电偶检测电路完全
27、由MAX6675实现,为开放热电偶检测器操作,T-必须接地,并使接地点尽可能接近GND脚;第1位为低以提供MAX6675器件身份码,第0位为三态。对于在SCK的下降沿输入数据和上升沿输出数据的器件,则应取串行时钟输出的初始状态为0,即在接口芯片允许时,先置P11为0,以便外围接口芯片输出1位数据(MCU接收1位数据),之后再置时钟为1,使外围接口芯片接收1位数据(MCU发送1位数据),从而完成1位数据的传送。Max6675因为是传输16位数据,所以要分为高8位和低8位的传输。MAX6675MC51P1.0 SOP1.1SCKP1.2 CS.图4.3 SPI总线接口电路其程序如下:CS BIT
28、P1.2 ;从机 SCK BIT P1.1 ;时钟 SO BIT P1.0 ;数据输入 DATAH DATA 30H DATAL DATA 31H ORG 0000H REDAT: CLR CS ;CS低电平,停止数据转换, CLR SCK ;时钟置为低电平 MOV R2, #08H ;读数据高位字节D15-D8 RDH: MOV C,SO ;读SO端数据 RLC A ;累加器左移一位 SETB SCK NOPCLR SCK DJNZ R2,RDH MOV DATAH,A ;将数据高位移入缓冲区 MOV R2,#08H RDL: MOV C,SO ;读SO端数据;读数据低位字节D7-D0 RL
29、C A ;累加器左移一位 SETB SCK NOP CLR SCK DJNZ R2,RDL MOV DATAL,A ;将数据低位移入缓冲区 SETB CS 相应的硬件仿真搭建如下:图4.4 SPI硬件仿真接线 数据传输的过程,可以用proutes自带的示波器查看,如以下图:图4.5 SPI通信时序图在上图中,第一行是单片机读取max6675的数据,第二行是单片机模拟的,给max6675的始终信号,第三行是cs信号。4.3 数据处理部分 在此过程中,不好用protues来查看结果,不过可以利用keil来查看寄存器的结果,只要我们首先给个初始数据,然后最后再印证下就可以。 MAX667多采用标准的
30、SPI串行外设总线与MCU接口,且MAX6675只能作为从设备。MAX6675S0端输出温度数据的格式如图3.5所示12。图4.6 MAX6675输出温度数据的格式 D14D3为12位数据,其最小值为0,对应的温度值为0;最大值为4095,对应的温度值为1023.75;由于MAX6675部经过了激光修正,因此,其转换结果与对应温度值具有较好的线性关系。温度值与数字量的对应关系为:温度值= 1023.75转换后的数字量/4095=转换后的数字量/4 所以第一步是得到数字量,第二步是得到温度值,但可以简化为,直接得到温度值,然后再进制转换。其程序流程图如4.2示。主要先是将非数据位的数据清零,然后
31、将16位数据全部右移3为,可以得到转换后的数字量,然后再右移2位,得到温度值。其中,右移最后的两位会得到小数部分,这部分可以直接赋值。开 始SPI得到的16位数据将无关4位数据置零将数据右移5位,得到真实的温度值值与设定的温度值进行比较报警并完毕是 否进制转换返回图4.7 温度转换程序流程图4.3.1 数据转换 这部分主要进行的16位数据的整体右移和保存小数位。在整个程序中,DATAH保存高8位数据,DATAL保存低8位数据,DATAX保存小数数据。其程序流程图如下:开始将无关数据位置零分别右移3位右移一位,得到小数百分位右移移位,得到小数十分位将数据存放在寄存器和内存中完毕图4.8 数据处理
32、流程图其中,保存小数百分位是直接根据右移后的标志位,然后直接置DATAX为25,同理,十分位是50。在这个部分,DATAH保存数据高2位,DATAL保存数据低8位,而小数部分由于不需要进制转换,所以直接存放在DATAX中,直到最后显示的时候调出来。对此,16位数据右移一位的程序如下: MOV A,DATAH ;数据高位保存在A CLR C ;清除标志位 RRC A ;A带位右移 MOV DATAH,A ;A保存在DATAH MOV A,DATAL ;DATAL存储在A RRC A ;带位右移,此时CY是DATAH的最后一位 MOV DATAL,A;DATAL右移,并且高位是DATAH的末位 对
33、于特殊要保存小数位的右移,其程序如下:MOV A,DATAH CLR C RRC A MOV DATAH,A ;16位数据右移一位, MOV A,DATAL ;并且若一出一个高位,则 RRC A ;使两位小数+25. MOV DATAL,A JNC SW MOV A,#25HMOV DATAX,ASW: MOV A,DATAH ;同上,不过这次若是高位,则+50 CLR C ;这两步是为了得到温度值的 RRC A ;小数部分 MOV DATAH,A MOV A,DATAL RRC A MOV DATAL,A MOV A,DATAX ADD A,#50H MOV DATAX,A在整个调试过程中,
34、这部分程序由于简单,也没有出现问题,所以就没有验证过。4.3.2 进制转换 用汇编实现,可以用书中的程序。双字节二进制整数转换成3字节BCD码整数的子程序13。其采用的算法是,依次将整数的每位左移至CY位,再把CY位左移至一个3字节队列中,并进行十进制调整。通过16次移位完成运算,结果为压缩格式的3字节BCD编码。其程序如下:ZH: MOV R6,DATAH;将要保存的数据存放MOV R7,DATAL;高位存放在R6,低位R7 CLR A;将要保存数据的寄存器清零 MOV R3,AMOV R4,AMOV R5,AMOV R2,#10H;RLOOP: MOV A,R7; ;完成十六进制到10进制
35、的转换RLC AMOV R7,AMOV A,R6RLC AMOV R6,AMOV A,R5ADDC A,R5DA AMOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,AMOV A,R3ADDC A,R3MOV R3,ADJNZ R2,RLOOP其运行结果如以下图: 图 4.9 进制转换结果,转换前(坐),转换后(右) 经过运算,445H=1093,即完成了对数据的进制的转换。4.4 显示部分程序与仿真 这部分,根据论文题目要求是用数码管来显示。数码管动态显示,可以用延时子程序方法,或者用计时器中断的方式来延时14。这部分最后选择用计时器中断的方式来完成数码管动态显示延时的
36、需要。主要是开始用调用延时子程序的方法是,一直没有找对延时时间的比较好的设置,从而是数码管一直闪烁,不能正常的显示。而通过计时器中断的方式,最后得到了不错的显示效果。4.4.1 显示部分硬件设计LED显示器是单片机应用系统中常用的输出器件,是由若干个发光二极管组成的,当发光二极管导通时,相应的一个或一个笔画发光,控制不同组合的二极管导通,这就能显示出不同字符。点亮显示器有静态和动态两种方式。所谓静态显示就是显示器在显示某个字符时,相应的发光二极管恒定的导通或截止。这种显示方式每个显示器都需要一个8位输出口控制,需要硬件多,适用于显示位数较少的场合。当显示位数较多时采用动态显示。所谓动态显示就是
37、一位一位的轮流点亮各位显示器,对于每位显示器来说,每隔一段时间点亮一次。显示器的点亮和点亮时的导通电流有关,还与点亮时间和间隔时间有关,调整电流和时间参数,可实现亮度较高较稳定的显示。 如图3,是用6个共阴极数码管的动态显示借口电路,用74LS373接成直通的方式作为驱动电路,字型选择P0口提供,位选择由P3口提供。图4.10 数码管显示电路74LS373三态输出的8D透明锁存器。锁存器的最主要作用是缓存,其次完成高速的控制器与慢速的外设的不同步问题,再其次是解决驱动的问题,最后是解决一个 I/O 口既能输出也能输入的问题。自此利用74LS373既解决了P口驱动不足的问题,也解决了MCU和数码
38、管速率不同,从而产生的拖影的感觉。4.4.2 显示部分程序设计先存放数据,用来测试,这部分是用计时器中断完成的。其程序流程图如下:开 始利用除法,数据都分离成单个数字依次将数字保存在内存中对计时器设置初值,并启动等待中断显示下一位数字初始化计时器是否显示完6位初始化内存是否图4.11 显示部分流程图这部分软件设计如下:MAIN: MOV SP,#70H ;初始化堆栈MOV LEDBUF,#6MOV LEDBUF+1,#6MOV LEDBUF+2,#7MOV LEDBUF+3,#5 MOV LEDBUF+4,#3 MOV LEDBUF+5,#1MOV R0,#LEDBUF ;将ledbuf的首地
39、址给R0MOV DPTR,#TABLE;将TABLE的首是址给DPTRMOV R2,#06H ;R2作为循环次数寄存器MOV R1,#01H;R1中放片选信号MOV TMOD, #01H;定时器0工作在方式1MOV TH0, #0DFHMOV TL0,#0B0H;初始代定时器0 SETB TR0;开定时器0 SETB EA;开总中断 SETB ET0;开定时器0中断 SJMP $;动态停机TIME0: DJNZ R2, LOOP1 ;建立一个循环,并且能初始值再次循环MOV R2,#06HMOV R1,#01H MOV R0,#LEDBUF;初始化数据LOOP1: MOV TH0,#0DFH MOV TL0,#0B0H ;初始化定时器0 CJNE R2,#03,WXUD ;第4位有小数点,所以单独显示MOV P3,ARL AMOV R1,A ;片选信号输入P1并且使其数据左移一位MOV A,R0MOVC A,A+DPTRMOV P2,A ;通过查表,将字码送给偏、p2口CLR P2.7;使小数点显示出来INC R0RETIWXUD: MOV A,R1 ;MOV P3,ARL AMOV R1,