历史上的今天
返回首页

历史上的今天

今天是:2025年01月08日(星期三)

正在发生

2018年01月08日 | 时钟芯片DS1302 8位数码管显示

2018-01-08 来源:eefocus

;8位数码管显示 
;P0 为段码口、P2 为位码口 
;时钟芯片:DS1302

;--------------------------------------
DS1302 端口位定义: 
IO_DATA →   P1.1    ; 数据传送总线
SCLK    →   P1.0    ; 时钟控制总线

RST     →   P1.2    ; 复位总线
;--------------------------------------- 
24C04 端口位定义: 
SDA     →   P3.6    ;24C01的串行数据线
SCLK    →   P3.7    ;24C01的串行时钟线
;---------------------------------------
K1      →   P1.4    ;独立键
K2      →   P1.5
K3      →   P1.6
K4      →   P1.7
;---------------------------------------
BEEP    →   P3.3   ;蜂鸣器
;---------------------------------------
使用8位数码管显示:
段码    →   P0 
位码    →   P2
;---------------------------------------


开机显示:
08-48-58   ;实时时间的显示,时、分、秒

K1:  →  切换显示内容键,每按一下可切换显示内容,最后返回实时时间的显示。

05-03-06   ;显示 年、月、日

;--------------------------------------------------------------------
K2:  →  时间与日期设定键,
K3:  →  选择键(位移键)
每按一下可切换设定内容,最后返回实际时间的显示。在设定过程中,被选中的设定位闪动。
选择顺序: 时 → 分 → 日 → 月 → 年 → 返回
K1:  →  UP 键
K2:  →  DOWN 键

;--------------------------------------------------------------------
K4:  →  报警时间设定键。
K3:  →  设定内容选择键,最后返回实际时间的显示。在设定过程中,被选中的设定位闪动。

1-07-30    ;07:30 为报警启动时间, 1 为允许报警,0 为禁止报警

K1:  →  UP 键
K2:  →  DOWN 键

;--------------------------------------------------------------------
K3:  →  止闹开关
在报警期间内,可以控制报警开与关,其它时间无效。

报警方式:
采用继电器吸合的方式来控制被控对象。
;************** DS1302 端口位定义 ************** 
          IO_DATA  BIT  P1.1     ; 数据传送总线 
          SCLK     BIT  P1.0     ; 时钟控制总线 
          RST      BIT  P1.2     ; 复位总线 

          K1     EQU  P1.4       ;独立键 
          K2     EQU  P1.5 
          K3     EQU  P1.6 
          K4     EQU  P1.7 

          BEEP   EQU  P3.3       ;蜂鸣器 
          RELAY  EQU  P3.5       ;继电器 

          T_CONU  EQU  22H       ;中断计数 
          TIME_L  EQU  23H       ;定时初值 
          TIME_H  EQU  24H 

          TIME_DATA   EQU  50H   ;显示时间单元首地址 
          DATE_DATA   EQU  60H   ;显示日期单元首地址 
          DS_DATA     EQU  58H   ;显示定时时间单元首地址 
;------------------------------------------------ 
          ORG 0000H 
          AJMP MAIN 

          ORG  000BH 
          AJMP  INT_T0 

          ORG  0100H 
;------------------------------------------------ 
MAIN: 
          MOV  TMOD,#01H        ;T0,方式1 
          MOV  TIME_L,#00H      ;50MS定时值 
          MOV  TIME_H,#4CH 
          MOV  T_CONU,#00H      ;中断次数 
          MOV  IE,#82H          ;EA=1,ET0=1 

          MOV  A,#00H 
          MOV  R0,#40H          ;从40H单元开始 
          MOV  R1,#40H          ;清64个单元 
M_CLEAR:  MOV  @R0,A 
          INC  R0 
          DJNZ  R1,M_CLEAR 

          MOV  7FH,#0AH         ;送熄灭符 
          SETB   BEEP 
          LCALL  TIME_DELAY     ;调显示延时 
          LCALL  PROSET         ;DS1302初始化 

MAIN1: 
          LCALL  GET_TIME       ;从DS1302读数据程序 
          LCALL  CHULI          ;实时时间数据处理 
          MOV  R0,#TIME_DATA    ;显示时、分、秒 
          LCALL  DISP 
          MOV  R0,#TIME_DATA 
          LCALL  TIME_DISPLAY 
          LCALL  SET_KEY        ;键功能程序 
          LCALL  COMP           ;实时时间与定时时间比较 
          JB  K1,MAIN1 
          CALL  BEEP_BL 
MAIN2: 
          LCALL  CHULI          ;日期数据处理 
          MOV  R0,#DATE_DATA 
          LCALL  DISP           ;显示年、月、日 
          MOV  R0,#DATE_DATA 
          LCALL  TIME_DISPLAY 
          JB  K1,MAIN2 
          CALL  BEEP_BL 
