DISP: ; 个位数 MOV A, ADC ; A=ADC MOV B, #51 ; B=51 DIV AB ; A/B:A是商,B是余数 MOVC A, @A+DPTR CLR P1.3 MOV P3, A CLR P3.7 LCALL DELAY SETB P1.3 ; 小数点后一位 MOV A, B ; A=B,即余数 MOV B, #10 ; B=10 ; 临时存储A MOV TEMP, A ; TEMP=A SUBB A, #25 ; A=A-25 JC ADJ1 ; 若余数<25 ; BA = 10 x (A-25) MUL AB ; AxB=高字节B,低字节A MOV B, #51 DIV AB ADD A, #5 ; A=A+5 SJMP SHOW1 ADJ1: MOV A, TEMP ; 恢复A MUL AB MOV B, #51 DIV AB SHOW1: MOVC A, @A+DPTR CLR P1.2 MOV P3, A LCALL DELAY SETB P1.2 ; 小数点后两位 MOV A, B MOV B, #10 MOV TEMP, A SUBB A, #25 JC ADJ2 MUL AB MOV B, #51 DIV AB ADD A, #5 SJMP SHOW2 ADJ2: MOV A, TEMP MUL AB MOV B, #51 DIV AB SHOW2: MOVC A, @A+DPTR CLR P1.1 MOV P3, A LCALL DELAY SETB P1.1 简述此段代码
时间: 2024-04-15 21:24:48 浏览: 90
LED_Disp.rar_C51 四个数码管_LED程序disp
这段代码是一个基于8051单片机的数码管显示程序。它的功能是将ADC(模数转换器)的结果显示在三个数码管上。代码中首先将ADC结果存储在寄存器A中,然后将寄存器B设置为51。接下来,使用除法指令将A除以B,商存储在寄存器A中,余数存储在寄存器B中。
然后,通过MOVC指令将A+DPTR位置的数据移动到寄存器A中,然后将P1.3引脚清零,将寄存器A的值移动到P3端口,并将P3.7引脚清零。然后调用延时子程序DELAY,延时一段时间后,设置P1.3引脚。
接下来是小数点后一位的处理。将寄存器A设置为余数B,将寄存器B设置为10。然后将A的值存储在TEMP临时寄存器中,将A减去25。如果结果小于25,跳转到ADJ1标号处;否则,乘法指令将A和B相乘,商存储在寄存器A中,然后将B设置为51,再次使用除法指令将A除以B,最后将A加上5。接着跳转到SHOW1标号处。
SHOW1标号处通过MOVC指令将A+DPTR位置的数据移动到寄存器A中,然后将P1.2引脚清零,将寄存器A的值移动到P3端口。然后调用延时子程序DELAY,延时一段时间后,设置P1.2引脚。
类似地,代码处理小数点后两位的显示。最后通过MOVC指令将A+DPTR位置的数据移动到寄存器A中,然后将P1.1引脚清零,将寄存器A的值移动到P3端口。再次调用延时子程序DELAY,延时一段时间后,设置P1.1引脚。
整个代码的功能是将ADC结果显示在三个数码管上,并且通过延时控制显示的刷新频率。
阅读全文