源程序:LED_0 EQU 30H ;千分位
LED_1 EQU 31H
LED_2 EQU 32H
LED_3 EQU 33H ;存放段码
ADC EQU 35H
CLOCK BIT P2.4 ;定义ADC0808时钟位
ST BIT P2.5
EOC BIT P2.6
OE BIT P2.7
ORG 00H
SJMP START
ORG 0BH
LJMP INT_T0
START: MOV LED_0,#00H
MOV LED_1,#00H
MOV LED_2,#00H
MOV DPTR,#TABLE ;段码表首地址
MOV TMOD,#02H ;TO定时器方式2
MOV TH0,#245 ;脉冲信号1us
MOV TL0,#00H
MOV IE,#82H ;允许TO中断
SETB TR0 ;开启定时
WAIT: CLR ST
SETB ST ;看时序图
CLR ST ;启动AD转换
JNB EOC,$ ;等待转换结束,扫描
SETB OE
MOV ADC,P1 ;读取AD转换结果
CLR OE
MOV A,ADC ;存到A存储器
MOV B,#51 ;开始做运算
DIV AB
MOV LED_3,A ;整数值
MOV A,B
MOV B,#10
MUL AB
MOV R1,B
JNB PSW.2 , TAB1
INC A
TAB1: MOV B,#51
DIV AB
CJNE R1,#1, TAB2
ADD A,#5
TAB2: MOV LED_2,A ;十分位
CLR PSW.2
MOV A,B
MOV B,#10
MUL AB
MOV R1,B
JNB PSW.2 , TAB3
INC A
TAB3: MOV B,#51
DIV AB
CJNE R1,#1, TAB4
ADD A,#5
TAB4: MOV LED_1,A ;百分位
CLR PSW.2
MOV A,B
MOV B,#10
MUL AB
MOV R1,B
JNB PSW.2 , TAB5
INC A
TAB5: MOV B,#51
DIV AB
CJNE R1,#1, TAB6
ADD A,#5
TAB6: MOV LED_0,A ;千分位
CLR PSW.2
LCALL DISP
SJMP WAIT
INT_T0: CPL CLOCK ;提供ADC0808时钟信号
RETI
DISP: MOV A,LED_0 ;显示子程序
MOVC A,@A+DPTR
CLR P2.3
MOV P0,A
LCALL DELAY
SETB P2.3
MOV A,LED_1
MOVC A,@A+DPTR
CLR P2.2
MOV P0,A
LCALL DELAY
SETB P2.2
MOV A,LED_2
MOVC A,@A+DPTR
CLR P2.1
MOV P0,A
LCALL DELAY
SETB P2.1
MOV A,LED_3
MOVC A,@A+DPTR
ADD A,#80H
CLR P2.0
MOV P0,A
LCALL DELAY
SETB P2.0
RET
DELAY: MOV R6,#10 ;延时5毫秒
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
END
标黄的地方看不懂,为什么要用#51去除
|