打印

我想让数码管显示到999该如实现???

[复制链接]
4169|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
adofe|  楼主 | 2010-5-4 18:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用了三位数码管显示0-999,但目前只能显示到0-255。
因为temp最大值为FFH,如果要显示大于255我要如何改???
程序如下:


a_bit equ 20h ;数码管个位数存放内存位置
   b_bit equ 21h ;数码管十位数存放内存位置
   temp equ 22h ;计数器数值存放内存位置
   bai equ 30h
         ORG 00H
star:    mov temp,#0 ;初始化计数器,从0开始
stlop:   acall display;调用显示子程序
            inc temp;对计数器加1
            mov a,temp
            cjne a,#255,next ;判断计数器是否满100?
            mov temp,#0;满100就清零重新开始
     INC 31H
     MOV R2,31H
     CJNE R2,#10,NEXT;100*10=1000
     MOV 31H,#00
next:    ljmp stlop;不满就循环执行
             ;显示子程序
      
display: mov a,temp ;将temp中的十六进制数转换成10进制
             mov b,#100 ;10进制/100=10进制
             div ab;百位在ACC中
            
             mov bai,a;先将百位送入
      MOV A,B;将十位和个位送入ACC中
             MOV B,#10
              DIV AB
             mov b_bit,a ;十位在a
             mov a_bit,b ;个位在b
             mov dptr,#numtab ;指定查表启始地址
             mov r0,#25
dpl1:    mov r1,#25 ;
dplop:   mov a,a_bit ;取个位数
             MOVC A,@A+DPTR ;查个位数的7段代码
             mov p1,a ;送出个位的7段代码
             clr p3.5 ;开个位显示
             acall d1ms ;显示162微秒
             setb p3.5;关闭个位显示,防止鬼影
             mov a,b_bit ;取十位数
             MOVC A,@A+DPTR ;查十位数的7段代码
             mov p1,a ;送出十位的7段代码
             clr p3.6 ;开十位显示
             acall d1ms ;显示162微秒
             setb p3.6;关闭十位显示,防止鬼影
             MOV A,bai;取百位送入A中
      MOVC A,@A+DPTR
      MOV P1,A
      CLR P3.7;Show百位
      LCALL D1ms
      SETB P3.7
             djnz r1,dplop ;循环执行125次
             djnz r0,dpl1 ;循环执行150X25=1000次
             ret
            ;2+2X80=162微秒,延时按12MHZ计算
D1MS:     MOV R7,#80
            DJNZ R7,$
            RET
numtab: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H
        
end

相关帖子

沙发
strang| | 2010-5-4 19:23 | 只看该作者
汇编看着头大,
C很简单的。

使用特权

评论回复
板凳
xuyiyi| | 2010-5-4 20:41 | 只看该作者
将temp由单字节改为双字节,再改相应的单字节运算程序为双字节运算程序、单字节二进制转十进制程序为双字节二进制转十进制程序,即可。

使用特权

评论回复
地板
adofe|  楼主 | 2010-5-5 11:56 | 只看该作者
将temp由单字节改为双字节,再改相应的单字节运算程序为双字节运算程序、单字节二进制转十进制程序为双字节二进制转十进制程序,即可。
xuyiyi 发表于 2010-5-4 20:41



具体如何将temp由单字节改为双字节,我的程序又要如何修改呢???

使用特权

评论回复
5
5880527| | 2010-5-5 12:43 | 只看该作者
有那个子程序的,双字节,要转换的数字放R2R3,转换后的在R7345,好像过万需要另外处理
B_DA:        CLR         A
                MOV         R4,A
                MOV         R5,A
                MOV         R6,A
                MOV         R7,#10H
IBTL2:        MOV         A,R3
                RLC         A       
                MOV         R3,A
                MOV         A,R2
                RLC         A
                MOV         R2,A
                MOV         A,R6
                ADDC         A,R6
                DA                 A
                MOV         R6,A
                MOV         A,R5
                ADDC         A,R5
                DA                 A
                MOV         R5,A
                DJNZ         R7,IBTL2
                ANL         A,#0FH
                MOV         R4,A
                MOV         A,R5
                ANL         A,#0F0H
                SWAP         A
                MOV         R7,A
                MOV         A,R6
                ANL         A,#0F0H
                SWAP         A
                MOV         R5,A
                MOV         A,R6
                ANL         A,#0FH
                MOV         R6,A
                RET

使用特权

评论回复
6
一棵小草| | 2010-5-5 13:49 | 只看该作者
相信过程你应该明白了,这里只教你方法,你可以参考自己该。
temp1  equ 23h ;加多一个计数值,当temp=99时,temp1加1(temp要清零),当temp1=9时,temp,temp1都清零;temp1/10的商放在第三位显示就得了。

如果你对这个程序理解的话,应该能改了。
如果不理解,建议你认真看。

使用特权

评论回复
7
peigang| | 2010-5-5 16:54 | 只看该作者
就跟时钟差不多
考虑好进位就行
楼上

使用特权

评论回复
8
月下狂想曲| | 2010-5-5 22:13 | 只看该作者
你可以考虑是99.9嘛

使用特权

评论回复
9
JerryWu75| | 2010-5-6 09:59 | 只看该作者
将temp改为3个字节变量,t1(百位),t2(十位),t3(个位),逢十进一!

使用特权

评论回复
10
dengm| | 2010-5-7 11:08 | 只看该作者
用BCD
SUB_INI:
      MOV TEMP, #0
      MOV (TEMP+1), #0
     RET
SUB_INC_TEMP:
     MOV A, #1
     ADD A, TEMP
     DA  A
    MOV TEMP, A
    CLR A
    ADDC A, TEMP+1
    DA  A
    MOV TEMP+1, A
    RET

使用特权

评论回复
11
re张风| | 2010-5-7 12:42 | 只看该作者
你加了以后,再BCD校正一下子就行了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

511

帖子

3

粉丝