在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 4111|回复: 4

[求助] {急急急}将AD转化的十六进制改成十进制

[复制链接]
发表于 2014-2-17 21:34:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

要求:将A/D转换结果分别以十进制及二进制方式显示

二进制已经会了,求如何稍微加一段小程序就可以弄出十进制的

代码如下:

  OUTBIT   equ 0e101h  ; 位控制口

        CLK164   equ 0e102h  ; 段控制口(接164时钟位)

        DAT164   equ 0e102h  ; 段控制口(接164数据位)

        IN       equ 0e103h  ; 键盘读入口

        LEDBuf   equ   40h   ; 显示缓冲

        org 0000h



mov sp,#60h



mov dptr,#0e100h     ;8155初始化



mov a,#03h

        movx @dptr,a



mov 40h,#00h         ;显示缓冲器初始化



mov 41h,#08h



mov 42h,#00h



mov 43h,#09h

        mov 44h,#00h

        mov 45h,#00h

LOOP1:  MOV  R7,#40

VI:     lcall DISPLAY

        DJNZ    R7,VI



mov a,#00h



mov dptr,#0a000h     ;0809AD的通道开始转换吗?



movx @dptr,a



mov r7,#0fh

loop2:
djnz r7,loop2



movx a,@dptr



mov dptr,#0b000h  ;将结果送DAC0832



movx @dptr,a

        mov r0,#45h           ;拆字



lcall ptds



sjmp loop1

ptds:
mov r1,a



lcall ptds1



mov a,r1



swap a

ptds1:  anl a,#0fh



mov @r0,a



dec r0



ret

Delay:

        mov   r7, #0          ; 延时子程序

DelayLoop:

        djnz  r7, DelayLoop

        djnz  r6, DelayLoop

        ret

DISPLAY:setb 0d3h

        mov   r0, #LEDBuf

        mov   r1, #6          ; 共6个八段管

        mov   r2, #00100000b  ; 从左边开始显示

Loop:

        mov   dptr, #OUTBIT

        mov   a, #00h

        movx  @dptr, a        ; 关所有八段管

        mov   a, @r0

        mov dptr,#LEDmap

        movc a,@a+dptr

        mov   B, #8           ; 送164

DLP:

        rlc   a

        mov   r3, a

        mov   acc.0, c

        anl  a,#0fdh

        mov   dptr, #DAT164

        movx  @dptr, a

        mov   dptr, #CLK164

        orl a,#02h

        movx  @dptr, a

        anl a,#0fDh

        movx  @dptr, a

        mov   a, r3

        djnz  B, DLP

        mov   dptr, #OUTBIT

        mov   a, r2

        movx  @dptr, a        ; 显示一位八段管

        mov   r6, #1

        call  Delay

        mov   a, r2           ; 显示下一位

        rr    a

        mov   r2, a

        inc   r0

        djnz  r1, Loop

        mov   dptr, #OUTBIT

        mov   a, #0

        movx  @dptr, a

        clr 0d3h        ; 关所有八段管

        ret

LEDMAP:                       ; 八段管显示码

       db    3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h

       db    7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h




END

发表于 2014-6-21 21:25:07 | 显示全部楼层
用類似 X86,  BCD code "DAA" 指令的作法.
遇到 0xA,  0xA0, 0xA00 ... 作調整.

ex:
0x9 -> 0x10
0x99 -> 0xA0 -> 0x100

int BCD=0;
for(int i=0; i<ADC_Value; i++) {
    BCD++;
    if((BCD & 0x000F)==0xA) {
        BCD+=0x6;
    }
    if((BCD & 0x00F0)==0xA0) {
        BCD+=0x60;
    }
    後面省略...
}

}
发表于 2014-10-24 08:59:45 | 显示全部楼层
如果你用C编程直接就乘以,比如16位机子,乘以32768。不过如果你用汇编,还需要转化干什么呢
发表于 2014-10-24 09:00:53 | 显示全部楼层
如果是用7段管,有专门的程序可以给你调用,自己写也可以
发表于 2014-11-12 21:35:13 | 显示全部楼层
这个bcd码就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-6 03:43 , Processed in 0.046237 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表