OE EQU P1.0//给特定的符号名赋值
EOC EQU P1.1
ST EQU P1.2
CLK EQU P1.3
SHU EQU 30H
TEMP EQU 31H
ORG 0000H ;起始指令
AJMP MAIN
ORG 000BH
CPL CLK ;i这是在定时器中翻转CLK,也就是给ADC提供时钟。
RETI
ORG 0100H
MAIN:
MOV SP,#60H ;这个是设置堆栈的位置,否则默认的堆栈肯定会被冲掉
MOV TMOD,#02H ;设置T0工作于外启动,定时,方式2 MOV TH0,#14H
MOV TL0,#00H ;给定时器赋初值,X=M-T/Tm
MOV IE,#82H ;IE初始化
MOV A,#3FH
MOV SHU,#0
SCAN:
CLR ST
SETB ST
CLR ST ;人为地在ST引脚上产生脉冲,给ADC一个开始脉冲,告诉它启动AD转化
M0: JNB EOC,M0 ;EOC是AD转换结束的标志,可作为转换结束中断的请求信号 SETB OE ; OE是数字量输出允许信号输入,高电平有效
MOV A,#0FFH
MOV P3,A
M1: MOV A,P3
MOV SHU,A ;把转换出来的数给SHU
LCALL CHANGE
LCALL DISP
CLR OE ;使能ADC,让它能够工作,看来这个ADC是低电平使能
AJMP SCAN
DISP:
MOV R0,#TEMP
MOV R2,#00H
DISP1:MOV A,R2
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV P2,A ;把选通的那一个管的数给P2口
MOV A,@R0
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取字符
MOV P0,A ;A就输出
MOV R5,#5
ACALL DELAY
INC R0
INC R2
CJNE R2,#3,DISP1 ;扫描显示
MOV P0,#00H
RET
CHANGE: ;把数字分成百、十和个位
MOV A,SHU
MOV B,#100
DIV AB
MOV TEMP,A
MOV A,B
MOV B,#10
DIV AB
MOV TEMP+1,A
MOV TEMP+2,B
RET
DELAY: ;延时
MOV R6,#1
DELAY0:
MOV R7,#100
DJNZ R7,$
DJNZ R6,DELAY0
DJNZ R5,DELAY
RET
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;字形码表
TAB1: DB 0FDH,0FBH,0F7H ;选通数吗管的通道
END