单片机实验报告两位数码管显示00-99(中级级实验)实验介绍:在生活中数码管显示非常常见,数码管显示以其高亮度,高性价比等特点被广泛应用。单片机控制1位数码管较为简单,属于入门级实验。本次实验主耍介绍如何通过多位数码管采用动态扫描显示的形式,动态显示数字,为灵活运用动态扫描打下坚实基础。实验目的:1.掌握多位数码管的控制方法。2.掌握动态扫描程序的循环执行应用。3.掌握用变量的方式控制多位数码管的显示的方法。4.掌握查表法进行编程的基本方法。实验原理:仿真电路图如下图所示。图中左侧为单片机最小系统,为单片机运行所必须部分。图右侧为显示部分,通过单片机1/0口直接驱动数码管显示。在进行实物制作时请注意,因为单片机的1/0口驱动能力较弱,因此不宜采用单片机1/0口直接驱动多位数码管的公共端,如图中的1和2号引脚。在进行实物制作时,可以使用简单的三极管放大电路来驱动公共端。在仿真软件ProteUS中绘制仿真仿真原理图如上图所示。在仿真过程中,两位的数码管有红色以及蓝色两种,在进行仿真的时候,这两种颜色的数码管基本没有区别,只是颜色不同而已。在选用的时候需要注意所选的数码管的极性,以2位数码管为例,数码管在Proteus软件中的关键词为7SEG,在7SEG-后面的的两个字母就代表了所选择的数码管的极性。在软件中一般有CC和CA两种,其中CC代表共阴极,CA代表共阳极。共阳极和共阴极数码管显示的段码完全相反,因此在进行仿真的时候,一定注意所选数码管的极性。U1R110KUTExΓ>18*×TAL1XTAL2IOuFC2HHC1HH30pFσ>OXT>L2-H±±PO.OJADOP0.1ΛAD1PORAD2P0.3JΛD3P0.49D4P0.5胪D5P0.6JAD6P0.7ΛAD7P2.0fA8P2.W9P2∙2Λ⅛10P23依11P2.4/A12P2≡13P2&R1SP27/A15P3.0ff%DP3∙1Π¾DP3.2flNTTP3.3(∣NTi"P34∏nP3.y∏P3.8恒P3.7/RD23—LΔ—11AT89C51-RST单片机实验报告2汇编语言代码1(查表法):ABCEQU10//修改本行的10,就可以修改显示速度ORGOHJMPMAINORG30HMAIN:MOV30H,#0MOVR0,#30HMAINl:CJNE@R0,#100,MAIN2MAIN2:JNCMAIN3CALLXSINC30HJMPMAINlMAIN3:MOV30H,#0JMPMAINlXS:MOVA,30HMOVB,#10DlVABMOV31H,AMOV32H,BMOVR4,#10XS3:MovR3,#ABCXS2:MOVR2,#255XSl:CLRP3.1MOVDPTR,#TABMOVA,3IHMoVCA,@A+DPTRMoVP2,A单片机实验报告3SETBP3.0NOPCLRP3.0MoVA,32HMoVCA,@A+DPTRMoVP2,ASETBP3.1NOPDJNZR2,XSlDJNZR3,XS2DJNZR4,XS3RETTAB:DBOCOH,0F9H,0A4H,OBOH,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,OAlH,DB86H,8EH,0BFHEND该程序具有一定自由性,修改第一行的参数,就可以调节计时的速度。该值越大,动态扫描每个数的循环次数越多,每个数字显示的时间就越长。该值越小,动态扫描每个数的循环次数越少,每个数字的显示时间就越短。注意:在使用定义字节命令伪指令的时候,如果一行写不下,或者为了美观想另起一行书写,一定注意在新起的一行必须添加伪指令关键字“DB"。另外抄写程序的学习者一定注意,标号后面的“:"一定不可以省,否则在编译程序的时候会报错。对于没有Keil编程软件的编程者,可以将如下代码存入HEX文件中,再将该HEX文件下载至单片机或导入仿真软件中。程序HEX代码如下::0300000002008576:0C008500787FE4F6D8FD758107020000CA:02000000802E50:100030007530007830B6640050061145053080F503:1000400075300080F0E53075F00A84F53185F032C6:100050007C0A7B0A7AFFC2B1900074E53193F5A067:10006000D2B000C2B0E53293F5A0D2B100DAE7DB3E:10007000E3DCDF22C0F9A4B0999282F880908883F3:05008000C6A1868EBF41单片机实验报告4:0000000IFF程序HEX使用方法:1)新建txt文档2)将HEX代码复制到txt文档中,保存3)将该txt文档另存为"程序名.hex",例如:pro.hex4)在仿真软件中打开即可实现仿真(或下载至单片机)。C语言代码:#include"reg52.h"#include,,intrins.h,'#defineSD20000〃修改本行中的20000,可以调节计时快慢#defineucharIUisignedcharsbitP30=P3Λ0;sbitP31=P3Λ1;uchara[]={θxcθ,OxfP,0xa4,OxbO,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,Oxa1,0x86,0x8e,0xbf};ucharb,c,d,ij;intm;xianshi(ucharx,y){for(m=0;m