您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>源码下载>汇编编程>

多位数码管计数器程序实现

大小:0.1 MB 人气: 2017-09-06 需要积分:0
多位数码管计数器程序实现多位数码管计数器程序实现

1、2位数码管计数器

A_BIT EQU 20H                  ;个位数存放处
B_BIT EQU 21H                  ;十位数存放处
TEMP EQU 22H                   ;计数器寄存处
STAR: MOV TEMP,#0              ;初始化计数器
STLOP: ACALL DISPLAY           ;
       INC TEMP
       MOV A,TEMP
       CJNE A,#100,NEXT        ;等于100重来
       MOV TEMP,#0
    NEXT: LJMP STLOP
;显示子程序
DISPLAY: MOV A,TEMP
         MOV B,#10
  DIV AB 
  MOV B_BIT,A
  MOV A_BIT,B
  MOV DPTR,#NUMTAB
  MOV R0,#4
DPL1:   MOV R1,#5
DPLOP:  MOV A,A_BIT
        MOVC A,@A+DPTR
 MOV P0,A
 CLR P2.7
 ACALL D1MS
 SETB P2.7
 MOV A,B_BIT
 MOVC A,@A+DPTR
 MOV P0,A
 CLR P2.6
 ACALL D1MS
 SETB P2.6
 DJNZ R1,DPLOP
 DJNZ R0,DPL1
 RET
D1MS:
   MOV R7,#50
   D1: MOV R6,#20
   D2: DJNZ R6,$
       DJNZ R7,D1
       RET
NUMTAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H   ;013456789字形码

END
 

2、4位数码管计数器经典例程

;本程序实现七段码动态显示功能
;///////////////////////////////////////////
   org 0000h
   ajmp main
   org 0030h
main:
   mov dptr,#tab    ;将表头位置送入DPTR           
   mov 30h,#00h                ;将30H个位显示缓冲单元清零          
   mov 31h,#00h                ;将31H十位显示缓冲单元清零          
   mov 32h,#00h                ;将32H百位显示缓冲单元清零          
   mov 33h,#00h                ;将33H千位显示缓冲单元清零          
loop:
   mov r4,#5     ;r4作为软件计数器
tt1:
   lcall display    ;调用显示程序 
   djnz r4,tt1    ;r4减一后不为零,返回tt1
   lcall update    ;调用刷新显示子程序
   ajmp loop     ;跳回loop,继续循环显示.
display: mov p2,#0ffh     ;将P2口置高电平                         
   mov r7,#100     ;软件计数器赋值                          
dd1:                                                                            
   mov a,30h                   ;将显示缓冲区30H中的值送入ACC           
   movc a,@a+dptr              ;查表取要显示的数并把查表的结果送入ACC  
   mov p0,a                    ;将要显示的数送入P0口                   
   clr p2.3                    ;开个位显示单元                         
   lcall delay100us            ;延时100US                              
   setb p2.3                   ;关个位显示单                           
                                                                             
   mov a,31h                   ;将显示缓冲区别31H中的值送入A           
   movc a,@a+dptr              ;查表取要显示的数并把查表的结果送入ACC  
   mov p0,a                    ;将要显示的数送入P0口                   
   clr p2.2                    ;开十位显示单元                         
   lcall delay100us            ;延时100US                              
   setb p2.2                   ;关十位显示单元                         
                                                                             
   mov a,32h                   ;将显示缓冲区32H中的值送入ACC           
   movc a,@a+dptr              ;查表取要显示的数并把查表的结果送入ACC  
   mov p0,a                    ;将要显示的数送入P0口                   
   clr p2.1                    ;开百位显示单元                         
   lcall delay100us            ;延时100US                              
   setb p2.1                   ;关百位显示单元                         
                                                                             
   mov a,33h                   ;将显示缓冲区33H中的值送入ACC           
   movc a,@a+dptr              ;查表取要显示的数并把查表的结果送入ACC  
   mov p0,a                    ;将要显示的数送入P0口                   
   clr p2.0                    ;开千位显示单元                         
   lcall delay100us            ;延时100US                              
   setb p2.0                   ;关千位显示单元                         
   djnz r7,dd1                 ;R7不等于0返回至DD1处                   
   ret                         ;R7等于0子程序返回                     
update:         ;刷新显示子程序
   inc 30h      ;个位显示缓冲单元加一  
   mov a,30h
   cjne a,#10,exit    ;还没加到十,退出
   mov 30h,#00h    ;加到十了,个位清零
   inc 31h      ;十位显示缓冲单元加一  
   mov a,31h                                               
   cjne a,#10,exit             ;还没加到十,退出            
   mov 31h,#00h                ;加到十了,十位清零          
   inc 32h      ;百位显示缓冲单元加一  
   mov a,32h                                               
   cjne a,#10,exit             ;还没加到十,退出            
   mov 32h,#00h                ;加到十了,百位清零          
   inc 33h      ;千位显示缓冲单元加一  
   mov a,33h                                                                           
   cjne a,#10,exit             ;还没加到十,退出            
   mov 33h,#00h                ;加到十了,千位清零          
exit:
   ret       ;刷新显示子程序返回
delay100us:
   mov r5,#50
   djnz r5,$
   ret
delay10ms:
   mov r6,#100
tt2:
   mov r5,#50
   djnz r5,$
   djnz r6,tt2
   ret
   
tab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h,86h,8eh
end

非常好我支持^.^

(0) 0%

不好我反对

(0) 0%

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!