DE2单片机c语言交通信号灯,DS1302怎样用C52单片机控制,用C语言写的

先给个汇编的你看看

;8位数码管显示

8e530af0fcc3960ba420e2b09475f592.gif0 为段码口、P2 为位码口

;时钟芯片:DS1302

;接线方法:

;八位数码管用两条8pin排线分别连p0,p2口

;24c02 用一条2pin线连接P3.6, P3.7

;喇叭用一条1pin线连接P3.3

;端口按键JP37用一条4PIN线连接P1.4,1.5,1.6,1.7

;DS1302的JP83用一条4PIN线连接P1.0,1.1,1.2,1.3

;************** 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  0080H

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值