;***********************************************************
;**
;*数字电压表演示程序*
;**
;***********************************************************
;功能:数码管显示ADC0832采样值
;适用于MCS-51开发板
;创作人:Jihao
;创作日期:2005/12/23
;=====================================================
AD_
AD_
AD_
DISSTARTEQU30H;显示单元首地址
LED_DATAEQUP0;数码管数据定义
AD_TEMPEQU2FH;AD采样值存放单元
ORG0000H
JMPSTART
ORG0030H
;====================================================
START:
MOVSP,00H
MOVAD_TEMP,A
MOVP0,0FFH
START1:
ACALLAD_CONV
MOVR4,08H;计数器初值,读取8位数据,
AD_READ:CLRAD_CLK;下降沿
MOVC,AD_DAT;读取DO端数据
RLCA;C移入A,高位在前
SETBAD_CLK;下一个脉冲
DJNZR1,AD_READ;没读完继续
SETBAD_CS
MOVAD_TEMP,A;转换结果存入AD_TEMP
RET
;====================================================
;AD采集值转为三位BCD码子程序
;转换后的三位BCD码分别存入DISSTART+2、
;DISSTART+1、DISSTART单元中。
;AD采集值在AD_TEMP单元中。
;255/51=5.00V运算
;====================================================
TUNBCD:
MOVA,AD_TEMP
MOVB,1AH;相减不够,C=1表示余数小于1AH(26)
MOVF0,C
MOVA,51
DIVAB;再除以51
JBF0,T_BCD1
ADDA,1AH
MOVF0,C
MOVA,51
DIVAB
JBF0,T_BCD2
ADDA,DISSTART;开始填充显示单元
MOVR2,TAB_NU;获得表头
MOVCA,@A+DPTR;获得编码数据
MOV@R0,A;保存编码数据
INCR0;指向下一个带转换数据
DJNZR2,DISP1;继续转换,直到完成
MOVR0,0FEH;从第一个数码管开始
MOVR2,7FH
MOV@R0,A
DISP4:LCALLDELAY2MS;延时2MS
LCALLDELAY2MS
LCALLDELAY2MS
DJNZR2,DISP2;重复显示下一个
POPPSW
RET;显示完成,返回
;====================================================
;延时子程序
;====================================================
DELAY2MS:
MOVR6,100
DJNZR7,$
DJNZR6,DEL1
RET
;====================================================
TAB_NU:
DB0c0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH
;====================================================