总显示为0
LED1 EQU 30H ;初始化定义 LED2 EQU 31H LED3 EQU 32H ;存放三个数码管的段码 ADC EQU 35H ;存放转换后的数据 ST BIT P3.2 OE BIT P3.0 EOC BIT P3.1 ;定义ADC080... LED1 EQU 30H ;初始化定义
LED2 EQU 31H
LED3 EQU 32H ;存放三个数码管的段码
ADC EQU 35H ;存放转换后的数据
ST BIT P3.2
OE BIT P3.0
EOC BIT P3.1 ;定义ADC0809的功能控制引脚
ORG 0000H
LJMP MAIN ;跳转到主程序执行
ORG 0030H
MAIN: MOV LED1,#00H
MOV LED2,#00H
MOV LED3,#00H ;寄存器初始化
CLR P3.4
SETB P3.5
CLR P3.6 ;选择ADC0809的通道2
WAIT: CLR ST
SETB ST
CLR ST ;在脉冲下降沿启动转换
JNB EOC,$ ;等待转换结束
SETB OE ;允许输出信号
MOV ADC,P1 ;暂存A/D转换结果
CLR OE ;关闭输出
MOV A,ADC ;将转换结果放入A中,准备个位数据转换
MOV B,#50 ;变换个位调整值50送B
DIV AB
MOV LED1,A ;将变换后的个位值送显示缓冲区LED1
MOV A,B ;将变换结果的余数放入A中,准备十分位变换
MOV B,#5 ;变换十分位调整值5送B
DIV AB
MOV LED2,A ;将变换后的十分位值送LED2
MOV LED3,B ;最后的余数作百分位值送LED3
LCALL DISP ;调用显示程序
AJMP WAIT
DISP:MOV R1,#LED1 ; 显示子程序
CJNE @R1,#5,GO ;@R1=5V?是往下执行,否,则到GO
MOV LED2,#0H ;是5V,即最高值,将小数的十分位清零
MOV LED3,#0H ;将小数的百分位清零
GO:MOV R2,#3 ;显示位数赋初值,用到3位数码管
MOV R3,#0FDH ;扫描初值送R3
DISP1:MOV P2,#0FFH ;关闭显示,目的防止乱码
MOV A,@R1 ;显示值送A
MOV DPTR,#TAB ;送表首地址给DPTR
MOVC A,@A+DPTR ;查表取段码
CJNE R2,#3,GO1 ;判断是否个位数码管?否则跳到GO1
ORL A,#80H ;将整数的数码管显示小数点
GO1:MOV P0,A ;送段码给P0口
MOV A,R3
MOV P2,A ;送位码给P2口
LCALL DELAY ;调用延时
MOV R3,A
RL A ;改变位码
MOV R3,A
INC R1 ;改变段码
DJNZ R2,DISP1 ;三位是否显示完?否则调到DISP1
RET
DELAY:MOV R6,#10 ;延时5S程序:
D1:MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
TAB: DB 3FH, 06H,5BH,4FH,66H;共阴极数码管显示0-4 ;显示数据表:
DB 6DH,7DH,07H,7FH,6FH;显示5-9
END
|