实验02_Proteus仿真数码管显示代码

一、原理总结

  • 利用两个寄存器R4和R5来存储两个数码管的显示效果,R4是前一个数码管显示所需,而R5是后一个数码管显示所需,利用左移操作RLC来使之每一位被依次输入到C中 , 然后将C输入到LED中(当LED每位都有数据时 , 数码管才会显示) , 利用停顿函数使数码管上数字停留一段时间 。
二、程序分析
  • 以下为全部代码,之后会进行具体分析
总体代码;====================================================================; Main.asm file generated by New Project wizard;; Created:周一 九月 19 2022; Processor: AT89C51; Compiler:ASEM-51 (Proteus);====================================================================$NOMOD51$INCLUDE (8051.MCU);====================================================================; DEFINITIONS;====================================================================;====================================================================; VARIABLES;====================================================================;====================================================================; RESET and INTERRUPT VECTORS;====================================================================; Reset Vectororg0000hjmpStart;====================================================================; CODE SEGMENT;====================================================================org0100hTAB : DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71HPAUSE: ;停顿函数MOV R1,#255 ;R1是第一层嵌套循环D1:MOV R2,#255 ;R2是第二层嵌套循环D2:DJNZ R2,D2 ;当R2不为0时跳转 , 为0时不跳转,执行DJNZ R1,D1使得R1- -DJNZ R1,D1 ;当R1不为0时跳转,为0时不跳转RETLED:MOV R0,#8;将8赋值给R0 , 8位左移MOV A,R5;R5代表右边的LED的数MOVC A,@A+DPTR;A是偏移地址,是从DPTR中寻址LOOP1:RLC A;A左移CLR P1.4MOV P1.5,CSETB P1.4DJNZ R0,LOOP1MOV R0,#8MOV A,R4MOVC A,@A+DPTRLOOP2:RLC ACLR P1.4MOV P1.5,CSETB P1.4DJNZ R0,LOOP2MOV R6,#0S1:LCALL PAUSEINC R6CJNE R6,#10,S1RETSTART: MOV A,#00HMOV p0,AMOV DPTR,#TABMOV R4,#0MOV R5,#0A1:MOV C,P1.0JC XUNHUANMOV C,9JC FUWEIINC R5CJNE R5,#15,XUNHUANMOV R5,#0INC R4CJNE R4,#15,XUNHUANJMP FUWEIXUNHUAN:LCALL LEDJMP A1FUWEI:MOV R4,#0MOV R5,#0JMP A1JMP START;====================================================================END数组存值: