⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 万年历.a51

📁 采用单片机和时钟芯片DS1302制作的一个万年历,里面附有源程序以及PROTUS仿真图
💻 A51
字号:
;***********************************************
;电子万年历程序
;作者:张朋坤
;2007.4.2
;***********************************************
        ORG 0000H
        AJMP MAIN
        ORG 000BH         ;T0中断服务程序入口   
        LJMP DISPLAY
;***********************************************
;30H~3DH单元显示缓冲区,定义如下:
;30H 月十位 31H 月个位
;32H 日十位 33H 日个位
;34H 时十位 35H 时个位
;36H 分十位 37H 分个位
;38H 秒十位 39H 秒个位
;3AH 星期位 3BH 未用
;3CH 年十位 3DH 年个位
;************************************************ 
;编程思想:
;用T0产生一个定时中断,在中断服务程序中,显示14个LED;
;主程序中,读DS1302的数据。
;主程序中加了一点延时的原因:
;在Proteus中,不停的访问DS1302所占用CPU的时间太多,;加了延时后,访问减少,CPU的占有时间大大减少。
;****************************************************************
MAIN:   MOV TMOD,#02H     ;T0定时,工作方式2
        MOV TH0,#00H        ;T0计数初值 
        MOV TL0,#00H
        SETB EA 
        SETB ET0
        SETB TR0
        MOV R1,#30H
        MOV R6,#14
       
     L0:ACALL PR1302
        ACALL DELAY
       
        AJMP L0

 DELAY: MOV R3,#0
    L1: MOV R5,#0
        DJNZ R5,$
        DJNZ R3,L1
        RET
;**********************************************
;显示程序
;**********************************************
DISPLAY:PUSH ACC
        MOV DPTR,#TAB1
        MOV A,R6
        MOVC A,@A+DPTR
        MOV P2,A
        MOV DPTR,#TAB2
        MOV A,R6
        MOVC A,@A+DPTR
        MOV P3,A
        MOV A,@R1
        MOV DPTR,#TAB
        MOVC A,@A+DPTR
        MOV P0,A
        INC R1
        DJNZ R6,LOOP
        MOV R1,#30H
        MOV R6,#14
 LOOP:  POP ACC
        RETI         
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H
TAB1:
DB 00H,00H,00H,00H,00H,00H,00H,80H,40H,20H,10H,08H,04H,02H,01H
TAB2:
DB 00H,20H,10H,08H,04H,02H,01H,00H,00H,00H,00H,00H,00H,00H,00H 
;********************************************************
;处理DS1302子程序
;功能:1302得到的时间是以压缩的BCD码存在44~49H中,次程序把它们
;分解成单字节的BCD码,并存入显示缓冲区
;********************************************************    
  PR1302:ACALL GET1302
         MOV A,44H       ;S
         SWAP A
         ANL A,#0FH
         MOV 38H,A
         MOV A,44H
         ANL A,#0FH
         MOV 39H,A
         MOV A,45H       ;M
         SWAP A
         ANL A,#0FH
         MOV 36H,A
         MOV A,45H
         ANL A,#0FH
         MOV 37H,A
         MOV A,46H       ;H
         SWAP A
         ANL A,#0FH
         MOV 34H,A
         MOV A,46H
         ANL A,#0FH
         MOV 35H,A
         MOV A,47H       ;D
         SWAP A
         ANL A,#0FH
         MOV 32H,A
         MOV A,47H
         ANL A,#0FH
         MOV 33H,A
         MOV A,48H       ;M
         SWAP A
         ANL A,#0FH
         MOV 30H,A
         MOV A,48H
         ANL A,#0FH
         MOV 31H,A
         MOV A,49H       ;W
         ANL A,#0FH
         DEC A
         MOV 3AH,A
         MOV A,4AH       ;y
         SWAP A
         ANL A,#0FH
         MOV 3CH,A
         MOV A,4AH
         ANL A,#0FH
         MOV 3DH,A
         RET
          
;**************************************************
;读DS1302时钟子程序
;**************************************************
          RST    EQU P1.0
          SCLK   EQU P1.1
          IO     EQU P1.2  
 GET1302:      
           MOV    R0,#44H;
           MOV    R7,#7
           MOV    R2,#81H       ;秒地址
 G13021:   CLR    RST
           CLR    SCLK
           SETB   RST
           MOV    B,R2     ;秒 分 时 日 月 星期 年 地址
           LCALL  RTInputByte  
           LCALL  RTOutputByte
           MOV    @R0,A         ;秒
           INC    R0
           INC    R2
           INC    R2
           SETB   SCLK
           CLR    RST
           DJNZ   R7,G13021
           RET
 ;*********************************************************
 RTInputByte:  
           MOV    R4,#8
 Inbit1:   MOV    A,B
           RRC    A
           MOV    B,A
           MOV    IO, C         
           SETB   SCLK
           CLR    SCLK
           DJNZ   R4,Inbit1
           RET
 ;***************************************************
 RTOutputByte:
           MOV    R4,#8
 Outbit1:  MOV    C,IO
           RRC    A
           SETB   SCLK
           CLR    SCLK
           DJNZ   R4,Outbit1
           RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -