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

📄 1302-12232f.asm

📁 从1302中读出的数据放在 52H(小时)51H(分钟)50H(秒) 显示缓冲单元 72H-73H(45H-44H)小时,75H-76H(43H-42H)分钟,78H-79H(41H-40H)秒
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;****************************************************************;
;                 1302时钟程序( 用12232F显示)                    ;
;                                                                ;
;              AT89C52/12M晶振/编写者hewende/2008.10.30              ;
;                                                                ;
;****************************************************************;
;
; 从1302中读出的数据放在 52H(小时)51H(分钟)50H(秒)
; 显示缓冲单元 72H-73H(45H-44H)小时,75H-76H(43H-42H)分钟,78H-79H(41H-40H)秒
; 定时器T1为调整时候闪烁用。
; 显示式样第一行为:    时间: 15:38:12
; 显示式样第二行为:    中文字符共7个
;*****************定义*********************;
;
                               SCLK  EQU P3.2     ; 1302时钟口,1302第7脚
                                IO   EQU P3.3  ;  数据口,1302第6脚
                                RST  EQU P3.4   ;  使能EQU302第5脚
                             KEYSW0  EQU  P1.0     ;  调时按键
                          KEYSW1  EQU  P1.1  ;  加1按键
                        KEYSW2  EQU  P1.2  ;  减1按键  
							 KEYSW3  EEQU P1.3  ;定时闹钟设定
                                hour DATAEQUH      ;  1302读出时
                           mintue DATA 51H      ;  1302读出分
                              second DATA 50H      ;  1302读出秒
                         DS1302_ADDR DATA 32H      ;  1302需操作的地址数据存放
                         DS1302_DATA DATA 31H      ;  1302读出或需写入的数据存放
                         INTCON      DATA 30H      ;  闪烁中断计时用
                         CON_DATA    DATA 06H      ;  闪烁时间=65*6=0.39秒
;************LCD定义***********************;
                            LAMPBLAK EQU    P2.4          ;背光灯控制,=0时开,=1时关.
                            CS	     EQU	P2.5          ;液晶使能,=1操作,=0禁止.
                            SID      EQU    P2.6          ;液晶串行数据输入口
                            CLK	     EQU	P2.7          ;液晶EQU作时钟口
;
;*********************程序入口*********************;
;
                                 ORG 0000H
                                  LJMP  START
                               ORG 0003H
                                  RETI
                                  ORG 000BH
                              RETI
                                  ORG 0013H
                              RETI
                                  ORG 001BH
                               LJMP INTT1
                                  ORG 0023H
                              RETI
                                  ORG 002BH
                              RETI
;
;*****************;主程序;*********************;
;
                START:
                          CLR  CS                ;液晶操作禁止
	                  mov   SP, #80H         ;堆栈在80H上
                          MOV  70H,#0AH          ;放北京时间后的“:”代码字
                          MOV  71H,#0FH          ;空
                          MOV  74H,#0AH          ; ": "
                          MOV  77H,#0AH          ; ": "
                          MOV TMOD,#10H  ;计数器1,方式1
                          MOV TL1,#00H
                          MOV TH1,#00H
                          MOV INTCON,#CON_DATA
                          CLR  00H        ;清闪烁标志
                          CLR  01H        ;清闪烁标志
                          SETB EA
                          MOV DS1302_ADDR,#8EH
                          MOV DS1302_DATA,#00H ;允许写1302 ,#80,禁止
                          LCALL WRITE
                          MOV  DS1302_ADDR,#90H
                          MOV  DS1302_DATA,#0A6H;1302充电充电电流1.1MA;#A5:2.2MA,#A7:0.6MA
                          LCALL  WRITE
                          MOV    DS1302_ADDR,#80H
                          MOV    DS1302_DATA,#00H ;1302晶振开始振荡;#80H,禁止
                          LCALL  WRITE
;
       	                  LCALL SETUP            ;LCD初始化
                          LCALL LOGON            ;开机显示画面
                          LCALL TIME             ;上行显示"时间: 00:00:00"
;以下主程序
              MAIN1:      MOV    DS1302_ADDR,#85H  ;读出小时
                          LCALL   READ
                          MOV     hour,DS1302_DATA
                          MOV    DS1302_ADDR,#83H  ;读出分钟
                          LCALL   READ
                          MOV    mintue,DS1302_DATA
                          MOV    DS1302_ADDR,#81H  ;读出秒
                          LCALL  READ
                          MOV   second,DS1302_DATA
                          ;
                          MOV    R0,hour ;小时分离,送显示缓存
                          LCALL  DIVIDE
                          MOV    73H,R1   ;时个位
                          MOV    44H,R1
                          MOV    72H,R2   ;时十位
                          MOV    45H,R2
                          MOV    R0,mintue ;分钟分离,送显示缓存
                          LCALL  DIVIDE
                          MOV    76H,R1   ;时个位
                          MOV    42H,R1
                          MOV    75H,R2   ;时十位
                          MOV    43H,R2
                          MOV    R0,second  ;秒分离,送显示缓存
                          LCALL  DIVIDE
                          MOV    79H,R1  ;秒个位
                          MOV    40H,R1
                          MOV    78H,R2  ;秒十位
                          MOV    41H,R2
                          LCALL TIMEUP    ;显示涮新
