首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
LED数码管汇编程序
来源:本站整理  作者:佚名  2011-08-04 10:14:41



LED数码管汇编程序

DISPBUF EQU 50H   ;50H,51H,52H,53H是显示缓冲区
LED1  EQU P2.0    ;第一位数码管的位控制
LED2  EQU P2.1    ;第二位数码管的位控制
LED3  EQU P2.2    ;第三位数码管的位控制
LED4  EQU P2.3    ;第四位数码管的位控制
LED5  EQU P2.4
LED6  EQU P2.5
LED7  EQU P2.6
LED8  EQU P2.7
;==============================================================
    org 0000h
    LJMP MAIN
    ORG 0003H
    RETI
    ORG 000BH
    RETI
    ORG 0013H
    RETI
    ORG 001BH
    RETI
    ORG 0023H
    RETI
MAIN:
    MOV    R0,#50H
    MOV    65H, #2
    MOV    64H,  #3
    MOV    63H,  #5
    MOV    62H,  #9
    MOV    61H,  #5
    MOV    60H,  #9
    MOV    59H,  #1
    MOV    58H,  #2

    ACALL    OUT
LOOP1:ACALL DISP          ;调用显示程序
      
      JNB   P3.2,K1
      JNB   P3.3,K2
      
      ACALL  TIME
      AJMP  LOOP1
K1:   LJMP   CLEAR
K2:   LJMP   PAUSE
TIME:
      MOV    R0,#59H     ;指向毫秒计时单元
      ACALL   ADD1        ;调用加1程序(加1毫秒操作)
      MOV   A,R3          ;毫秒数据放入A(R3为2位十进制数组合)
      CLR    C              ;清进位标志
      CJNE     A,#60H,ADDS
ADDS:  JC   OUT            ;小于60毫秒时中断退出
      ACALL    CLR0        ;大于或等于60毫秒时对秒计时单元清0
      MOV   R0,#61H        ;指向秒计时单元
      ACALL   ADD1         ;调用加1程序(加1秒操作)
      MOV   A,  R3         ;秒数据放入A(R3为2位十进制数组合)
      CLR   C              ;清进位标志
      CJNE     A,  #60H,ADDM
ADDM:  JC   OUT             ;小于60秒时中断退出
     ACALL    CLR0         ;大于或等于60秒时对秒计时单元清0
      MOV    R0,#63H         ;指向分计时单元
      ACALL   ADD1          ;分计时单元加1分钟
      MOV    A,R3           ;分数据放入A
      CLR   C               ;清进位标志
      CJNE    A,#60H,ADDH
ADDH:  JC   OUT              ;小于60分时中断退出
      ACALL    CLR0          ;大于或等于60分时分计时单元清0
      MOV    R0,#65H         ;指向小时计时单元
      ACALL    ADD1          ;小时计时单元加1小时
      MOV    A,R3             ;时数据放入A
      CLR   C                 ;清进位标志
      CJNE    A,#24H,HOUR
HOUR:  JC   OUT             ;小于24小时中断退出
       ACALL    CLR0          ;大于或等于24小时计时单元清零
OUT:
    MOV   DISPBUF,   65H
    MOV   DISPBUF+1, 64H
    MOV   DISPBUF+2, 63H
    MOV   DISPBUF+3, 62H
    MOV   DISPBUF+4,61H
    MOV   DISPBUF+5, 60H
    MOV    DISPBUF+6,59H
    MOV    DISPBUF+7,58H

    RETI
;======================================================================
           ;清零程序
;======================================================================
CLR0:
    CLR   A            ;清累加器
    MOV    @R0,A       ;清当前地址单元
    DEC    R0          ;指向前一地址
    MOV    @R0,A       ;前一地址单元清零
    RET

;======================================================================
                     ;加1子程序
;======================================================================
ADD1:
   MOV    A,@R0        ;取当前计时单元数据到A
   DEC   R0            ;指向前一地址
   SWAP     A          ;A中数据高四位与低四位交换
   ORL    A,@R0        ;前一地址中数据放入A中低四位
   ADD   A,#01H        ;A加1操作
   DA    A             ;十进制调整
   MOV    R3,A         ;移入R3寄存器
   ANL    A,#0FH       ;高四位变0
   MOV    @R0,A        ;放回前一地址单元
   MOV    A,R3         ;取回R3中暂存数据
   INC   R0            ;指向当前地址单元
   SWAP    A           ;A中数据高四位与低四位交换
   ANL    A,#0FH       ;高四位变0
   MOV    @R0,A        ;数据放入当前地址单元中
   RET
;======================================================================
             ;显示程序