MAIN3: 
          LCALL  DS_CHULI        ;定时时间数据处理 
          MOV  R0,#DS_DATA 
          LCALL  DS_SP           ;显示定时时间 
          MOV  R0,#DS_DATA 
          LCALL  DS_DISPLAY 
          JB  K1,MAIN3 
          CALL  BEEP_BL 
          AJMP  MAIN1 
;-------------------------------------------- 
;中断服务子程序 
;300MS对闪动标记取反一次 
;-------------------------------------------- 
INT_T0: 
          PUSH  ACC 
          PUSH  PSW 
          MOV  TL0,TIME_L 
          MOV  TH0,TIME_H 
          INC  T_CONU 
          MOV  A,T_CONU 
          CJNE  A,#06H,INT_END 
          MOV  T_CONU,#00H 
          CPL  0AH 
INT_END: 
          POP  PSW 
          POP  ACC 
          RETI 
;-------------------------------------------- 
;DS1302 初始化子程序 
; (R0)=数据  (R1)=地址 
;-------------------------------------------- 
PROSET: 
           CLR   RST            ;DS1302复位 
           CLR   SCLK 
           NOP 
           NOP 
           SETB  RST 

          ;MOV  R1,#80H          ;写秒寄存器 
          ;MOV  R0,#00H          ;启动振荡器 
          ;LCALL WRITE 

          ;MOV  R1,#82H          ;写分寄存器 
          ;MOV  R0,#58H 
          ;LCALL WRITE 

          ;MOV  R1,#84H          ;写时寄存器 
          ;MOV  R0,#80H 
          ;LCALL WRITE 

          MOV  R1,#90H          ;写充电寄存器 
          MOV  R0,#0ABH 
          LCALL WRITE 
          RET 
;=============================================== 
;读时间、日期数据子程序 
;存放单元 40H - 46H 
;=============================================== 
GET_TIME: 
          MOV  R1,#81H          ;读秒 
          LCALL  READ 
          MOV 40H,R0 

          MOV  R1,#83H          ;读分 
          LCALL  READ 
          MOV 41H,R0 

          MOV  R1,#85H          ;读时 
          LCALL  READ 
          MOV 42H,R0 

          MOV  R1,#87H          ;读出日期 
          LCALL  READ 
          MOV 43H,R0 

          MOV  R1,#89H          ;读出月份 
          LCALL  READ 
          MOV 44H,R0 

          MOV  R1,#8BH          ;读出星期 
          LCALL  READ 
          MOV 46H,R0 

          MOV  R1,#8DH          ;读出年 
          LCALL  READ 
          MOV 45H,R0 

          RET 
;================================================ 
;写 DS1302 子程序 
;================================================ 
WRITE: 
          CLR  SCLK 
          NOP 
          NOP 
          SETB  RST 
          NOP 
          MOV  A,R1 
          MOV  R2,#08H 
WRI_01: 
          RRC  A                ;传输地址到DS1302 
          NOP 
          NOP 
          CLR  SCLK 
          NOP 
          NOP           
          MOV  IO_DATA,C 
          NOP 
          NOP          
          SETB  SCLK 
          NOP 
          NOP 
          DJNZ  R2,WRI_01 
          CLR  SCLK 
          NOP 
          NOP 
          MOV  A,R0 
          MOV  R2,#08H 
WRI_02: 
          RRC  A           ;传输数据到DS1302 
          NOP 
          CLR  SCLK 
          NOP 
          NOP 
          MOV  IO_DATA,C 
          NOP 
          NOP 
          SETB  SCLK 
          NOP 
          NOP 
          DJNZ  R2,WRI_02 
          CLR  SCLK 
          NOP 
          NOP 
          CLR  RST 
          NOP 
          NOP 
          RET 
;================================================= 
;读 DS1302 子程序 
;================================================= 
READ: 
          CLR   SCLK 
          NOP 
          NOP 
          SETB  RST 
          NOP 
          NOP 
          MOV  A,R1 
          MOV  R2,#08H 
READ_01: 
          RRC  A 
          NOP               ;先传输地址到DS1302 
          MOV  IO_DATA,C 
          NOP 
          NOP 
          SETB  SCLK 
          NOP 
          NOP 
          CLR  SCLK 
          NOP 
          NOP 
          DJNZ  R2,READ_01 
          NOP 
          NOP 
          SETB  IO_DATA 
          CLR  A 
          CLR  C 
          MOV  R2,#08H 
READ_02: 
          CLR  SCLK 
          NOP 
          NOP          
          MOV  C,IO_DATA 
          NOP 
          NOP          
          RRC  A                ;再从DS1302接收数据 
          NOP 
          NOP           
          SETB  SCLK 
          NOP 
          NOP           
          DJNZ  R2,READ_02 
          MOV  R0,A 
          CLR  RST 
          RET 
