单片机汇编语言源程序如下:
- LED_0 EQU 30H ;存放三个数码管的段码
- LED_1 EQU 31H ;十位
- LED_2 EQU 32H ;百位
- LED_3 EQU 33H ;千位
- ADC EQU 35H ;存放转换后的数据
- CLOCK BIT P1.4 ;定义0809时钟位
- ST BIT P1.5
- OE BIT P1.7
- EOC BIT P1.6
- ORG 00H
- SJMP START
- ORG 0BH
- LJMP INT_T0
- ORG 30H
- START: MOV LED_0,#00H
- MOV LED_1,#00H
- MOV LED_2,#00H
- MOV DPTR,#TABLE ;送段码表首地址
- MOV TMOD,#02H
- MOV TH0,#245
- MOV TL0,#00H
- MOV IE,#82H
- SETB TR0
- WAIT: CLR ST
- SETB ST
- CLR ST ;启动转换
- JNB EOC,$ ;等待转换结束
- SETB OE ;允许输出
- MOV ADC,P2 ;暂存转换结果
- CLR OE ;关闭输出
- MOV A,ADC ;将AD转换结果转换成BCD码
- MOV R7,A
- MOV LED_3,#00H
- MOV LED_2,#00H
- MOV A,#00H
- LOOP1: ADD A,#20H ;一位二进制码对应20mv电压值
- DA A
- JNC LOOP2
- MOV R4,A
- INC LED_2
- MOV A,LED_2
- CJNE A,#0AH,LOOP4
- MOV LED_2,#00H
- INC LED_3
- LOOP4: MOV A,R4
- LOOP2: DJNZ R7,LOOP1
- ACALL BTOD1
- LCALL DISP
- SJMP WAIT
- ORG 200H
- BTOD1: MOV R6,A
- ANL A,#0F0H
- MOV R5,#4
- LOOP3: RR A
- DJNZ R5,LOOP3
- MOV LED_1,A
- MOV A,R6
- ANL A,#0FH
- MOV LED_0,A
- RET
- INT_T0: CPL CLOCK ;提供0809时钟信号
- RETI
- DISP: MOV A,LED_0 ;数码显示子程序
- MOVC A,@A+DPTR
- CLR P1.3
- MOV P0,A
- LCALL DELAY
- SETB P1.3
- MOV A,LED_1
- MOVC A,@A+DPTR
- CLR P1.2
- MOV P0,A
- LCALL DELAY
- SETB P1.2
- MOV A,LED_2
- MOVC A,@A+DPTR
- CLR P1.1
- MOV P0,A
- LCALL DELAY
- SETB P1.1
- MOV A,LED_3
- MOVC A,@A+DPTR
- CLR P1.0
- MOV P0,A
- LCALL DELAY
- SETB P1.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
复制代码
|