《基于单片机的数字电压表设计-完整版(共26页).doc》由会员分享,可在线阅读,更多相关《基于单片机的数字电压表设计-完整版(共26页).doc(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上题目: 基于单片机的数字电压表设计 数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信。目前,由各种单片A/D 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提
2、高到崭新水平。本章重点介绍单片A/D 转换器以及由它们构成的基于单片机的数字电压表的工作原理。关键词:数字电压表 A/D 转换器 PC 电压测量 Abstract Digital voltage meter (Digital Voltmeter) referred to as DVM, it is the use of digital measuring technology, the continuous analog (DC input voltage) into a non-continuous, discrete digital form and to display the inst
3、rument.Analog voltage meter features a traditional single, low accuracy, can not meet the digital age, using the single chip digital voltage meter, from the high precision, anti-interference ability, scalability, Ji Cheng convenience, and PC can communicate in real time.At present, by a variety of s
4、ingle A / D converter consisting of digital voltage meter, has been widely used in electronic and electrical measurement, industrial automation, instrumentation, automated test systems, intelligent measurement, showing strong vitality.At the same time, the DVM extension to the various general and sp
5、ecific digital instruments, but also the power and non-power measurement up to a new level.This chapter focuses on single-chip A / D converter, and they form by the microcontroller-based digital voltmeter works.Keywords: digital voltmeter A / D converter voltage measurement PC目 录1 设计方案61.1 A/D转换部分61
6、.2 电源部分72 系统硬件电路设计82.1 单片机芯片82.2 89C51与外围电路的接口103 详细设计143.1复位电路143.2电源电路163.3 程序框图.173.4 源程序.194 总结28参考文献291 设计方案在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流或交流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。由于数字式仪器具有读数准确方便
7、、精度高、误差小、灵敏度高和分辨率高、测量速度快等特点而倍受青睐。本设计从各个角度分析了由单片机组成的数字电压表的设计过程及各部分电路的组成及其原理,并且分析了程序如何驱动单片机进而使系统运行起来的原理及方法。本设计主要分为两部分:硬件电路及软件程序。而硬件电路又大体可分为A/D转换电路、LED显示电路,各部分电路的设计及原理将会在硬件电路设计部分详细介绍;程序的设计使用汇编语言编程,利用WAVE和PROTEUS 软件对其编译和仿真,详细的设计算法将会在程序设计部分详细介绍。1.1 A/D转换部分:电压是模拟量,而数码管显示需要的是数字量,故需要采用A/D转换模拟信号为数字信号供数码管显示出来
8、,可供选择的芯片有ADC0809,ADC574和TLC2543等等。由于要求测量精度在5%,因此须选用12位精度的A/D转换器,且可直接驱动LED显示器工作,0809为8位精度,故不能采用,而综合性价比,TLC2543就成为了本次设计的首选。由于TLC2543测量范围为0-+5V,故需要为其设计降压稳压电路。被测量模拟量变为数字量之后,并不能通过数码管直接显示出来,而需要单片机加以处理形成段码才能显示出来。而且,A/D电路的时钟与输入输出都需要单片机与其对接予以控制。故选择含有内部闪存的89C51完成此工作。该芯片无论从性能还是价格上都是非常合适的。数字信号转换为段码并显示出来需要有程序和其它
9、接口电路配合。在程序上,A/D采集程序采用多次取值并求和求平均的方法得出双字节数据,然后通过双字节转换BCD码子程序得出BCD码。硬件显示上选用动态扫描法,即数码管位选端连入单片机的某一组I/O口,片选端连入另一组I/O口,配合显示子程序实现显示。此外,主程序和其它程序用中断方式进行组合。显示所需的数码管,选用7段共阳极数码管,由于精度要求为5%,故本设计显示部分由四个数码管组成。由于单片机各个I/O口的驱动能力有限,故应设计驱动电路。本设计中的驱动电路主要与显示部分有关。数码管的片选端需要连接上拉电阻和三机管以增强驱动能力,位选端也选择连接上拉电阻以增强驱动能力。1.2 电源部分: 本设计各
10、芯片,数码管及单片机外围电路需要5V的直流电源,故需要一个稳定的5V直流稳压源。根据模拟电子技术基础的知识,本设计选择含有7805三端集成稳压器的电源电路。电路中选择二极管整流桥整流,电容进行滤波,并选用220V-9V变压器进行变压。 综上,本次设计选用89C51单片机作为核心,TLC2543作为A/D转换芯片,数码管作为显示器,7805稳压器为主的直流稳压电路做为电源,配合采集,转换,显示程序共同实现可测量0-10V直流电压的数字式电压表。 系统总设计框图见图1图1-1 系统框图2 系统硬件电路设计2.1 单片机芯片2.1.1 单片机芯片选择AT89C51是一种带4K字节闪烁可编程可擦除只读
11、存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。1主要特性: 与MCS-51 兼容 ,4K字节可编程闪烁存储器,寿命:1000写/擦循环, 数据保留时间:10年,全静态工作:0Hz-24Hz ,三级程序存储器锁定,128*8位内部RAM ,32可编程I/O线, 两个16位
12、定时器/计数器, 5个中断源 ,可编程串行通道,低功耗的闲置和掉电模式,片内振荡器和时钟电路 。2管脚说明: VCC:供电电压。GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电
13、平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P
14、3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下所示: 口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编
15、程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无
16、效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/Vpp:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 3振荡器特性: XTAL1和XTAL2分别为反向放大器的输入和
17、输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。 4芯片擦除: 整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直
18、到下一个硬件复位为止。 5.结构特点:8位CPU;片内振荡器和时钟电路;32根I/O线;外部存贮器寻址范围ROM、RAM64K;2个16位的定时器/计数器;5个中断源,两个中断优先级;全双工串行口;布尔处理器。2.2本设计中89C51与外围电路的接口本系统采用P0与P2口与显示器连接,P1口与A/D的数据及控制端连接。/EA/VP端接5V电源,X1,X2接晶振电路,RESET端接复位电路,其余INT1,INT0,T1,T0,/RD,/WR,RXD,TXD,ALE,PSEN端置空。由于P0口的驱动能力较弱,故每个引脚接4.7K的上拉电阻,以增强驱动显示器的能力图2-1 89C51单片机引脚图TL
19、C2543A/D转换1TLC2543是TI公司的12位串行模数转换器,使用开关电容逐次逼近级数完成A/D转换过程。由于是串行输入结构,能够节省51系列单片机I/O资源;且价格适中,分辨率较高,因此在仪器仪表中有较为广泛的应用。2TLC2543的特点12位分辩率A/D转换器在工作温度范围内10s转换时间;11个模拟输入通道;3路内置自测试方式;采样率为66kbps;线性误差1LSBmax;有转换结束输出EOC;具有单、双极性输出;可编程的MSB或LSB前导。3TLC2453接口时序 可以用四种方式使TLC2543实现全12位分辨率,每次转换和数据传递可以使用12或16个时钟周期。一个片选()脉冲
20、要插到每次转换的开始处,或是在转换时序的开始处变化一次后保持为低,直到时序结束。 开始时,片选 为高,I/O CLOCK、DATA INPUT被禁止,DATA OUT呈高阻状态,EOC为高。使 变低,I/O CLOCK、DATA INPUT使能,DATA OUT脱离高阻状态。12个时钟信号从I/O CLOCK端依次加入,随着时钟信号的加入,控制字从DATA INPUT一位一位地在时钟信号的上升沿时被送入TLC2543(高位先送入),同时上一周期转换的A/D数据。TLC2543收到第4个时钟信号后,通道号也已收到,因此,此时TLC2543开始对选定通道的模拟量进行采样,并保持到第12个时钟的下降
21、沿。在第12个时钟下降沿,EOC变低,开始对本次采样的模拟量进行A/D转换,转换时间约需10s,转转完成EOC变高,转换的数据在输出数据寄存器中,待下一个工作周期输出。此后,可以进行新的工作周期。5TLC2543 A/D芯片与89C51单片机的接口 本设计中,TLC2543的AIN0引脚接测量降压电路,AIN1-AIN10置空,GND接地,VRF+接+5V电压,VRF接地,/CS端接P1.4口,TDO端接P1.2口,TDI端接P1.3口,TCK端接P1.1口,EOC端接P1.0口。 图2-2 TLC2543 A/D转换芯片引脚图数码管显示器 数码管是一种半导体发光器件,其基本单元是发光二极管。
22、数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,
23、相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。静态显示驱动:静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5840根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢:),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。动态显
24、示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够
25、快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。参数:8字高度:8字上沿与下沿的距离。比外型高度小。通常用英寸来表示。范围一般为0.25-20英寸。长*宽*高:长数码管正放时,水平方向的长度;宽数码管正放时,垂直方向上的长度;高数码管的厚度。时钟点:四位数码管中,第二位8与第三位8字中间的二个点。一般用于显示时钟中的秒。 电流:静态时,推荐使用10-15mA;动态时,16/1动态扫描时,平均电流为4-5mA,峰值电流50-60mA。电压:查引脚排布图,看一下每段的芯片数量是多少?当红色时,使用1.9V乘以每段的芯片串
26、联的个数;当绿色时,使用2.1V乘以每段的芯片串联的个数。由于精度要求为5%,故本设计显示部分由四个数码管组成,构成十位,个位,十分位,百分位。 图2-3 共阴极数码管及其接口电路3 详细设计3.1 复位电路 89C51单片机的复位是由外部的复位电路来实现的。最简单的上电自动复位电路,是通过外部复位电路的电容充电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。当时钟频率选用6MHz时,C取22uF,R取1K。 除上电复位外,有时还需要按键手动复位。按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST端经电阻和电源Vcc接通而实现的,按键手动电平复位电路如图3.1。
27、当时钟频率选用12MHz时,C选取22uF,R选择1000欧。图3-1 单片机复位电路晶振电路 晶振是晶体振荡器的简称,在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络,电工学上这个网络有两个谐振点,以频率的高低分其中较低的频率是串联谐振,较高的频率是并联谐振。由于晶体自身的特性致使这两个频率的距离相当的接近,在这个极窄的频率范围内,晶振等效为一个电感,所以只要晶振的两端并联上合适的电容它就会组成并联谐振电路。这个并联谐振电路加到一个负反馈电路中就可以构成正弦波振荡电路,由于晶振等效为电感的频率范围很窄,所以即使其他元件的参数变化很大,这个振荡器的频率也不会有很大的变化。晶振
28、有一个重要的参数,那就是负载电容值,选择与负载电容值相等的并联电容,就可以得到晶振标称的谐振频率。一般的晶振振荡电路都是在一个反相放大器(注意是放大器不是反相器)的两端接入晶振,再有两个电容分别接到晶振的两端,每个电容的另一端再接到地,这两个电容串联的容量值就应该等于负载电容,请注意一般IC的引脚都有等效输入电容,这个不能忽略。一般的晶振的负载电容为15p或12.5p ,如果再考虑元件引脚的等效输入电容,则两个22p的电容构成晶振的振荡电路就是比较好的选择。 晶体振荡器也分为无源晶振和有源晶振两种类型。无源晶振与有源晶振(谐振)的英文名称不同,无源晶振为crystal(晶体),而有源晶振则叫做
29、oscillator(振荡器)。无源晶振需要借助于时钟电路才能产生振荡信号,自身无法振荡起来,所以“无源晶振”这个说法并不准确;有源晶振是一个完整的谐振振荡器。谐振振荡器包括石英(或其晶体材料)晶体谐振器,陶瓷谐振器,LC谐振器等。晶振与谐振振荡器有其共同的交集有源晶体谐振振荡器。 石英晶片所以能做振荡电路(谐振)是基于它的压电效应,从物理学中知道,若在晶片的两个极板间加一电场,会使晶体产生机械变形;反之,若在极板间施加机械力,又会在相应的方向上产生电场,这种现象称为压电效应。如在极板间所加的是交变电压,就会产生机械变形振动,同时机械变形振动又会产生交变电场。一般来说,这种机械振动的振幅是比较
30、小的,其振动频率则是很稳定的。但当外加交变电压的频率与晶片的固有频率(决定于晶片的尺寸)相等时,机械振动的幅度将急剧增加,这种现象称为压电谐振,因此石英晶体又称为石英晶体谐振器。 其特点是频率稳定度很高。石英晶体振荡器与石英晶体谐振器都是提供稳定电路频率的一种电子器件。石英晶体振荡器是利用石英晶体的压电效应来起振,而石英晶体谐振器是利用石英晶体和内置IC来共同作用来工作的。振荡器直接应用于电路中,谐振器工作时一般需要提供3.3V电压来维持工作。振荡器比谐振器多了一个重要技术参数为:谐振电阻(RR),谐振器没有电阻要求。RR的大小直接影响电路的性能,也是各商家竞争的一个重要参数。本设计采用12M
31、Hz晶振,并联两个30pF电容构成晶振电路。 图3-2 单片机晶振电路 3.2 电源电路 本设计选择三端集成稳压器0875及变压器,整流桥,滤波电容构成直流稳压电路。C1,C2,C3用来实现频率补偿,防止稳压器产生高频自激振荡和意志电路引入高频干扰,C4是电解电容,以减小稳压电源输出端由输入电源引入的低频干扰。D是保护二极管,当输入端短路时,给输出电容器C4一个放电通路,防止C4两端电压作用于稳压器,造成击穿而损坏。变压器采用220V-9V变压器,整流桥和保护二极管采用IN4001。 图3-3直流稳压电源电路3.3程序流程图主程序流程图图开始初始化采集4次AD4次AD求和4次AD求平均值将双字
32、节转换BCD码取低四位BCD码转换成对应数码管字段图3-4 主程序流程框图中断程序流程图进入中断|ACC压栈显示第一位|?Y开第1个数码管关其他 的并赋值计算器加1Y显示第二位?加1开第2个数码管关其他 的并赋值Y开第3个数码管关其他 的并赋值显示第三位?加1Y显示第四位?清零开第4个数码管关其他 的并赋值设置显示第一位退出中断弹出压栈图3-5 中断程序流程框图3.4 源程序本程序是用来显示0-10v的测量电压的,使用的单片机是:89C51,晶振12MHzAD_EOC BIT P1.0;ad的接口AD_TCK BIT P1.1AD_OUT BIT P1.2AD_IN BIT P1.3AD_CS
33、 BIT P1.4LED EQU P0;LED接的P0口L1 BIT P2.0L2 BIT P2.1L3 BIT P2.2L4 BIT P2.3LED1 EQU 30H;LED0缓存LED2 EQU 31H;LED1缓存LED3 EQU 32H;LED2缓存LED4 EQU 33H;LED3缓存L_NUMEQU34H;led计数器ORG0000HLJMPMAINORG000BH LJMPTT0 ORG 0080HMAIN: MOVSP,#70H;设置堆栈 MOVTH0,#60;设置定时器定时时间 MOVTL0,#176 MOVTMOD,#11H ;设置定时器工作状态 SETBEA;开总中断 S
34、ETBTR0;开定时器中断0M1: LCALLADCJ;采集数据 LCALLAD_NUM;将采集的数据求和 LCALLPINGJUN;将采集的数据求平均 LCALLBIN_BCD;将采集的数据求平均后转成bcd JMPM1;AD采集程序;48H-4FHADCJ: MOV R0,#48H MOV R1,#49H MOV DPTR,#DZSJ25 MOV R4,#01H ;一个通道DTDZ25: MOV R3,#04H ;多通道采值起始,每个4次DCCZ25: MOV A,#01H ;采集第一个通道 LCALL RD_AD INC R0 INC R1 DJNZ R3,DCCZ25 RETRD_AD
35、: MOV R0,#00H ;2543串行数据输出高位 MOV R1,#00H CLR CLK SETB CS25 CLR CS25 MOV R2,#08HLOP1: MOV C,DO RLC A MOV DI,C SETB CLK CLR CLK DJNZ R2,LOP1 SWAP A XCHD A,R0 ;交换 LOW 4 BITS SWAP A MOV R2,#04HLOP2: MOV C,DO RLC A SETB CLK CLR CLK DJNZ R2,LOP2 MOV R1,A SETB CS25 RETDZSJ25: DB 00H,10H,20H,30H,40H ;两字节相加;结
36、果在41H和42H中,41H低字节,42h高字节AD_NUM: MOV41H,#00H MOV42H,#00H MOV41H,48H;低字节 MOV42H,49H CLRC MOVA,4AH ADDCA,41H JCAD_NUM1 ADD42H,#01AD_NUM1:CLRC MOVA,4CH ADDCA,41H JCAD_NUM2 ADD42H,#01AD_NUM2:CLRC MOVA,4EH ADDCA,41H JCAD_NUM3 ADD42H,#01AD_NUM3:CLRC MOV A, 4BH ADD A, 42H MOV A,4DH ADDA,42H MOVA,4FH ADDCA,4
37、2H RET ;求平均数PINGJUN:CLRC MOVA,42H RRCA MOV42H,A MOVA,41H MOV41H,A CLRC MOVA,42H RRCA MOV42H,A MOVA,41H RRCA MOV41H,A RET ;BIN转成BCD;程序入口:42H是高字节,41H是低字节;程序出口:十位数放在43h; 个位数放在44h; 十分位数放在45h; 百分位数放在46hBIN_BCD:CHANGE16_10:CLR A ;码初始化 MOV R3, A MOV R4, A MOV R5, A MOV R2, #10H ;转换双字节十六进制整数CHANG_1:MOV A, R
38、7 ;从高端移出待转换数的一位到CY中 RLC A MOV R7, A MOV A, R6 RLC A MOV R6, A MOV A, R5 ;码带进位自身相加,相当于乘 ADDC A, R5 DA A ;十进制调整 MOV R5, A MOV A, R4 ADDC A, R4 DA A MOV R4, A MOV A, R3 ADDC A, R3 MOV R3, A ;双字节十六进制数的万位数不超过,不用调整 DJNZ R2, CHANG_1 ;处理完bit RETBIN_BCD: MOVA,43H;将43h中的0-9转成数码管对应的0-9字符MOVDPTR,TAB_LED MOVCA,A
39、+DPTR MOVLED1,A MOVA,44H MOVDPTR,TAB_LED MOVCA,A+DPTR MOVLED2,A MOVA,45H MOVDPTR,TAB_LED MOVCA,A+DPTR MOVLED3,A MOVA,46H MOVDPTR,TAB_LED MOVCA,A+DPTR MOVLED4,A RET ;定时中断0TT0:MOVTH0,#60 MOVTL0,#176 PUSHACC MOVA,L_NUM CJNEA,#00H,TT01;显示第1位数字 十位 MOVLED,LED1; CLRL1 SETBL2 SETBL3 SETBL4 INCL_NUM JMPTT0_ENDTT01:CJNEA,#01H,TT02;显示第二位数字 个位 MOVLED,LED2; CLRL2