;============================================== 
;实时时间、日期数据处理子程序 
;============================================== 
 CHULI: 
          MOV A,40H               ;处理秒数据 
          ANL A,#0FH 
          MOV 50H,A 
          MOV 70H,A 
          MOV A,40H 
          ANL A,#11110000B 
          SWAP A 
          MOV 51H,A 
          MOV 71H,A 
;--------------------------------------------- 
          MOV A,41H               ;处理分数据 
          ANL A,#0FH 
          MOV 52H,A 
          MOV 72H,A 
          MOV A,41H 
          ANL A,#11110000B 
          SWAP A 
          MOV 53H,A 
          MOV 73H,A 
;--------------------------------------------- 
          MOV A,42H               ;处理时数据 
          ANL A,#0FH 
          MOV 54H,A 
          MOV 74H,A 
          MOV A,42H 
          ANL A,#11110000B 
          SWAP A 
          MOV 55H,A 
          MOV 75H,A 
;---------------------------------------------- 
          MOV A,43H               ;处理日数据 
          ANL A,#0FH 
          MOV 60H,A 
          MOV 76H,A 
          MOV A,43H 
          ANL A,#11110000B 
          SWAP A 
          MOV 61H,A 
          MOV 77H,A 
;--------------------------------------------- 
          MOV A,44H               ;处理月数据 
          ANL A,#0FH 
          MOV 62H,A 
          MOV 78H,A 
          MOV A,44H 
          ANL A,#11110000B 
          SWAP A 
          MOV 63H,A 
          MOV 79H,A 
;--------------------------------------------- 
          MOV A,45H               ;处理年数据 
          ANL A,#0FH 
          MOV 64H,A 
          MOV  7AH,A 
          MOV A,45H 
          ANL A,#11110000B 
          SWAP A 
          MOV 65H,A 
          MOV 7BH,A 
;---------------------------------------------- 
          MOV A,46H               ;处理周数据 
          MOV 66H,A 
          MOV 7CH,A 
          RET 
;============================================= 
;实时时间、日期查表取数子程序 
;============================================= 
DISP:     ;MOV  R0,#TIME_DATA 
          MOV R3,#06H 
DISP1:    MOV A,@R0 
          MOV DPTR,#TAB_NU 
          MOVC A,@A+DPTR 
          MOV @R0,A 
          INC R0 
          DJNZ R3,DISP1 
          RET 
;==================================================== 
;时间、日期显示子程序 
;==================================================== 
TIME_DISPLAY: 
          ;MOV  R0,#TIME_DATA      ;取得显示单元首地址 
          MOV  R1,#07FH          ;从第一个数码管开始 
          MOV  R2,#08H           ;共8个数码管 

DISLP:    MOV  P0,@R0            ;获得当前单元数据 
          MOV  A,R1 
          MOV  P2,A             ;数码显示 
          JB  ACC.5,DISLP1      ;第三位数码管显示 - 
          MOV  P0,#0f7H 
          JMP  DISLP3 
DISLP1:   JB  ACC.2,DISLP2      ;第六位数码管显示 - 
          MOV  P0,#0f7H 
          JMP  DISLP3 
DISLP2:   INC  R0 
DISLP3:   MOV  A,R1              ;为下一个数准备 
          RR  A                  ;下一个单元 
          MOV  R1,A              ;保存 
          LCALL  DELAY           ;为了保证数码管亮度,延时 
          DJNZ  R2,DISLP        ;重复显示,直到全部数据刷新过 
          RET                   ;返回 

DELAY: 
          MOV  R4,#0AH 
  L15:    MOV  R5,#64H 
  L16:    DJNZ  R5,L16 
          DJNZ  R4,L15 
          RET 
;****************************************************** 
SET_KEY: 
         SETB  K1             ;增加键 
         SETB  K2             ;减少键 
         SETB  K3             ;选择键 
         SETB  K4             ;定时设定功能键 
         NOP 
         JB  K4,KEY01 
         LCALL  BEEP_BL 
         JMP  DS_KEY          ;进入定时值设定子程序 
KEY01:   JB  K2,KEY02 
         LCALL  BEEP_BL 
         JMP  SET_TIME        ;进入时间设定子程序 
KEY02:   JB  K3,KEY03 
         LCALL  BEEP_BL 
         CPL  20H.0          ;止闹标记取反 
KEY03:   RET 

;----------------------------------------------------- 
DS_KEY: 
         CALL  DS_DELAY 
         JNB  K4,$           
         LCALL  DSSET 
         CALL  DS_DELAY 
         RET 
;============================================== 
;实时时间设定子程序 
;K1为加键、K2为减键、K3为选择键 
;============================================== 
SET_TIME: 
         MOV  R1,#8EH          ;写保护寄存器 
         MOV  R0,#00H          ;允许写入 
         LCALL WRITE 

         MOV  R1,#80H          ;写秒寄存器 
         MOV  R0,#80H          ;停止振荡器工作 
         LCALL WRITE 

         SETB  TR0 