;======================================================================
DISP:
    ;-----------------------------------------------------------
    MOV     A,DISPBUF   ;取第一个待显示数
    MOV     DPTR,#DISPTAB
    MOVC    A,@A+DPTR   ;取字形码
    CPL A ;
    MOV     P0,A        ;将字形码送P0位(段口)
    CLR     LED1       ;开第一位显示器位口
    LCALL   DELAY       ;延时5毫秒
    SETB    LED1       ;关闭第一位显示器(开始准备第二位的数据)
    ;-----------------------------------------------------------
    MOV     A,DISPBUF+1 ;取显示缓冲区的第二位
    MOV     DPTR,#DISPTAB
    MOVC    A,@A+DPTR
    CPL A ;
    MOV     P0,A        ;将第二个字形码送P0口
    CLR     LED2      ;开第二位显示器
    LCALL   DELAY       ;延时5毫秒
    SETB    LED2      ;关第二位显示
    ;-----------------------------------------------------------
    MOV     A,DISPBUF+2   ;取显示缓冲区的第三位
    MOV     DPTR,#DISPTAB
    MOVC    A,@A+DPTR   ;取字形码
    CPL A ;
    MOV     P0,A        ;将第三个字形码送P0位(段口)
    CLR     LED3       ;开第三位显示器位口
    LCALL   DELAY       ;延时5毫秒
    SETB    LED3       ;关闭第三位显示器
    ;-----------------------------------------------------------
    MOV     A,DISPBUF+3   ;取显示缓冲区的第四位
    MOV     DPTR,#DISPTAB
    MOVC    A,@A+DPTR   ;取字形码
    CPL A ;
    MOV     P0,A        ;将第四个字形码送P0位(段口)
    CLR     LED4       ;开第四位显示器位口
    LCALL   DELAY       ;延时5毫秒
    SETB    LED4       ;关闭第四位显示器
    ;-----------------------------------------------------------
    MOV     A,DISPBUF+4    ;取显示缓冲区的第五位
    MOV     DPTR ,#DISPTAB
    MOVC    A,@A+DPTR     ;取字形码
    CPL  A
    MOV    P0,A           ;将第五个字形码送P0位(段口)
    CLR    LED5           ;开第五位显示器位口
    LCALL   DELAY         ;延时5毫秒
    SETB    LED5          ;关闭第五位显示器

    ;-----------------------------------------------------------
    MOV     A,DISPBUF+5    ;取显示缓冲区的第六位
    MOV     DPTR  ,#DISPTAB
    MOVC    A,@A+DPTR      ;取字形码
    CPL    A
    MOV    P0,A            ;将第六个字形码送P0位(段口)
    CLR    LED6            ;开第六位显示器位口
    LCALL   DELAY          ;延时5毫秒
    SETB    LED6           ;关闭第六位显示器

    ;-----------------------------------------------------------
    MOV    A,DISPBUF+6     ;取显示缓冲区的第七位
    MOV    DPTR   ,#DISPTAB
    MOVC   A,@A+DPTR       ;取字形码
    CPL    A
    MOV     P0,A           ;将第七个字形码送P0位(段口)
    CLR     LED7           ;开第七位显示器位口
    LCALL      DELAY       ;延时5毫秒
    SETB     LED7          ;关闭第七位显示器

    ;-----------------------------------------------------------

    MOV    A,DISPBUF+7    ;取显示缓冲区的第八位
    MOV     DPTR  ,#DISPTAB
    MOVC    A,@A+DPTR     ;取字形码
    CPL     A
    MOV    P0,A           ;将第八个字形码送P0位(段口)
    CLR     LED8          ;开第八位显示器位口
    LCALL     DELAY       ;延时5毫秒
    SETB     LED8         ;关闭第八位显示器

    ;-----------------------------------------------------------
    RET
PAUSE:                    
   ACALL DISP
   JNB    P3.2,K3
   AJMP PAUSE
  K3:    acall CLEAR
CLEAR:                     
         MOV   58H, #0
         MOV   59H, #0
         MOV   60H, #0
         MOV   61H, #0
         MOV   62H, #0
         MOV   63H, #0
         MOV   64H, #0
         MOV   65H, #0
         LJMP LOOP1
         RETI
 
      
        
     
;======================================================================
                ;延时程序
;======================================================================
DELAY:
    MOV     R6,#20H  ;延时约5mS
D1: MOV     R7,#10H
D2: DJNZ    R7,D2
    DJNZ    R6,D1
    RET
;======================================================================
DISPTAB:    DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0ffh


关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:50,289.06000 毫秒