用ADC0832制作数字电压表

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用ADC0832制作数字电压表

;**************************************************************

;* 描述: *

;* ADC0832数字电压表数码管显示 *

;* *

;* 调节ADC0832旁边的电位器,数码管显示 ADC0832 转换值的大小 * ;* *

;* * ;******************************************************************

AD_CLK EQU P1.0

AD_DAT EQU P1.1

AD_CS EQU P3.4

DISSTART EQU 30H ;显示单元首地址

LED_DATA EQU P0 ;数码管数据定义

ORG 0000H

JMP START

;--------------------------------------------------------

START: MOV SP,#60H

MOV A,#00H

MOV 20H,A

MOV P0,#0FFH

MOV P2,#0FFH

START1: CALL AD_CONV

CALL AD_CHULI

CALL QUSHU

CALL ADPLAY

JMP START1

;---------------------------------------------------------

AD_CONV: ;ADC0832初始化

SETB AD_CS ;一个转换周期开始

CLR AD_CLK

CLR AD_CS ;CS置0,片选有效

SETB AD_DAT ;DI置1,起始位

SETB AD_CLK ;第一个脉冲

CLR AD_DAT ;在负跳变之前加一个DI反转操作

CLR AD_CLK

SETB AD_DAT ;DI置1,设为单通道

SETB AD_CLK ;第二个脉冲

CLR AD_DAT ;***

CLR AD_CLK ;

CLR AD_DAT ;DI置0,选择通道0

SETB AD_CLK ;第三个脉冲

SETB AD_DAT ;***

CLR AD_CLK

NOP

SETB AD_CLK ; 第四个脉冲

MOV R1,#08H ;计数器初值,读取8位数据,AD_READ: CLR AD_CLK ;下降沿

MOV C,AD_DAT ;读取DO端数据

RLC A ;C移入A,高位在前

SETB AD_CLK ;下一个脉冲

DJNZ R1,AD_READ ;没读完继续

SETB AD_CS

MOV 20H,A ;转换结果发给20H

RET

;------------------------------------------------------

AD_CHULI:

CLR C

MOV R5,#00H ;十进制转换的低位寄存器 MOV R4,#00H ;十进制转换的高位寄存器 MOV R3,#08H ;十进制调整的次数

MOV A,20H

AD_CHULI1:

RLC A

MOV R2,A

MOV A,R5

ADDC A,R5

DA A

MOV R5,A

MOV A,R4

ADDC A,R4

MOV R4,A

MOV A,R2

DJNZ R3,AD_CHULI1

MOV A,R5

ADD A,R5

DA A

MOV R5,A

MOV A,R4

ADDC A,R4

DA A

MOV R4,A

RET

;-------------------------------------------------

QUSHU: MOV A,R5

ANL A,#0FH

MOV DISSTART,A

MOV A,R5

ANL A,#0F0H

SWAP A

MOV DISSTART+1,A

MOV A,R4

ANL A,#0FH

MOV DISSTART+2,A

MOV A,R4

ANL A,#0F0H

MOV DISSTART+3,A

RET

;---------------------------------------------------

ADPLAY: PUSH PSW

CLR PSW.3

SETB PSW.4

MOV R0,#DISSTART ;开始填充显示单元 MOV R2,#03H ;共计填充 3 位DISP1: MOV A,@R0 ;获得当前位地址

MOV DPTR,#TAB_NU ;获得表头

MOVC A,@A+DPTR ;获得编码数据

MOV @R0,A ;保存编码数据 INC R0 ;指向下一个带转换数据

DJNZ R2,DISP1 ;继续转换,直到完成

MOV R0,#DISSTART ;获得显示单元首地址 MOV R1,#07FH ;从第一个数码管开始

MOV R2,#03H ;共显示3位数码管DISP2: MOV LED_DATA,@R0 ;读取显示单元数据 MOV P2,R1 ;开始显示当前位

MOV A,R1 ;准备显示下一位

RR A ;

MOV R1,A ;下一位

INC R0 ;取下一个单元地址

JNB ACC.5,DISP3 ;第三位数码管加小数点

JMP DISP4

DISP3: MOV A,@R0

ANL A,#7FH

MOV @R0,A

DISP4: LCALL DELAY5MS ;延时 2 MS

DJNZ R2,DISP2 ;重复显示下一个

POP PSW

RET ;显示完成,返回

;---------------------------------------------------

DELAY5MS:

MOV R6,#10

DEL1: MOV R7,#100

DJNZ R7,$

DJNZ R6,DEL1

RET

;-------------------------------------------------

TAB_NU:

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H

DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH

相关文档
最新文档