K001:    CALL TIME_DELAY       ;校时 
         JNB K3,K001           ;K3为位移键 
K010: 
         CALL  CHULI 
         JNB  0AH,KH01 
         MOV  54H,7FH          ;送入熄灭符 
         MOV  55H,7FH 
         JMP  KH02 
 KH01:   MOV  54H,74H          ;送实时值 
         MOV  55H,75H          ;送实时值 
 KH02:   MOV  R0,#TIME_DATA 
         CALL  DISP 
         MOV  R0,#TIME_DATA 
         CALL  TIME_DISPLAY 
         JNB  K1,K011A 
         JNB  K2,K011B 
         JNB  K3,K002 
         JMP  K010 
K011A: 
         MOV  A,42H 
         ADD A,#01H 
         DA A 
         MOV 42H,A 
         XRL  A,#24H 
         JNZ K012A 
         MOV  42H,#00H 
K012A:   MOV  R1,#84H           ;写时寄存器 
         MOV  R0,42H 
         LCALL WRITE 
         CALL  TIME_DELAY 
         JMP  K010 

K011B: 
         MOV  A,42H 
         XRL  A,#00H 
         JZ  K012B 
         SETB  C              ;求补运算 
         CLR  A 
         ADDC  A,#99H         ;加99 
         SUBB  A,#01H         ;减去减数 
         ADD   A,42H          ;加被减数 
         DA A                 ;十进制调整 
         MOV 42H,A            ; 
         XRL  A,#00H 
         JNZ K012C 
K012B:   MOV  42H,#23H 
K012C:   MOV  R1,#84H           ;写时寄存器 
         MOV  R0,42H 
         LCALL WRITE 
         CALL  TIME_DELAY 
         JMP  K010 
;------------------------------------------------- 
K002:    CALL TIME_DELAY       ;校分 
         JNB K3,K002            ;K3为位移键 

K020:    CALL  CHULI 
         JNB  0AH,KM01 

         MOV  52H,7FH          ;送入熄灭符 
         MOV  53H,7FH 
         JMP  KM02 

 KM01:   MOV  52H,72H          ;送实时值 
         MOV  53H,73H          ;送实时值 
 KM02:   MOV  R0,#TIME_DATA 
         CALL  DISP 
         MOV  R0,#TIME_DATA 
         CALL  TIME_DISPLAY 

         JNB  K1,K021A 
         JNB  K2,K021B 
         JNB  K3,K003 
         JMP  K020 

K021A: 
         MOV  A,41H 
         ADD  A,#01H 
         DA A 
         MOV  41H,A 
         XRL  A,#60H 
         JNZ  K022A 
         MOV  41H,#00H 
K022A:   MOV  R1,#82H           ;写分寄存器 
         MOV  R0,41H 
         LCALL WRITE 
         CALL  TIME_DELAY 
         JMP  K020 
;--------------------------------------------------- 
K021B: 
         MOV  A,41H 
         XRL  A,#00H 
         JZ  K022B 
         SETB  C              ;求补运算 
         CLR  A 
         ADDC  A,#99H         ;加99 
         SUBB  A,#01H         ;减去减数 
         ADD   A,41H          ;加被减数 
         DA A                 ;十进制调整 
         MOV 41H,A            ; 
         XRL  A,#00H 
         JNZ K022C 
K022B:   MOV  41H,#59H 
K022C:   MOV  R1,#82H           ;写分寄存器 
         MOV  R0,41H 
         LCALL WRITE 
         CALL  TIME_DELAY 
         JMP  K020 
;--------------------------------------------------- 
K003:    CALL DATE_DELAY       ;校日 
         JNB K3,K003            ;K3为位移键 

K030:    CALL  CHULI 
         JNB  0AH,KR01 

         MOV  60H,7FH          ;送入熄灭符 
         MOV  61H,7FH 
         JMP  KR02 

 KR01:   MOV  60H,76H          ;送实时值 
         MOV  61H,77H          ;送实时值 
 KR02:   MOV  R0,#DATE_DATA 
         CALL  DISP 
         MOV  R0,#DATE_DATA 
         CALL  TIME_DISPLAY 
         JNB  K1,K031A 
         JNB  K2,K031B 
         JNB  K3,K004 
         JMP  K030 
K031A: 
         MOV  A,43H 
         ADD  A,#01H 
         DA A 
         MOV  43H,A 
         XRL  A,#32H 
         JNZ  K032A 
         MOV  43H,#00H 
K032A:    MOV  R1,#86H           ;写日寄存器 
         MOV  R0,43H 
         LCALL WRITE 
         CALL  DATE_DELAY 
         JMP  K030 

K031B: 
         MOV  A,43H 
         XRL  A,#00H 
         JZ  K032B 
         SETB  C                ;求补运算 
         CLR  A 
         ADDC  A,#99H           ;加99 
         SUBB  A,#01H           ;减去减数 
         ADD   A,43H            ;加被减数 
         DA A                   ;十进制调整 
         MOV 43H,A 
         XRL  A,#00H 
         JNZ K032C 
