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

 

精致外观

精致外观

精致外观

精致外观

精致外观

精致包装

精致包装

精致包装

配套附件

配套附件

使用手册

使用手册

使用手册

配套附件

配套附件

配套附件

配套附件

配套附件

配套附件

配套附件

精致细节

精致细节

精致细节

精致细节

配套光盘