;
                          JNB KEYSW0,SETG  ;调整时间控制键
                          LJMP MAIN1
;
;******************公历设置程序*********************;
;
                  SETG :   SETB TR1
                           SETB ET1
                           MOV  78H,#00H         ;调时时秒位为0
                           MOV  79H,#00H         ;调时时秒位为0
                           MOV DS1302_ADDR,#8EH
                           MOV DS1302_DATA,#00H  ;允许写1302
                           LCALL WRITE
                           MOV DS1302_ADDR,#80H
                           MOV DS1302_DATA,#80H  ;1302停止振荡
                           LCALL WRITE
;
                SETG8:     LCALL DELAY1
                           JNB KEYSW0,SETG8
                 SETG9:
                           JNB KEYSW0,SETG10
                           JNB KEYSW1,GADDHOUR
                           AJMP SETG9
            GADDHOUR:      LCALL DELAY1
                           JNB KEYSW1,GADDHOUR
                           MOV R7,52H  ;小时加一
                           LCALL ADD1
                           MOV 52H,A
                           CJNE A,#24H,GADDHOUR11
              GADDHOUR11:  JC GADDHOUR1
                           MOV 52H,#00H
              GADDHOUR1:  MOV DS1302_ADDR,#84H ;小时值送人1302
                           MOV DS1302_DATA,52H
                           LCALL WRITE
                           MOV R0,52H
                           LCALL DIVIDE ;小时值分离送显示缓存
                           MOV 73H,R1
                           MOV 44H,R1
                           MOV 72H,R2
                           MOV 45H,R2
                 WAITT5:
                           JNB KEYSW1,WAITT5
                           AJMP SETG9

               SETG10:     SETB 01H   ;调分时候闪标志
              GWAIT10:     LCALL DELAY1
                           JNB KEYSW0,GWAIT10
               SETG11:
                           JNB KEYSW0,SETGOUT
                           JNB KEYSW1,GADDMINTUE
                           AJMP SETG11
             GADDMINTUE:   LCALL DELAY1
                           JNB KEYSW1,GADDMINTUE
                           MOV R7,51H    ;分钟加一
                           LCALL ADD1
                           MOV 51H,A
                           CJNE A,#60H,GADDMINTUE11
           GADDMINTUE11:   JC GADDMINTUE1
                           MOV 51H,#00H
         GADDMINTUE1:      MOV DS1302_ADDR,#82H ;分钟值送人1302
                           MOV DS1302_DATA,51H
                           LCALL WRITE
                           MOV R0,51H
                           LCALL DIVIDE ;分钟值分离送显示缓存
                           MOV 76H,R1
                           MOV 42H,R1
                           MOV 75H,R2
                           MOV 43H,R2
                 WAITT6:
                           JNB KEYSW1,WAITT6
                           AJMP SETG11
              SETGOUT:     LCALL DELAY1
                           JNB KEYSW0,SETGOUT
                           MOV    DS1302_ADDR,#80H
                           MOV    DS1302_DATA,#00H ;1302晶振开始振荡
                           LCALL  WRITE
                           MOV    DS1302_ADDR,#8EH
                           MOV    DS1302_DATA,#80H ;禁止写入1302
                           LCALL  WRITE
                           CLR 00H
                           CLR 01H
                           CLR ET1  ;关闪中断
                           CLR TR1
                           LJMP MAIN1
;
;****************闪动调时程序*********************;
;
                 INTT1:    PUSH ACC
                           PUSH PSW
                           DJNZ INTCON,GFLASHOUT
                           MOV  INTCON,#CON_DATA
                 GFLASH:   CPL 00H
                           JB 00H,GFLASH5
                           MOV 72H,45H           ;全显示
                           MOV 73H,44H
                           MOV 75H,43H
                           MOV 76H,42H
                           MOV 78H,41H
                           MOV 79H,40H
             GFLASHOUT:    LCALL TIMEUP
                           POP PSW
                           POP ACC
                           RETI
;
                GFLASH5:   JB 01H,GFLASH6 ;调小时闪
                           MOV 72H,#0FH
                           MOV 73H,#0FH
                           AJMP GFLASHOUT
             GFLASH6:      MOV 75H,#0FH  ;调分钟闪
                           MOV 76H,#0FH
                           AJMP GFLASHOUT
;
;*******************加一程序***************;
;
                  ADD1:    MOV A,R7
                           ADD A,#01H
                           DA A
                           RET
;
;*****************分离程序**********************;
;
                 DIVIDE:   MOV A,R0
                           ANL A,#0FH
                           MOV R1,A
                           MOV A,R0
                           SWAP A
                           ANL A,#0FH
                           MOV R2,A
                           RET
;
;****************写1302程序****************;
;
                WRITE:     CLR SCLK
                           NOP
                           SETB RST
                           NOP
                           MOV A,DS1302_ADDR
                           MOV R4,#8
               WRITE1:     RRC A     ;送地址给1302
                           NOP
                           NOP
                           CLR SCLK
                           NOP
                           NOP
                           NOP
                           MOV IO,C
                           NOP
                           NOP
                           NOP
                           SETB SCLK
                           NOP
                           NOP
                           DJNZ R4,WRITE1

⌨️ 快捷键说明

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