K032B:   MOV  43H,#31H 
K032C:   MOV  R1,#86H           ;写日寄存器 
         MOV  R0,43H 
         LCALL WRITE 
         CALL  DATE_DELAY 
         JMP  K030 
;------------------------------------------------ 
K004:    CALL DATE_DELAY        ;校月 
         JNB K3,K004            ;K3为位移键 

K040:    CALL  CHULI 
         JNB  0AH,KC01 

         MOV  62H,7FH           ;送入熄灭符 
         MOV  63H,7FH 
         JMP  KC02 

 KC01:   MOV  62H,78H           ;送实时值 
         MOV  63H,79H           ;送实时值 
 KC02:   MOV  R0,#DATE_DATA 
         CALL  DISP 
         MOV  R0,#DATE_DATA 
         CALL  TIME_DISPLAY 
         JNB  K1,K041A 
         JNB  K2,K041B 
         JNB  K3,K005 
         JMP  K040 
K041A: 
         MOV  A,44H 
         ADD  A,#01H 
         DA A 
         MOV  44H,A 
         XRL  A,#13H 
         JNZ  K042A 
         MOV  44H,#00H 
K042A:   MOV  R1,#88H           ;写月寄存器 
         MOV  R0,44H 
         LCALL WRITE 
         CALL  DATE_DELAY 
         JMP  K040 

K041B: 
         MOV  A,44H 
         XRL  A,#00H 
         JZ  K042B 
         SETB  C              ;求补运算 
         CLR  A 
         ADDC  A,#99H         ;加99 
         SUBB  A,#01H         ;减去减数 
         ADD   A,44H          ;加被减数 
         DA A                 ;十进制调整 
         MOV 44H,A            ; 
         XRL  A,#00H 
         JNZ  K042C 
K042B:   MOV  44H,#12H 
K042C:   MOV  R1,#88H        ;写月寄存器 
         MOV  R0,44H 
         LCALL WRITE 
         CALL  DATE_DELAY 
         JMP  K040 
;----------------------------------------------- 
K005:     CALL DATE_DELAY       ;校年 
         JNB K3,K005            ;K3为位移键 

K050:    CALL  CHULI 
         JNB  0AH,KY01 

         MOV  64H,7FH          ;送入熄灭符 
         MOV  65H,7FH 
         JMP  KY02 

 KY01:   MOV  64H,7AH          ;送实时值 
         MOV  65H,7BH          ;送实时值 
 KY02:   MOV  R0,#DATE_DATA 
         CALL  DISP 
         MOV  R0,#DATE_DATA 
         CALL  TIME_DISPLAY 
         JNB  K1,K051A 
         JNB  K2,K051B 
         JNB  K3,K008 
         JMP  K050 
K051A: 
         MOV  A,45H 
         ADD  A,#01H 
         DA A 
         MOV  45H,A 
         XRL  A,#9AH 
         JNZ  K052A 
         MOV  45H,#00H 
K052A:   MOV  R1,#8CH         ;写年寄存器 
         MOV  R0,45H 
         LCALL WRITE 
         CALL  DATE_DELAY 
         JMP   K050 

K051B: 
         MOV  A,45H 
         XRL  A,#00H 
         JZ  K052B 
         SETB  C              ;求补运算 
         CLR  A 
         ADDC  A,#99H         ;加99 
         SUBB  A,#01H         ;减去减数 
         ADD   A,45H          ;加被减数 
         DA A                 ;十进制调整 
         MOV  45H,A            ; 
         XRL  A,#00H 
         JNZ  K052C 
K052B:   MOV  45H,#99H 
K052C:   MOV  R1,#8CH         ;写年寄存器 
         MOV  R0,45H 
         LCALL WRITE 
         CALL  DATE_DELAY 
         JMP   K050 
;------------------------------------------------- 
K008:    JNB K3,K008 
         MOV  R1,#80H          ;写秒寄存器 
         MOV  R0,#00H          ;启动振荡器工作 
         LCALL WRITE 

         MOV  R1,#8EH          ;写保护寄存器 
         MOV  R0,#80H          ;禁止写入 
         LCALL WRITE 

         CALL  DATE_DELAY 
         CLR  0AH 
         CLR  TR0 
         CALL  BEEP_BL 
         RET 
;=================================================== 
;定时时间设定子程序 
;K1为加键、K2为减键、K3为选择键 
;=================================================== 
DSSET: 
         SETB  TR0 
DS01:    LCALL DS_DELAY        ;定时分设定 
         JNB  K4,$ 

DS010:   CALL  DS_CHULI 
         JNB  0AH,DS01_1 
         MOV  58H,7FH          ;送入熄灭符 
         MOV  59H,7FH 
         JMP  DS01_2 

