51测试网 单片机教程XL2000开发板 单片机学习 自制编程器 单片机资料 软件下载 电子技术产品介绍如何购买 进入论坛

        点击察看说明书(64页彩色PDF文档)

        1.1 系统简介

        4.3 ISP引脚连接

        端口按键判断

        红外线遥控555硬件振荡器

        1.2 模块接口定义

        5.1 仿真概述

        矩阵按键识别技术

        汉字显示屏PS2键盘实验
        2.1 软件安装  5.2 KEIL软件指南

        74LS14反向器

        1602液晶显示屏SD 卡实验
        2.2 软件界面介绍 

        51引脚说明

        74LS138译码器

        8155试验

        485通信实验 
        2.3 软件操作

        八路跑马灯

        74LS164串入并出

        24C02储存

        DS1302实时时钟
        3.1 USB驱动安装

        继电器控制

        74LS165并入串出步进电机产生hex文件
        3.2  特别 usb安装 

        8路拨动开关

        dac0832应用

        93c46 演示

        常见问题解答
        4.1 ISP 介绍 

        数码管静态扫描 

        模拟/数字转换器

        串行双向通信系统配置指南
        4.2  下载头之插头定义

        数码管动态扫描

        小喇叭警报器18B20温度显示购买方式

                                          实验24 DS1302实时时钟实验

        DS1302的结构及工作原理

            DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。

        2.1 引脚功能及结构

            DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302Vcc1Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc2DS1302供电。当Vcc2小于Vcc1时,DS1302Vcc1供电。X1X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK始终是输入端。

        相关原理:

        程序运行照片:

        接线方法:

        1按键接到P1口下半部分。用一条4PIN数据排线,把按键部份的JP37,接到CPU部份的P1JP44p1.4—p1.7.

        28位数码管的数据线。将数码管部份的数据口 JP5接到CPU部份的P0JP51.

        38位数码管的显示位线。将数码管部份的显示位口 JP8接到CPU部份的P2JP52.

        411PIN线把喇叭部分的JP16接单片机P3.3

        511PIN线把继电器部分的JP18接单片机P3.5

        6用一条4PIN数据排线,把DS1302部份的JP83,接到CPU部份的P1JP44p1.0—p1.3

        汇编语言参考程序:

         ;8位数码管显示
        ;P0 为段码口、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

         

        精致外观

        精致外观

        精致外观

        精致外观

        精致外观

        精致包装

        精致包装

        精致包装

        配套附件

        配套附件

        使用手册

        使用手册

        使用手册

        配套附件

        配套附件

        配套附件

        配套附件

        配套附件

        配套附件

        配套附件

        精致细节

        精致细节

        精致细节

        精致细节

        配套光盘