目录
一、引言············································3
二、器件介绍·······································4
1)51单片机89C52简介·························4
2)A/D转换器芯片ADC0809简介················7
3)74HC138简介·································9
三、软件的设计···································11
1)软件所要实现的功能·························11
2)程序流程图·································11
四、硬件电路设计·································16
五、心得体会·····································17
六、参考文献······································19
附录一、硬件原理图······························20
附录二、课设程序································21
一、引 言
单片机(Single chip microcomputer)微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),单片机芯片常用英文字母的缩写MCU表示单片机,单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。单片机由运算器、控制器、存储器、输入输出设备构成,相当于一个微型的计算机(最小系统),和计算机相比,单片机缺少了外围设备等。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。它最早是被用在工业控制领域。
由于单片机在工业控制领域的广泛应用,单片机由仅有CPU的专用处理器芯片发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
本次课设采用的STC89C52单片机是51系列单片机的一种代表,目前51系列单片机是国内目前应用最广泛的一种单片机之一。单片机以其系统硬件构架完整、价格低廉、学生能动手等特点,成为工科学生硬件设计的基础课。本次课程设计主要目的是为了更进一步学会使用和了解单片机,增强学生的动手能力,让我们更透彻的将平时所做的实验吃透学懂。
二、器件介绍
本次课程设计的器件主要用到了89C52、ADC0809、74HC138、74HC374等下面将对它们进行介绍。
1、 51单片机89C52简介
89C52是INTEL公司MCS-51系列单片机中基本的产品,它采用ATMEL公司CMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。它结合了CMOS的高速和高密度技术及CMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统。
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是52系列的单片机一般不具备自编程能力。
89C52内置8位中央处理单元、512字节内部数据存储器ROM、8k片内程序存储器(RAM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。此外,89C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。
管脚说明
VCC:供电电压。 GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8个TTL门电流。当P0口的管脚第一次写“1”时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4个TTL门电流。P1口管脚写入“1”后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口作为AT89C51的一些特殊功能口,管脚备选功能。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的底位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA / VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
2、A/D转换器芯片ADC0809简介
ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。目前仅在单片机初学应用设计中较为常见。
(1)内部结构
ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图1所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。
图1 ADC0809的内部结构
(2)外部特性(引脚功能)
IN0~IN7:8路模拟量输入端。
2-1~2-8:8位数字量输出端。
ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路。
ALE:地址锁存允许信号,输入端,高电平有效。
START: A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。
EOC: A/D转换结束信号,输出端,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
OE:数据输出允许信号,输入端,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:时钟脉冲输入端。要求时钟频率不高于640KHz。
REF(+)、REF(-):基准电压。
Vcc:电源,单一+5V。
GND:地。
(3)工作过程
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。
转换数据的传送 A/D转换后得到的数据应及时传送给单片机进行处理。数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。
(4)引脚图
引脚图如图2
图2 ADC0809引脚图
3、74HC138简介
74HC138译码器可接受3位二进制加权地址输入(A0, A1和A2),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。74HC138特有3个使能输入端:两个低有效(E1和E2)和一个高有效(E3)。除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高。利用这种复合使能特性,仅需4片74HC138芯片和1个反相器,即可轻松实现并行扩展,组合成为一个1-32(5线到32线)译码器。任选一个低有效使能输入端作为数据输入,而把其余的使能输入端作为选通端,则74HC138亦可充当一个8输出多路分配器,未使用的使能输入端必须保持绑定在各自合适的高有效或低有效状态。74HC138的引脚图如图3所示。
74HC138 作用原理于高性能的存贮译码或要求传输延迟时间短的数据传输系统,在 高性能存贮器系统中,用这种译码器可以提高译码系统的效率。将快速赋能电路用于高速存贮器时,译码器的延迟时间和存贮器的赋能时间通常小于存贮器的典型存取时间,这就是说由肖特基钳位的系统译码器所引起的有效系统延迟可以忽略不计。
图3 74HC138引脚图
三、软件的设计
1、软件所要实现的功能:
(1)开机后显示班级、学号 112- 16;
(2)用的是实验箱键盘最后一排的六个键,依次为:“设定” “加一" "减一" "换位” ”确定“ ”运行“;
(3)按“设定”键,默认第一位闪烁,此时按“加一”和“减一”键可以调整数值;
(4)设定完一位后,按“换位”键可以对下一位进行设定;
(5)四位都设定完之后,按“确定”键,去闪烁,并将参数01下设定的值保存;
(6)再按下“确定”键,跳至参数02,此时可以依照步骤3对其进行设置;
(7)参数01、02、03、04设定好之后,可以按“确定”键对设定的值查询;
(8)在不同的参数下,按下“运行”键可以将以该设定值最大值,0为最小值的AD转换结果显示到前四位数码管上。
2、程序流程图
所谓流程图,就是用各种符号、图形、箭头把程序的流向及过程用图形表示出来。绘制流程图是单片机程序编写前最重要的工作,通常我们的程序就是根据流程图的指向采用适当的指令来编写的。 绘制流程图时,首先画出简单的功能流程图,再对功能流程图进行扩充和具体化,把功能图上的每一个粗框图转化为具体的存储器或单元,从而绘制出详细的程序流程图,即细框图。
流程图如下
图4 主程序
图5 判定加 减 换位键
图6 运行键子程序
图7 确定键子程序
四、硬件电路设计
本次的课程设计的所需的设备是:伟福系列单片机仿真的试箱,PC机。在搭建硬件电路时是以试验箱为设计平台,将相应的芯片端口以、信号采集端口以及必要的端口用导线正确连接即可。
程序下载调试:
(1)首先按照硬件设计要求的说明将伟福实验箱上所需要的相应的导线进行连接。确保连接无误
(2)将在电脑上仿真过的程序用伟福集成调试软件进行编译调试。(如出现问题及时在上面进行改正,直到编译无错误出现为止)
(3)在(2)完成后,点击运行(软件自动将编译好的程序下载到实验箱上面)数码管会出现相应的相应。
根据课题要求当连续按“确定”键时,对应的行号从01-04循环变化。按下“运行”键,执行不同的程序,共有三种要求,我选择要求1:
执行数据采集程序(参考实验箱相应的硬件电路,但要求不同),采集模拟量0-5V,显示对应的物理量在0000-最大值之间变化。5V对应的显示值(最大值)是多少可以在设定时通过某行(四行参数中的一行)参数设置的数值选择确定。具体如下:
CS0809芯片的片选端口接在CS1上,数码管显示口接在CS0上面,电位器的输出口接在CS0809 的IN0通道上。所选用的按键为试验箱上面4*6按键中最下面的六个按键。其功能从左至右一次是:“设定”键、“加一”键、“减一”键、“换位”键、“确定”键、“运行”键。
五、心得体会
一周半的单片机课程设计终于完成了,作为一名信息类专业的大三学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的实践平台。
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。我们是在做单片机课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。
通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。我觉得作为一名自动化专业的学生,单片机的课程设计是很有意义的。更重要的是如何把自己平时所学的东西应用到实际中。
这次课程设计让我受益匪浅,无论从知识上还是其他的各个方面。上课的时候的学习只是从理论的角度去理解枯燥乏味。但在实习中见过甚至使用了单片机及其系统,能够理论联系实际的学习,开阔了眼界,提高了单片机知识的理解和水平。
单片机是很重要的一门课程,老师和一些工作的朋友都曾说过,如果学好一门单片机,就凭这个技术这门手艺找一个好工作也不成问题。尽管我们在课堂学到的内容很有限,但在以后的学习中单片机还需要好好的深入研究和学习,学好了单片机也就多了一项生存的本钱。最后感谢老师对我们的精心指导和帮助,感谢同学们对我的帮助。
六、参考文献
[1]杨学昭,王东云.单片机原理及应用.西安:西安电子科技大学出版社,2009
[2]许珉.单片机原理及应用.北京:中国电力出版社,2007.08
[3]三恒星科技.MCS-51单片机原理与应用实例.北京:电子工业出版社,2008.01
[4]康华光.电子技术基础(数字部分).北京:高等教育出版社,2000.6
[5]孙肖子,田根登.现代电子线路和技术实验.北京:高等教育出版社,2004.1
[6]戴佳,戴卫恒.《51单片机C语言应用程序设计实例精讲》.北京:电子工业出版社,2006.4
附录一、硬件原理图
附录二、课设程序
OUTBIT EQU 08002H ;位控制器
OUTSEG EQU 08004H ;段控制器
IN EQU 08001H ;键盘读入口
CS0809 EQU 09000H
LEDBUF EQU 30H ;显示缓冲区
CAN EQU 51H ;参数1234
ORG 0000H
LJMP START
ORG 0020H
START:MOV 25H,#00H
MOV LEDBUF,#00H ;班级、学号的序码
MOV LEDBUF+1,#01H
MOV LEDBUF+2,#01H
MOV LEDBUF+3,#02H
MOV LEDBUF+4,#01H
MOV LEDBUF+5,#06H
MOV 36H,#00H
MOV 40H,#00H ;参数1下的设定值缓冲区
MOV 41H,#00H
MOV 42H,#00H
MOV 43H,#00H
MOV 44H,#00H ;参数2下的设定值缓冲区
MOV 45H,#00H
MOV 46H,#00H
MOV 47H,#00H
MOV 48H,#00H ;参数3下的设定值缓冲区
MOV 49H,#00H
MOV 4AH,#00H
MOV 4BH,#00H
MOV 4CH,#00H ;参数4下的设定值缓冲区
MOV 4DH,#00H
MOV 4EH,#00H
MOV 4FH,#00H
MOV 50H,#00H
MOV CAN,#01H ;参数1234
L2:MOV R0,#LEDBUF ;显示班级、学号
LCALL DISPLAYLED1 ;显示子程序,R0为参数
LCALL TESTKEY ;判断“有效键”是否按下? JNB 20H.0,L2 ;没有键按下,则继续显示班级、学号
L3:MOV 25H,#00H
MOV A,CAN
MOV B,#04H
MUL AB
ADD A,#3CH ;将参数首地址存入R0
MOV R0,A ;第一次有键按下默认显示参数1下设定的值,即:显示从40H单元开始的内容
LCALL DISPLAYLED2 ;调用设定参数显示子程序
LCALL TESTKEY ;检测是否有键按下
JNB 20H.0,L3 ;没有键按下,则继续显示参数1下设定的值
LCALL PAZ ;有键按下,则判断运行键是否按下
CJNE R5,#05H,QD1
LJMP SD ;R5=5
QD1:LJMP S44
SD:SETB 20H.1 ;20H.1置1
MOV 36H,#00H
MOV A,CAN
MOV B,#04H
MUL AB
ADD A,#3CH ;通过参数CAN来选择设定值的缓冲区(CAN=1,A=40H;CAN=2,A=44H;CAN=3,A=48H;CAN=4,A=4CH)
ADD A,36H
MOV R0,A
MOV 70H,@R0 ;将闪值保存至70H单元
H1:MOV A,CAN
MOV B,#04H
MUL AB
ADD A,#3CH
ADD A,36H
MOV R0,A ;R0指向闪烁寄存字节处
JB 20H.1,S1
MOV @R0,#10H
SETB 20H.1
LJMP DS1
S1:MOV @R0,70H ;将闪烁字节的值显示出来
CLR 20H.1
DS1:MOV A,CAN
MOV B,#04H
MUL AB
ADD A,#3CH
MOV R0,A ;R0指向显示首区
LCALL DISPLAYLED2
LCALL TESTKEY
JNB 20H.0,H1
LCALL PAZ
CJNE R5,#02H,S11 ;换位
MOV A,CAN
MOV B,#04H
MUL AB
ADD A,#3CH
ADD A,36H
MOV R0,A
MOV @R0,70H
INC 36H
HW1:MOV A,CAN
MOV B,#04H
MUL AB
ADD A,#3CH
ADD A,36H
MOV R0,A
MOV 70H,@R0
MOV A,36H
CJNE A,#04H,H1
MOV 36H,#00H
LJMP HW1
S11:CJNE R5,#04H,S22 ;加1
INC 70H ;闪烁值加1
MOV A,70H
CJNE A,#0AH,H1
MOV 70H,#00H
LJMP H1
S22:CJNE R5,#03H,S33 ;减1
DEC 70H ;闪烁值减1
MOV A,70H
CJNE A,#0FFH,H2
MOV 70H,#09H
H2:LJMP H1
S33:CJNE R5,#01H,H2 ;确定1(去掉闪烁,并将该参数下的设定值保存到对应的缓冲区)
MOV A,CAN
MOV B,#04H
MUL AB
ADD A,#3CH
ADD A,36H
MOV R0,A
MOV @R0,70H
LJMP L3
S44:CJNE R5,#01H,W1 ;确定2(将参数加1,并将该参数下的设定值显示到数码管上)
INC CAN ;参数加1,指向下一个参数
MOV A,CAN
CJNE A,#05H,L22
MOV CAN,#01H
LJMP L3
W1:CJNE R5,#00H,L22
YX:LCALL AD ;采集(调用AD转换子程序,获得AD值)
LCALL TESTKEY
JB 20H.0,L22
LJMP YX ;运行
L22:LJMP L3
;判断"有效按键"子程序
TESTKEY:MOV DPTR,#OUTBIT
MOV A,#00H
MOVX @DPTR,A ;6条列线全置0
MOV DPTR,#IN
MOVX A,@DPTR ;读入键状态(哪一排有键按下,则对应的位为:0)
ANL A,#01H ;若是最后一排有键按下,则8NL之后A=0,否则A=1
CJNE A,#01,B1 ;判断按下的是否是最后一排的键(有效按键)?
CLR 20H.0 ;A=1,则最后一排没有键按下,将20H.0清0
LJMP FH
B1:SETB 20H.0 ;A=0,则最后一排有键按下,将20H.0置1
FH:RET
判断键位,通过R5返回,运行--00H,确定-01H,换位--02H,减1--03H,加1--04H,设定--05H
PAZ:MOV R4,#0FEH ;1111 1110B
MOV R5,#0FFH ;1111 1111B
NEXT:MOV DPTR,#OUTBIT
MOV A,R4
MOVX @DPTR,A ;只将第6列置0
MOV DPTR,#IN
MOVX A,@DPTR ;读入键状态
ANL A,#01H ;若“运行”键按下,则ANL之后A=0;否则A=1
CJNE A,#01H,QDZ ;判断“运行”键是否按下?(依次判断最后一排的键)
MOV A,R4
RR A ;否,则左移一位
MOV R4,A
INC R5 ;执行后,R5=00H
LJMP NEXT
QDZ:INC R5 ;按下“运行”键,则跳至此处,执行后,R5=00H
MOV LEDBUF,R5 ;若前面没有按“运行”键,则R5=01H;有,则R5=00H
LOOP:LCALL TESTKEY
JB 20H.0,LOOP ;有键按,则循环检测按键
RET
;显示1子程序(班级、学号)
DISPLAYLED1:MOV R2,#20H ;选通第1位数码管
MOV R3,#06H ;6位数码管显示,控制循环6次
L1:MOV DPTR,#OUTBIT
MOV A,R2
MOVX @DPTR,A
RR A ;右移一位,选通下一位数码管
MOV R2,A
MOV A,@R0
MOV DPTR,#LEDMAP
MOVC A,@A+DPTR ;由序码求段码
MOV DPTR,#OUTSEG
MOVX @DPTR,A ;输出段码
LCALL DELAY ;调用延时
INC R0 ;指向下一个要显示的段码
DJNZ R3,L1
RET
;显示2子程序(设定值和参数)
DISPLAYLED2:MOV R2,#20H ;选通第1位数码管
SETB 21H.0 ;将21H.0置1
MOV R3,#06H ;6位数码管显示,控制循环6次
L12:MOV DPTR,#OUTBIT
MOV A,R2
MOVX @DPTR,A
RR A ;右移一位,选通下一位数码管
MOV R2,A
CJNE A,#02H,L44 ;没选通第五位数码管(0000 0010B),则跳转,正常显示
CLR 21H.0 ;选通了第五位数码管,则将21H.0清0
L44:MOV A,@R0
MOV DPTR,#LEDMAP
MOVC A,@A+DPTR ;由序码求段码
MOV DPTR,#OUTSEG
MOVX @DPTR,A ;输出段码
LCALL DELAY ;调用延时
JB 21H.0,H11 ;21H.0等于1,即没选通第五位数码管,则跳转
MOV R0,#4FH ;选通了第五位数码管,则给R0初始地址4FH
SETB 21H.0
H11:INC R0 ;(50H)=00H,第五位数码管显示“0”;(51H)=01H,第六位数码管显示“1”
DJNZ R3,L12
RET
;AD转换子程序
AD:LCALL PXS ;调系数
MOV DPTR,#CS0809 ;采集
MOV A,#00H
MOVX @DPTR,A
JNB P3.2,$ ;方法1:利用ADC0809的EOC信号触发中断INT0(P3.2口)
;MOV A,#40H
;DJNZ ACC,$ ;方法2:延时>100us
MOVX A,@DPTR
LCALL ZHUANHUAN
MOV R0,#60H
LCALL DISPLAYLED2
MOV P1,#80H
RET
;判系数子程序
PXS:MOV A,CAN
MOV B,#04H
MUL AB
ADD A,#3CH
MOV R0,A
MOV R1,A
MOV A,@R0
SWAP A
INC R0
ADD A,@R0
MOV 53H,A
INC R0
MOV A,@R0
SWAP A
INC R0
ADD A,@R0
MOV 54H,A
MOV A,53H
ANL A,#0F0H
CJNE A,#00,DYYQ
MOV 25H,#01H
INC R1
MOV A,@R1
SWAP A
INC R1
ADD A,@R1
MOV 53H,A
INC R1
MOV A,@R1
SWAP A
ADD A,#00
MOV 54H,A
DYYQ:MOV 57H,#02H
MOV 58H,#55H
MOV 55H,#00H
MOV 56H,#00H
MOV 22H,#00H
MOV R0,#0FFH
LOOP5:INC R0
CLR C
MOV A,56H
ADD A,58H
DA A
MOV 56H,A
MOV A,55H
ADDC A,57H
DA A
MOV 55H,A
CLR C
MOV A,56H
SUBB A,54H
MOV 22H.0,C
MOV A,55H
SUBB A,53H
MOV 22H.1,C
MOV R2,22H
CJNE R2,#00,NEXT5
MOV A,56H
CJNE A,54H,NEXT5
INC R0
NEXT5:MOV C,22H.1
JC LOOP5
MOV 22H,#00H
CLR C
MOV B,R0
RET
;转换子程序
ZHUANHUAN:MUL AB
MOV 6AH,B
MOV 6BH,A
MOV 6CH,#03H
MOV 6DH,#0E8H
MOV R0,#0FFH
LOOP1:INC R0 ;判定千位
MOV A,6BH
MOV 2BH,6BH
SUBB A,6DH
MOV 6BH,A
MOV A,6AH
MOV 2AH,6AH
SUBB A,6CH
MOV 6AH,A
NEXT1:JNC LOOP1
MOV 60H,R0
MOV 6AH,2AH
MOV 6BH,2BH
MOV 22H,#00H ;判定百位
CLR C
MOV 6CH,#00H
MOV 6DH,#64H
MOV R0,#0FFH
LOOP2:INC R0
MOV A,6AH
CJNE A,#00H,BW1
MOV A,6BH
MOV 2BH,6BH
SUBB A,6DH
MOV 6BH,A
LJMP NEXT2
BW1:MOV A,6BH
SUBB A,6DH
MOV 6BH,A
MOV A,6AH
SUBB A,6CH
MOV 6AH,A
LJMP LOOP2
NEXT2:JNC LOOP2
MOV 61H,R0
MOV 6BH,2BH
MOV 22H,#00H ;判定十位
CLR C
MOV 6DH,#0AH
MOV R0,#0FFH
LOOP3:INC R0
MOV A,6BH
MOV 2BH,6BH
SUBB A,6DH
MOV 6BH,A
NEXT3:JNC LOOP3
MOV 62H,R0
MOV 63H,2BH
MOV A,25H
CJNE A,#01H,TZ1
MOV 63H,62H
MOV 62H,61H
MOV 61H,60H
MOV 60H,#00H
TZ1:RET
;延时子程序
DELAY:MOV R6,#06
D1:MOV R7,#210
DJNZ R7,$
DJNZ R6,D1
RET
;数码管字形段码 ;显示字形
LEDMAP:DB 3FH,06H,5BH,4FH,66H ;01234
DB 6DH,7DH,07H,7FH,67H ;56789
DB 77H,7CH,39H,5EH,79H ;ABCDE
DB 71H,00H,76H ;F灭H