DS01_1:  MOV  58H,70H         ;送实时值 
         MOV  59H,71H         ;送实时值 
DS01_2:  MOV  R0,#58H 
         LCALL  DS_SP 
         MOV  R0,#58H 
         LCALL  DS_DISPLAY 
         JNB  K1,DS01A        ;加键 
         JNB  K2,DS01B        ;减键 
         JNB  K3,DS02 
         JMP  DS010 

DS01A:                        ;加 
          MOV  A,48H 
          ADD A,#01H 
          DA A 
          MOV 48H,A 
          XRL  A,#60H 
          JNZ DS011 
          MOV  48H,#00H 
DS011:    LCALL DS_DELAY 
          JMP  DS010 

DS01B:    MOV  A,48H          ;判48H是否为0 
          XRL  A,#00H 
          JZ  DS012 
          SETB  C              ;减 
         CLR  A               ;求补运算 
         ADDC  A,#99H         ;加99 
         SUBB  A,#01H         ;减去减数 
         ADD   A,48H          ;加被减数 
         DA A                 ;十进制调整 
         MOV 48H,A            ; 
         XRL  A,#00H 
         JNZ  DS013 
DS012:   MOV  48H,#59H 
DS013:   CALL  DS_DELAY 
         JMP  DS010 
;---------------------------------------------- 
DS02:     LCALL DS_DELAY      ;定时时设定 
          JNB  K3,$ 
DS020: 
         CALL  DS_CHULI 
         JNB  0AH,DS02_1 

         MOV  5AH,7FH          ;送入熄灭符 
         MOV  5BH,7FH 
         JMP  DS02_2 

DS02_1:  MOV  5AH,72H          ;送实时值 
         MOV  5BH,73H          ;送实时值 
DS02_2:  MOV  R0,#58H 
         LCALL  DS_SP 
         MOV  R0,#58H 
         LCALL  DS_DISPLAY 
         JNB  K1,DS02A 
         JNB  K2,DS02B 
         JNB  K3,DS03 
         JMP  DS020 

DS02A:    MOV  A,49H          ;加 
          ADD  A,#01H 
          DA A 
          MOV  49H,A 
          XRL  A,#24H 
          JNZ  DS021 
          MOV  49H,#00H 
DS021:    LCALL DS_DELAY 
          JMP  DS020 

DS02B:    MOV  A,49H           ;判49H是否为0 
          XRL  A,#00H 
          JZ  DS022 
          SETB  C              ;减 
          CLR  A               ;求补运算 
          ADDC  A,#99H         ;加99 
          SUBB  A,#01H         ;减去减数 
          ADD   A,49H          ;加被减数 
          DA A                 ;十进制调整 
          MOV 49H,A            ; 
          XRL  A,#00H 
          JNZ  DS023 
DS022:    MOV  49H,#23H 
DS023:    CALL  DS_DELAY 
          JMP  DS020 
;------------------------------------------- 
DS03:     CALL DS_DELAY 
          JNB  K3,$ 

DS030:    CALL  DS_CHULI 
          JNB  0AH,DS03_1 
          MOV  5CH,7FH         ;送入熄灭符 
          JMP  DS03_2 
DS03_1:   MOV  5CH,74H         ;送实时值 
DS03_2:   MOV  R0,#58H          
          LCALL  DS_SP 
          MOV  R0,#58H 
          LCALL  DS_DISPLAY 
          JNB K3,DS04 
          JNB  K1,DS03A 
          JMP  DS030 

DS03A:    CPL  20H.1              ;报警标记取反 
          JNB  20H.1,DS031 
          MOV  4AH,#01H           ;报警标记=1,允许报警 
          AJMP  DS032 
DS031:    MOV  4AH,#00H           ;报警标记=0,禁止报警 
DS032:    LCALL DS_DELAY 
          JMP  DS030 
;-------------------------------------------- 
DS04:     CLR  TR0 
          CLR  0AH 
          CALL  BEEP_BL 
          LCALL DS_DELAY 
          RET 

;============================================= 
;定时时间数据处理子程序 
;============================================= 
DS_CHULI: 
          MOV A,48H               ;处理分数据 
          ANL A,#0FH 
          MOV 58H,A 
          MOV 70H,A 
          MOV A,48H 
          ANL A,#0F0H 
          SWAP A 
          MOV 59H,A 
          MOV 71H,A 

          MOV A,49H               ;处理时数据 
          ANL A,#0FH 
          MOV 5AH,A 
          MOV 72H,A 
          MOV A,49H 
          ANL A,#0F0H 
          SWAP A 
          MOV 5BH,A 
          MOV 73H,A 

          MOV A,4AH              ;处理定时标记 
          ANL A,#01H 
          MOV 5CH,A 
          MOV  74H,A 
          RET 
;================================================== 
;定时时间查表取数子程序 
;================================================== 
DS_SP:    ;MOV R0,#58H 
          MOV R3,#05H 
