新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > ADC0832数字电压表数码管显示(示例程序)

ADC0832数字电压表数码管显示(示例程序)

作者: 时间:2016-11-10 来源:网络 收藏
;********************************************************************************

描述:

本文引用地址:https://www.eepw.com.cn/article/201611/317443.htm

ADC0832数字电压表数码管显示

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

**********************************************************************************
AD_CLKEQUP1.0
AD_DATEQUP1.1
AD_CSEQUP3.4
DISSTARTEQU30H;显示单元首地址
LED_DATAEQUP0;数码管数据定义
ORG0000H
JMPSTART

;--------------------------------------------------------
START:MOVSP,#60H
MOVA,#00H
MOV20H,A
MOVP0,#0FFH
MOVP2,#0FFH

START1:CALLAD_CONV
CALLAD_CHULI
CALLQUSHU
CALLADPLAY
JMPSTART1
;---------------------------------------------------------
AD_CONV:;ADC0832初始化
SETBAD_CS;一个转换周期开始
CLRAD_CLK
CLRAD_CS;CS置0,片选有效
SETBAD_DAT;DI置1,起始位
SETBAD_CLK;第一个脉冲
CLRAD_DAT;在负跳变之前加一个DI反转操作
CLRAD_CLK
SETBAD_DAT;DI置1,设为单通道
SETBAD_CLK;第二个脉冲
CLRAD_DAT;***
CLRAD_CLK;
CLRAD_DAT;DI置0,选择通道0
SETBAD_CLK;第三个脉冲
SETBAD_DAT;***
CLRAD_CLK
NOP
SETBAD_CLK;第四个脉冲
MOVR1,#08H;计数器初值,读取8位数据,
AD_READ:CLRAD_CLK;下降沿
MOVC,AD_DAT;读取DO端数据
RLCA;C移入A,高位在前
SETBAD_CLK;下一个脉冲
DJNZR1,AD_READ;没读完继续
SETBAD_CS
MOV20H,A;转换结果发给20H
RET
;------------------------------------------------------
AD_CHULI:
CLRC
MOVR5,#00H;十进制转换的低位寄存器
MOVR4,#00H;十进制转换的高位寄存器
MOVR3,#08H;十进制调整的次数
MOVA,20H
AD_CHULI1:
RLCA
MOVR2,A
MOVA,R5
ADDCA,R5
DAA
MOVR5,A
MOVA,R4
ADDCA,R4
MOVR4,A
MOVA,R2
DJNZR3,AD_CHULI1
MOVA,R5
ADDA,R5
DAA
MOVR5,A
MOVA,R4
ADDCA,R4
DAA
MOVR4,A
RET
;-------------------------------------------------
QUSHU:MOVA,R5
ANLA,#0FH
MOVDISSTART,A
MOVA,R5
ANLA,#0F0H
SWAPA
MOVDISSTART+1,A
MOVA,R4
ANLA,#0FH
MOVDISSTART+2,A
MOVA,R4
ANLA,#0F0H
MOVDISSTART+3,A
RET
;---------------------------------------------------
ADPLAY:PUSHPSW
CLRPSW.3
SETBPSW.4

MOVR0,#DISSTART;开始填充显示单元
MOVR2,#03H;共计填充3位
DISP1:MOVA,@R0;获得当前位地址
MOVDPTR,#TAB_NU;获得表头
MOVCA,@A+DPTR;获得编码数据
MOV@R0,A;保存编码数据
INCR0;指向下一个带转换数据
DJNZR2,DISP1;继续转换,直到完成

MOVR0,#DISSTART;获得显示单元首地址
MOVR1,#07FH;从第一个数码管开始
MOVR2,#03H;共显示3位数码管
DISP2:MOVLED_DATA,@R0;读取显示单元数据
MOVP2,R1;开始显示当前位
MOVA,R1;准备显示下一位
RRA;
MOVR1,A;下一位
INCR0;取下一个单元地址
JNBACC.5,DISP3;第三位数码管加小数点
JMPDISP4
DISP3:MOVA,@R0
ANLA,#7FH
MOV@R0,A
DISP4:LCALLDELAY5MS;延时2MS
DJNZR2,DISP2;重复显示下一个
POPPSW
RET;显示完成,返回
;---------------------------------------------------
DELAY5MS:
MOVR6,#10
DEL1:MOVR7,#100
DJNZR7,$
DJNZR6,DEL1
RET
;-------------------------------------------------
TAB_NU:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH



评论


技术专区

关闭