单片机电压采集与显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录 摘要
引言
一 课程设计题目及任务要求
1.1课程设计主要任务
1.2课程设计的要求
二 电路设计方案及原理说明
2.0课程设计的方案 2.1 ADC0809模数转换芯片
2.2 AT89C51单片机
2.3 4个共阳7段数码管显示器
2.4 系统整体工作原理
2.4.1硬件原理
2.4.2软件原理分析
三 设计总体框图
3.1硬件总体框图
3.2主程序流程图
3.3待测信号源单元电路
3.4 AT89C51单片机
3.5单片机控制单元
3.5.1外部时钟电路
3.5.2复位电路
3.5.3数码管显示模块
四 实验仿真
五 总结及设计心得
六 致谢
七 参考文献
摘要本设计待测的输入电压为8路电压范围为05V使用目前广泛使用的
AT89C51来做控制系统用ADC0809来进行模拟电压的采集及模数转换实现采集 8路数据并将结果在四位一体数码管上进行显示。该系统主要包括几大模块
数据采集模块、AD转换模块、控制模块、显示模块。显示部分由LED数码显示
器构成。该数字电压表具有电路简单成本低等优点可以方便地进8路AD转
换量的测量。
关键词电压采集、ADC0809、A/D转换、单片机89C51、数码管显示
引言
随着计算机技术的飞速发展和普及数据采集系统在多个领域有着广泛的应
用。数据采集是工、农业控制系统中至关重要的一环在医药、化工、食品、等
领域的生产过程中往往需要随时检测各生产环节的温度、湿度、流量及电压等
参数。同时还要对某一检测点任意参数能够进行随机查寻将其在某一时间段
内检测得到的数据经过转换提取出来以便进行比较做出决策调整控制方案
提高产品的合格率产生良好的经济效益。
随着工、农业的发展多路数据采集势必将得到越来越多的应用为适应这
一趋势作这方面的研究就显得十分重要。在科学研究中运用数据采集系统可
获得大量的动态信息也是获取科学数据和生成知识的重要手段之一。总之不
论在哪个应用领域中数据采集与处理将直接影响工作效率和所取得的经济效
益。
采集系统从严格的意义上来说应该是用计算机控制的多路数据自动检测
或巡回检测并且能够对数据实行存储、处理、分析计算以及从检测的数据中提
取可用的信息供显示、记录、打印或描绘的系统。
电压测量成为广大电子领域中必须掌握的过程并且对测量的精度和采集功
能的要求也越来越高而电压的测量与显示系统甚为重要。在课程设计中对一路
电压采集系统与显示系统作了基本的研究。电压采集与通信
控制采用了模块化的
设
计并用单片机8051来实现硬件部分是以单片机为核心还包括模-数转换
模块显示模块和串行接口部分还有一些简单的外围电路。1路被测电压通
过通用ADC0809模-数转换实现对采集到的电压进行模拟量到数字量的转换
由单片机对数据进行处理用数码管显示模块来显示所采集的结果由相关控制
器完成数据接收和显示汇编程序编写了更加明了化数据显示界面。本系统主要
包括四大模块数据采集模块、控制模块、显示模块、A/D转换模块。绘制电路
原理图与工作流程图并进行调试最终设计完成了该系统的硬件电路。在软件
编程上采用了汇编语言进行编程开发环境使用相关集成开发环境。开发了显
示模块程序、A/D转换程序。
一、设计任务与要求 1.1课程设计主要任务
A、通过设计是学生掌握利用ADC0809及其适当的外围电路实现直流电压的
采集以及利用LED显示功能的方法。
B、进一步掌握ADC0809的功能特点、工作原理和正确使用方法。
C、进一步了解外围器件接口的基本原理与使用技术。
1.2课程设计的要求
A、利用ADC0809及其适当的外围电路实现直流电压的采集。
B、采集结果在LED数码管上显示出来数据范围为05v
C、绘制硬件连接图编写相应的控制程序。
D、撰写设计报告、调试报告、设计心得。
二 、电路设计方案及原理说明 依据综合课程设计的要求利用ADC0809设计一个单通道模拟电压采集显
示电路要求对所接通道变化的模拟电压值进行采集采集来的数字量送至数码
管指示出来通过相关转换在数码管上精确显示出来。本课程设计相当于测直流
电压的大小通过对电压值的采集与处理而由所学微控制器的知识可知可以
利用单片机的模数转换来实现这一设计进一步把相应的电压值精确显示出来。
模数转换就是利用单片机控制模数转换芯片A/D,让它对外部的一个模
拟信号进行采样、量化、编码然后转化为一个离散的数字量提供给控制器作进
一步处理。对于常用的A/D转换芯片有ADC0809、ADC0808等。它们都是8位的
模数转换芯片就是把模拟量转换为一个8位的二进制数。利用单片机AT89C51
与ADC0809设计一个电压采集系统将模拟信号实际设计时采用05 V之
间的直流电压值转换成数字量信号0FF以数码管显示。Proteus软件启动仿真
当前输入电压为25 0V转换成数字值为7FH用鼠标指针调节电位器尺,可改
变输入模数转换器ADC0809的电压并通过虚拟电压表观察ADC0809模拟
量输
入信号的电压值LED数码管实时显示相应的数值量。
此次电压表总体的方案就是用单片机的I/O口输出信号来控制A/D启动转
换将送入的模拟量转换为一个8位数字量然后再通过I/O口送回单片机内部
进行处理单片机进行一系列的运算和校准后通过数码管将电压值显示出来。
而在方案的实现上由两部分组成硬件部分和软件部分。硬件即电子元器件的选
择且将它们连接成一个可行的硬件系统软件是硬件系统功能化的重要组成部
分。硬件的设计可以在Proteus上进行软件可以用Proteus自带的汇编工具然
后在Proteus将硬软件相结合进行仿真再根据结果不断对硬件进行改进对
软件进行调试实现电压的采集与显示功能。
2.1 ADC0809模数转换芯片
1.ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑 的CMOS组件。它是逐次逼近式A/D转换器可以和单片机直接接口。 1ADC0809的内部逻辑结构
由下图可知ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D
转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道允许8路模拟
量分时输入共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字
量当OE端为高电平时才可以从三态输出锁存器取走转换完的数据。
2ADC0809引脚结构
ADC0809各脚功能如下
D7-D08位数字量输出引脚。
IN0-IN78位模拟量输入引脚。
VCC+5V工作电压。
GND地。
REF+参考电压正端。
REF-参考电压负端。
STARTA/D转换启动信号输入端。
ALE地址锁存允许信号输入端。
以上两种信号用于启动A/D转换.
EOC转换结束信号输出引脚开始转换时为低电平当转换结束时为高电平。
OE输出允许控制端用以打开三态数据输出锁存器。
CLK时钟信号输入端一般为500KHz。 A、B、C地址输入线。
ADC0809对输入模拟量要求信号单极性电压范围是05V若信号太小必
须进行放大输入的模拟量在转换过程中应该保持不变如若模拟量变化太快则
需在输入前增加采样保持电路。
地址输入和控制线4条
ALE为地址锁存允许输入线高电平有效。当ALE线为高电平时地址锁存与
译码器将ABC三条地址线的地址信号进行锁存经译码后被选中的通道的模拟
量进入转换器进行转换。AB和C为地址输入线用于选通IN0IN7上的一路模
拟量输入。通道选择表如下表所示。 C
B A
选择的通道
0 0 0 IN0
0 0 1 IN1
0 1 0 IN2
0 1 1 IN3
1 0 0 I
N4
1 0 1 IN5
1 1 0 IN6
1 1 1 IN7 数字量输出及控制线11条 ST为转换启动信号。当ST上
跳沿时所有内部寄存器清零下跳沿时开始进
行A/D转换在转换期间ST应保持低电平。EOC为转换结束信号。当EOC为高
电平时表明转换结束否则表明正在进行A/D转换。OE为输出允许信号用
于控制三条输出锁存器向单片机输出转换得到的数据。OE1输出转换得到的数
据OE0输出数据线呈高阻状态。D7D0为数字量输出线。
CLK为时钟输入信号线。因ADC0809的内部没有时钟电路所需时钟信号必须由
外界提供通常使用频率为500KHZ
VREFVREF为参考电压输入。
2 ADC0809应用说明
1 ADC0809内部带有输出锁存器可以与AT89S51单片机直接相连。
2 初始化时使ST和OE信号全为低电平。
3 送要转换的哪一通道的地址到ABC端口上。
4 在ST端给出一个至少有100ns宽的正脉冲信号。
5 是否转换完毕我们根据EOC信号来判断。
6 当EOC变为高电平时这时给OE为高电平转换的数据就输出给单片机
了。 2.2 AT89C51单片机
ADC0809与8051单片机的硬件接口有3种形式分别是查询方式、中断
方式和延时等待方式本题中选用中断接口方式。
由于ADC0809无片内时钟时钟信号可由单片机的ALE信号经D触发器
二分频后获得。该题目中单片机时钟频率采用12MHz,则ALE输出的频率是
2MHz四分频后为500KHz,符合ADC0809对频率的要求。
由于ADC0809内部设有地址锁存器所以通道地址由P0口的低3位直接
与ADC0809的A、B、C相连。通道基本地址为0000H0007H。其对应关系上
面已做介绍。
控制信号将P2.7作为片选信号在启动A/D转换时由单片机的写信号
和P2.7控制ADC的地址锁存和启动转换。由于ALE和START连在一起因此
ADC0809在锁存通道地址的同时也启动转换。
在读取转换结果时用单片机的P3.0产生正脉冲作为OE信号用来打开
三态输出锁存器。
其接口电路如图2-2所示。
当8051通过对0000H0007H基本地址中的某个口地址进行一次写操
作即可启动相应通道的AD转换当转换结束后,ADC0809的EOC端向8051
发出中断申请信号8051通过对0000H0007H中的某个口地址进行一次读操
作即可得到转换结果。
2.3 4个共阳7段数码管显示器
共阳极7段LED数码管和共阴极LED数码管结构类似其引脚配置如图所
示。从图中可以看出7段LED数码管同样由8个发光二极管组成其中7个发光
二极管构成字形“8”另一个发光二极管构成
小数点。
共阳极7段LED数码管的内部结构如图所示。其中所有发光二极管的阳极
为公共端接+5v电压。如果发光二极
管的阴极为低电平的时候发光二极管导
通该字段发光反之如果发光二极管的阴极为高电平的时候发光二极管截
止该字段不发光。
图2-2 ADC0809与AT89C51的接口
电路
共阳极7段LED引脚配置 共阳极7段LED结构图
2.4 系统整体工作原理
1 硬件设计
1系统构成
该系统主要包括几大模块数据采集模块、AD转换模块、控制模块、显示模块、
按键模块等。采用AT89C51作为控制模块ADC0809作为AD转换模块的核心
ADC0809本身具有8路模拟量输入端口通过C、B、A3位地址输入端能从8路
中选择一路进行转换。如每隔一段时间依次轮流改变3位地址输入端的地址就
能依次对8路输入电压进行测量。LED数码管的显示采用软件译码动态显示通过
按键模块的操作可以选择8路循环显示也可以选择某条单路显示。
2数据采集电路
数据采集电路是系统的主要组成部分ADC0809具有8路模拟量输入通道IN0
IN7通过3位地址输入端C、B、A(引脚2325)进行选择。引脚22为地址锁存控
制端ALE当输入为高电平时C、B、A引脚输入的地址锁存于ADC0809内部锁存
器中经内部译码电路译码选中相应的模拟通道。引脚6为启动转换控制端START
当输入一个2 US宽的高电平脉冲时就启动ADC0809开始对输入通道的模拟量进
行转换。引脚7为AD转换器当开始转换时EOC信号为低电平经过一段时间
换结束转换结束信号EOC输出高电平转换结果存放干ADC0809内部的输出数据
寄存器中。引脚9脚为AD转换数据输出允许控制端OE当0E为高电平时存放
于输出数据锁存器中的数据通过ADC0809的数据线DOD7输出。引脚10为ADC0809
的时钟信号输人端CLOCK。在连接时ADC0809的数据线D0D7与AT89C51的P1口
相连接ADC0809的地址引脚、地址锁存端ALE、启动信号START、数据输出允许
控制端OE分别与AT89C51的P3口相连接转换结束信号EOC与AT89C52的P31相连
接。
2 软件设计
1主程序
主程序包含初始化部分调用AD转换子程序和调用显示子程序。 2数据处理子程序
ADC0809转换之后输出的结果是8位二进制数。由公式(1)可知当ADC0809输出
为(1l1l11111)时输入电压值V =500V{当ADC0809输出为(00000000)时输入
电压值为0.0O0V当ADC0809输出为(10000000)时输入电压值V =250V。由于
单片机进行数学运算时结果只取整数部分因此当输出为
(10000000)时计算出的
电压值V =2OOV很不准确。为了提高精确度必须把小数部分保留具体运
算方式如公式(2)。个位Dout*196/10000 十分位(Dout*196/100
0)%10 百分
位(Dout*196/100)%10 千分位Dout*196/10%10 由此得到较为精确的数
值。对上面的硬件部分按照软件流程框图进行软件设计。用C语言进行程序的
编写。
(下面的是C语言程序最后面几页还有汇编程序及其算法说
明可自己选择)
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit P2_0=P2^0;
sbit P2_1=P2^1; //定义数码管位码端口
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit OE=P3^0; //定义ADC0808端口
sbit EOC=P3^1;
sbit ST=P3^2;
sbit P3_4=P3^4;
sbit P3_5=P3^5;
sbit P3_6=P3^6;
uchar code table1[]={0x40,0x79,0x24,0x30,0x19,0x12};//带小数点的0~5六
个
uchar code
tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极0~9
十个段码/段码
uchar volt_data;
void init();
uchar i;
//*********************************
//延时子程序
//*********************************
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--) for(y=110;y>0;y--);
}
//*********************************
//将AD转换输出的数据转换成相应的
//电压值并且显示出来
//*********************************
void convert(uchar volt_data)
{
P0=table1[volt_data*196/10000]; //AD转换的个位的电压值
P2_0=1;
delay(2);
P2_0=0;
P0=tab[volt_data*196/1000%10];
P2_1=1; //显示小数点的后的第一位
delay(2);
P2_1=0;
P0=tab[volt_data*196/100%10];
P2_2=1; //显示小数点的后的第二位
delay(2);
P2_2=0;
P0=tab[volt_data*196/10%10];
P2_3=1; //显示小数点的后的第二位
delay(2);
P2_3=0;
}
void main()
{
uchar volt_data;
init();//初始化子程序
while(1)
{
if(i==5)
{
i=0;
ST=0;
_nop_(); ST=1;
_nop_();
ST=0; //启动AD转换
if(EOC==0) //等待转换结束
delay(2);
while(EOC==0);
OE=1; //允许输出
volt_data=P1;
convert(volt_data); //调用数据处理子程序
delay(2); //暂存转换结果
OE=0; //关闭输出
}
}
}
void time0_int(void) interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
i++;
}
void init()
{
P3_4=1; //选择通道3
P3_5=1;
P3_6=0;
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;ET0=1;
i=0;
TR0=1;
}
三、设计框图 31硬件总体框图
该系统硬件总体框图由四个模块组成如下图3所示。在芯片的选择中一
般的A/D芯片具有多路转换通道本课程设
计中我们
只做一路通道该通道采集
电压对采集的电压值进行采集、处理并显示我们还可以通过改变A/D芯片的
参考电压来改变其量程达到对电压值的多样化显示。A/D芯片将输入的模拟电 压值转换为一个8位的二进制数字再输送到单片机控制单元经过处理显示出
相应电压值。
3.2主程序流程图
设计程序部分时主要应包括主函数和和几个功能子函数。主程序流程图
如下图所示。
直
流
电
压 模
数
转
换
模
块 微
控
制
器
模
块 数
码
显
示 模
拟
电
压
数
字
电
压
程
序
控
制 控制模块
3.3待测信号源单元电路
待测信号源就是直流电压采集时所须测电压值的信号源其电路图如图
3-3-1所示。
该部分实际上是一个滑动变阻器均接在电源和地两端中间的滑线端提供两
路待测信号该部分提供给模数转换的通道3。
图3-3-1 待测信号源 3.4 AT89C51单片机如下图所示
3.5单片机控制单元
单片机控制单元是整个系统的核心中枢对外围进行控制对数据进行运算
处理是连接各部分的纽带。它主要包括51单片机芯片和其工作所必须的外围
电路如时钟振荡电路和复位电路等。
3.51外部时钟电路
主要是通过一个12MHZ的时钟晶振产生时钟信号以作为单片机工作的外部
时钟其XTAL1和XTAL2分别接入到单片机上相对应的引脚。电路图如图3-5-1。
图3-5-1 外部时钟电路(图中晶振标错了应为12M,上图中我就不
改了)
外部时钟的晶振频率为12MHZ,则通过该电路提供给单片机的时钟也为
12MHZ.
3.52复位电路
当对单片机的的reset引脚加超过两个机器周期以上的高电平时可使单片
机复位即程序从头开始执行。设计的复位电路如图3-5-2所示 ALER910kC310uF
图3-5-2 复位电路
3.53数码管显示模块
选用了一片集成的共阴极数码管每片是由4块8段数码管组成包括小数
点位。这4块8断数码管共用相同的数据输入线每块有一根片选线只有选
中了该数码管它才会点亮并显示。而通过动态扫描原理可以使接在同一数据线
的几块数码管显示不同的数。输入BCD码值就可以在数码管上显示十进制数字。
其中有电压表起校准对比作用。
四、实验仿真 在Proteus仿真软件平台上搭建硬件电路在keil uv2上编写软件并经编译
连接生产可执行的.hex文件把该文件添加到在Proteus平台上搭建好的电路的
单片机里。运行进行仿真调试。
仿真时数码管有示数与标准电压表的示数差不多说
明各模块均在正常
工作。
例如在5V量程下标准电压表的显示值2.50V,而数码管显示2.406标
准电压表显示4.44V,数码管示值为4.420。数码管显示结果有误差是由于
ADC0809输出的二进制码数转换为BCD码数的换算方法有一定误差导致。仿真结
果如图4-1
五、实验总结 本设计是基于ADC0809设计的电压检测装置。采用AT89C51单片机进行数据控
制、处理结构简单元件较少成本较低软件采用c语言实现程序简单可
读写性强效率高。能够实现八路待测电压测量还能够自由选择要测量的通道
与传统的电路相比具有方便操作、处理速度快、稳定性高、性价比高的优点
具有一定的使用价值。
通过本次课程设计我对模数转换芯片ADC0809有进一步了解故我将此次
设计的重点放在了功能的扩展部分模块的实现方法及显示的改变上。大三学期教
学实验中通过网上资料及课本信息我会会了简单的编程和设计最重要的是排
版效果在这些过程中我获益匪浅加深了对模数转换的了解能对其功能进行
多元化的应用数码管的显示技术上我在以前所存静态显示的基础上又掌握
了动态扫描方法另一个收获是在课程设计的过程中我边学边用C语言对简
单的C语言编程能够独立轻松的完成C语言在单片机的编程中灵活功能强大
效率高简单明了具有很多优势学会它是此次课程设计的最大收获。
本次课程设计培养了我运用互联网查找资料和综合应用课本理论知识解决
实际问题的能力。启发了我在今后的学习过程中不能懒懒散散学的要懂不懂
要把课本上的知识学精通同时也要多学习课外知识来扩张自己的知识面在计
算和动手方面要更加的耐心加细心才能把事情做得更好在生活和学习中要 和身边的人团结互助能帮的就要尽力帮。
由于能力有限我的课程设计难免有一些误差和错误还望老师批评和指正 致谢 本课程设计是在我的导师张斌张老师的亲切关怀和悉心指导下完成的。他严肃的科学态
度严谨的治学精神精益求精的工作作风深深地感染和激励着我。从课题的选择到项目
的最终完成张老师都始终给予我细心的指导和不懈的支持。虽然只有短短的一星期张老
师去教会我们很多。在此谨向郑老师致以诚挚的谢意和崇高的敬意。
另外我还要感谢在一起愉快的度过这次课程设计的伙伴正是由于你们的帮助和支持
我才能克服一个一个的困难和疑惑直至本文的顺利完成。特别感谢我的
队友他对本课题
做了不少工
作给予我不少的帮助。
参考文献
[1].戴梅萼 史嘉权 微型计算机技术及应用 北京清华大学出版社2003
[2].仇玉章 32位微型计算机原理与接口技术 北京清华大学出版社2001
[3].郑学坚 周斌 微型计算机原理及应用 北京清华大学出版社1998
[4].李伯成 候伯亭 微型计算机及应用 西安电子科技大学出版社1998
[5].邓元庆 贾鹏 数字电路与系统设计 西安电子科技大学出版社2003
下面是汇编程序其中的BCD的转换算
法不同不过后有解释
LED_0 EQU 30H ;存放三个数码管的段码
LED_1 EQU 31H
LED_2 EQU 32H
ADC EQU 35H ;存放AD转换后的数据
ST BIT P3.2
OE BIT P3.0
EOC BIT P3.1
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV LED_0,#00H ;给显示赋初值0
MOV LED_1,#00H
MOV LED_2,#00H
SETB P3.4
SETB P3.5
CLR P3.6 ;选择通道3
WAIT: CLR ST
SETB ST
CLR ST ;启动AD转换
JNB EOC,$ ;等待转换结束
SETB OE ;允许输出
MOV ADC ,P1 ;暂存转换结果
CLR OE ;关闭输出
LCALL BCD ;调用数据处理子程序
LCALL LED ;调用显示程序显示转换的值
SJMP WAIT
;*******************************************
;将AD转换输出的数据转换成相应的电压值
;*******************************************
BCD:MOV A,ADC ;将AD转换结果转换成BCD码
MOV B,#51 ;255/51=5.00V
DIV AB
MOV LED_2,A ;个位数字存入LED_2中
MOV A,B ;余数大于19HF0为1乘法溢出结果加5 CLR F0
SUBB A,#1AH
MOV F0,C
MOV A, #10
MUL AB
MOV B,#51
DIV AB
JB F0,LOOP2
ADD A,#5
LOOP2: MOV LED_1,A ;小数后的第一位存入LED_1中
MOV A,B
CLR F0
SUBB A,#1AH
MOV F0,C
MOV A,#10
MUL AB
MOV B,#51
DIV AB
JB F0,LOOP3
ADD A,#5
LOOP3: MOV LED_0,A ;小数后的第二位存入LED_0中
RET
;*****************************************
; 显示程序
;*****************************************
LED:MOV A,LED_0 ;数码显示子程序
MOV DPTR,#TABLE ;送段码表首地址
MOVC A,@A+DPTR
SETB P2.3 ;允许百位输出该数码管为共阳极形
MOV P0,A ;将位段码送给P0口
LCALL DELAY ;调用延时程序
CLR P2.3 ;关闭百位显示
MOV A,LED_1
MOV DPTR,#TABLE ;送段码表首地址
MOVC A,@A+DPTR
SETB P2.2 ;允许十位输出该数码管为共阳极形
MOV P0,A
;将位段码送给P0口
LCALL DELAY ;调用延时程序
CLR P
2.2 ;关闭十位显示
MOV A,LED_2
MOV DPTR,#TABLE2 ;送段码表首地址
MOVC A,@A+DPTR SETB P2.1 ;允许个位输出该数码管为共阳极形
MOV P0,A ;将位段码送给P0口
LCALL DELAY ;调用延时程序
CLR P2.1 ;关闭个位显示
RET
;**************************************
; 延时程序
;**************************************
DELAY: MOV R6,#2 ;延时1MS子程序
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H, 82H,0F8H, 80H,90H ;共阳极0~9十个段码
TABLE2: DB 40H,79H,24H,30H,19H,12H ;带小数点的0~5六个段码
END
下面是BCD的转换算法的解释
手机图片比较大自己再处理一下
除以51余数最大为50