DS_SP1:   MOV A,@R0 
          MOV DPTR,#TAB_NU 
          MOVC A,@A+DPTR 
          MOV @R0,A 
          INC R0 
          DJNZ R3,DS_SP1 
          RET 
;================================================== 
;定时时间显示子程序 
;================================================== 
DS_DISPLAY: 
          ;MOV  R0,#58H          ;取得设定显示单元首地址 
          MOV  R1,#07FH          ;从第一个数码管开始 
          MOV  R2,#07H           ;共7个数码管 
DSPLAY:   MOV  P0,@R0            ;获得当前单元数据 
          MOV  A,R1 
          MOV  P2,A              ;数码显示 
          JB  ACC.5,DSLP1        ;第三位数码管显示“-” 
          MOV  P0,#0f7H 
          JMP  DSLP3 
DSLP1:    JB  ACC.2,DSLP2        ;第六位数码管显示“-” 
          MOV  P0,#0f7H 
          JMP  DSLP3 
DSLP2:    INC  R0 
DSLP3:    MOV  A,R1              ;为下一个数准备 
          RR  A                  ;下一个单元 
          MOV  R1,A              ;保存 
          LCALL  DELAY 
          DJNZ  R2,DSPLAY        ;重复显示,直到全部数据刷新过 
          RET                    ;返回 
;==================================================== 
;实时时间与设定时间比较子程序 

;20H.0 止闹标记,=0,允许,=1,禁止。 
;20H.1 报警标记,=1,允许,=0,禁止。 
;==================================================== 
COMP:     JNB  20H.1,COMP1 
          MOV  R0,#TIME_DATA 
          LCALL  TIME_DISPLAY 
          MOV  A,42H             ;实时时间与设定时间比较 
          CJNE  A,49H,COMP1      ;先比较时后比较分 
          MOV A,41H 
          CJNE  A,48H,COMP1 
          JB   20H.0,COMP2       ;20H.0=1,止闹开关,关 
          ;LCALL  BEEP_BL 
          CLR  RELAY             ;继电器吸合1分钟 
          JMP  COMP3 
COMP1:    CLR  20H.0 
COMP2:    SETB  RELAY 
COMP3:    RET 

;==================================================== 
;键延时子程序 
;多次调用显示程序做键延时 
;==================================================== 
DS_DELAY: 
          MOV  R6,#0AH         ;设定定时时间,键延时用 
 DS_KK: 
          LCALL  DS_CHULI 
          MOV  R0,#DS_DATA 
          LCALL  DS_SP 
          MOV  R0,#DS_DATA 
          LCALL  DS_DISPLAY 
          DJNZ  R6,DS_KK 
          RET 

TIME_DELAY:                    ;设定时间,键延时用 
          MOV  R6,#0AH 
TIME_KK: 
          LCALL  CHULI 
          MOV  R0,#TIME_DATA 
          LCALL  DISP 
          MOV  R0,#TIME_DATA 
          CALL  TIME_DISPLAY 
          DJNZ  R6,TIME_KK 
          RET 

DATE_DELAY:                    ;设定日期,键延时用 
          MOV  R6,#0AH 
DATE_KK: 
          LCALL  CHULI 
          MOV  R0,#DATE_DATA 
          LCALL  DISP 
          MOV  R0,#DATE_DATA 
          CALL  TIME_DISPLAY 
          DJNZ  R6,DATE_KK 
          RET 

;==================================================== 
;蜂鸣器响一声子程序 (适用交流蜂鸣器) 
;==================================================== 
BEEP_BL: 
         MOV  R6,#100 
 BL2:    CALL  DEX1 
         CPL  BEEP 
         DJNZ  R6,BL2 
         MOV  R5,#10 
         CALL  DELAY_BL 
         RET 
 DEX1:   MOV  R7,#180 
 DE2:    NOP 
         DJNZ  R7,DE2 
         RET 
DELAY_BL:                    ;(R5)*延时10MS 
         MOV  R6,#50 
 DL1:    MOV  R7,#100 
         DJNZ  R7,$ 
         DJNZ  R6,DL1 
         DJNZ  R5,DELAY_BL 
         RET 

;************************************************************* 
TAB_NU: DB 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h 
        DB 0FFH ;灭 
        DB    30h,25h,0a9h,26h,0a1h,0b1h  ;  A-F  《 共阳数码管 》 
;************************************************************* 
        END 


推荐阅读

史海拾趣

Cornell Dubilier公司的发展小趣事

在1936年至1962年期间,Cornell Dubilier公司在汉密尔顿工业园运营,专门制造电子零件和组件。然而,在这一时期,公司在生产过程中使用了含有多氯联苯(PCB)和其他有害物质的材料,并将其直接倾倒在现场土壤中。这一行为导致了严重的环境污染问题,使得该场地在后续被众多商业企业占据后,仍面临着环境保护的挑战。

DAYLIGHT公司的发展小趣事

