新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ADC0832數字電壓表數碼管顯示(示例程序)

        ADC0832數字電壓表數碼管顯示(示例程序)

        作者: 時間:2016-11-10 來源:網絡 收藏
        ;********************************************************************************

        描述:

        本文引用地址:http://www.104case.com/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



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 沧州市| 惠东县| 武强县| 略阳县| 县级市| 隆回县| 镇康县| 吉林省| 大新县| 富顺县| 昂仁县| 贵德县| 汽车| 邯郸县| 法库县| 临安市| 高安市| 鞍山市| 西宁市| 临高县| 通河县| 临西县| 甘泉县| 潜江市| 平泉县| 陇川县| 霍邱县| 新营市| 鹰潭市| 米脂县| 额济纳旗| 浠水县| 喀喇| 邯郸市| 开化县| 绍兴县| 平舆县| 万源市| 阳东县| 平陆县| 新绛县|