随着全球环保意识的提高,DAYLIGHT公司也开始注重环保和可持续发展。公司投入大量资金用于研发环保型电子产品和技术,并积极参与环保公益活动。此外,DAYLIGHT还制定了严格的环保标准和生产流程,确保其产品的生产和使用过程中对环境的影响最小化。

E-Z-HOOK公司的发展小趣事

随着全球化进程的加速推进,E-Z-HOOK公司开始积极拓展国际市场。他们通过参加国际展会、建立海外销售网络等方式,将产品推向全球各地。同时,公司还积极寻求与国际知名企业的合作机会,共同开发新技术和新产品。这些努力使得E-Z-HOOK公司的品牌影响力逐渐扩大,在全球范围内树立了良好的声誉和形象。

Custom Electronics Inc公司的发展小趣事

在全球环保意识的日益增强下,CEI积极响应国家节能减排的号召,将环保理念融入企业的生产和经营中。公司引进先进的环保设备和技术,优化生产工艺流程,减少能源消耗和废弃物排放。同时,CEI还倡导绿色消费和循环经济理念,推动电子行业的绿色发展和可持续发展。

请注意,以上故事仅为基于一般情况和假设情境的概述,并非CEI公司的实际发展历程。如有需要,建议查阅相关文献资料或咨询行业专家以获取更准确的信息。

Herth+Buss Fahrzeugteile GmbH & Co KG公司的发展小趣事
在极端温度或湿度条件下,传感器的性能可能受到影响。
依必安派特(ebmpapst)公司的发展小趣事

在实现了从贸易到制造的转变后,依必安派特并没有停止前进的步伐。在2012年,依必安派特亚太研发中心正式落户上海,开始了本土化研发之路。这一举措使得依必安派特能够更好地了解中国市场的需求和趋势,为中国客户提供更加符合其需求的产品和解决方案。同时,本土化研发也加速了依必安派特在中国市场的创新步伐,推动了公司业务的快速发展。

问答坊 | AI 解惑

VC33 IDT71321 单片机

各位大侠好! 我用VC33做的数据采集板,它的处理流程是,DSP将采集到的数据滤波处理后,通过双口RAM IDT71321与单片机进行数据读写,我在单片机与双口RAM间加了LVC4245电平转换芯片,所出的问题是,我一上电,在单片机处的地址锁存芯片74HC373就会 ...…

查看全部问答>

STC12C5206PWM定时器问题

STC12C5206PWM单片机,也是兼容51不过速度快,以前的程序的程序烧到单片机后发现,定时器中断时间不对了????原理是50ms中断一次,计时20次为1S,现在好像快了很多????上电也没有把它设置成1T模式呀。 /********************************** ...…

查看全部问答>

郁闷,明天就要交双机接口通讯的课程设计现在还是搞不定。哪位兄弟能帮手做一个,一经采纳马上给分,下面有些老师给的参考资料,

对串行接口编程,就是对其内部的10个寄存器进行必要的读或写,编程时注意要指明是对那个寄存器进行读写。 在X86系统中,串行接口的端口地址为:COM1为3F8H~3FEH, COM2为2F8H~2FEH。所以各寄存器的读写端口地址如下表所示: DLAB    & ...…

查看全部问答>

不知哪家代理可以申请样片STM8S103K2U

                                 公司原本联系的代理商说他们没这个样片。。。…

查看全部问答>

低电平测量常用的连接器类型

静电计、皮安计和SMU[1]的测量工作中使用两种通用类型的连接器。图2-55所示的BNC连接器[2]是一种同轴连接器。它包括中心导体和外壳或屏蔽连接,而图2-56所示的三同轴连接器则包括中心导体、内屏蔽和外屏蔽。 BNC连接器的中心导体连到输入HI ...…

查看全部问答>

需要FPGA图像处理系统开发

我单位需要长时间兼职FPGA开发人员(地点不限,合作方式电话详谈),主要涉及FPGA嵌入式设计与FPGA图像处理相关工作,基于xilinx平台,有兴趣可回复邮件联系,请注明联系方式。fpga_jianzhi@126.com…

查看全部问答>

MSP430 单片机

今天看了一篇程序,其中一句话没有看懂....望各位不吝赐教!!! // Configure UART pins  P2SEL1 |= BIT0 + BIT1;  P2SEL0 &= ~(BIT0 + BIT1);  // Configure UART 0  UCA0CTL1 |= UCSWRST;    ...…

查看全部问答>

《VLMC激光雕刻机》二,项目资料

本帖最后由 kejoy 于 2015-7-6 12:38 编辑 1.BOM 清单 VLMC激光管切割机BOM清单型号规格名称数量采购属性备注6-2020欧标铝型材20x20 L=345工业铝型材2定制欧标,两端切割平整,详见加工图6-2020欧标铝型材20x20 L=350工业铝型材1定制欧标,两 ...…

查看全部问答>