时钟芯片DS1302 8位数码管显示
扫描二维码
随时随地手机看文章
;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_DATABITP1.1;数据传送总线
SCLKBITP1.0;时钟控制总线
RSTBITP1.2;复位总线
K1EQUP1.4;独立键
K2EQUP1.5
K3EQUP1.6
K4EQUP1.7
BEEPEQUP3.3;蜂鸣器
RELAYEQUP3.5;继电器
T_CONUEQU22H;中断计数
TIME_LEQU23H;定时初值
TIME_HEQU24H
TIME_DATAEQU50H;显示时间单元首地址
DATE_DATAEQU60H;显示日期单元首地址
DS_DATAEQU58H;显示定时时间单元首地址
;------------------------------------------------
ORG0000H
AJMPMAIN
ORG000BH
AJMPINT_T0
ORG0100H
;------------------------------------------------
MAIN:
MOVTMOD,#01H;T0,方式1
MOVTIME_L,#00H;50MS定时值
MOVTIME_H,#4CH
MOVT_CONU,#00H;中断次数
MOVIE,#82H;EA=1,ET0=1
MOVA,#00H
MOVR0,#40H;从40H单元开始
MOVR1,#40H;清64个单元
M_CLEAR:MOV@R0,A
INCR0
DJNZR1,M_CLEAR
MOV7FH,#0AH;送熄灭符
SETBBEEP
LCALLTIME_DELAY;调显示延时
LCALLPROSET;DS1302初始化
MAIN1:
LCALLGET_TIME;从DS1302读数据程序
LCALLCHULI;实时时间数据处理
MOVR0,#TIME_DATA;显示时、分、秒
LCALLDISP
MOVR0,#TIME_DATA
LCALLTIME_DISPLAY
LCALLSET_KEY;键功能程序
LCALLCOMP;实时时间与定时时间比较
JBK1,MAIN1
CALLBEEP_BL
MAIN2:
LCALLCHULI;日期数据处理
MOVR0,#DATE_DATA
LCALLDISP;显示年、月、日
MOVR0,#DATE_DATA
LCALLTIME_DISPLAY
JBK1,MAIN2
CALLBEEP_BL
MAIN3:
LCALLDS_CHULI;定时时间数据处理
MOVR0,#DS_DATA
LCALLDS_SP;显示定时时间
MOVR0,#DS_DATA
LCALLDS_DISPLAY
JBK1,MAIN3
CALLBEEP_BL
AJMPMAIN1
;--------------------------------------------
;中断服务子程序
;300MS对闪动标记取反一次
;--------------------------------------------
INT_T0:
PUSHACC
PUSHPSW
MOVTL0,TIME_L
MOVTH0,TIME_H
INCT_CONU
MOVA,T_CONU
CJNEA,#06H,INT_END
MOVT_CONU,#00H
CPL0AH
INT_END:
POPPSW
POPACC
RETI
;--------------------------------------------
;DS1302初始化子程序
;(R0)=数据(R1)=地址
;--------------------------------------------
PROSET:
CLRRST;DS1302复位
CLRSCLK
NOP
NOP
SETBRST
;MOVR1,#80H;写秒寄存器
;MOVR0,#00H;启动振荡器
;LCALLWRITE
;MOVR1,#82H;写分寄存器
;MOVR0,#58H
;LCALLWRITE
;MOVR1,#84H;写时寄存器
;MOVR0,#80H
;LCALLWRITE
MOVR1,#90H;写充电寄存器
MOVR0,#0ABH
LCALLWRITE
RET
;===============================================
;读时间、日期数据子程序
;存放单元40H-46H
;===============================================
GET_TIME:
MOVR1,#81H;读秒
LCALLREAD
MOV40H,R0
MOVR1,#83H;读分
LCALLREAD
MOV41H,R0
MOVR1,#85H;读时
LCALLREAD
MOV42H,R0
MOVR1,#87H;读出日期
LCALLREAD
MOV43H,R0
MOVR1,#89H;读出月份
LCALLREAD
MOV44H,R0
MOVR1,#8BH;读出星期
LCALLREAD
MOV46H,R0
MOVR1,#8DH;读出年
LCALLREAD
MOV45H,R0
RET
;================================================
;写DS1302子程序
;================================================
WRITE:
CLRSCLK
NOP
NOP
SETBRST
NOP
MOVA,R1
MOVR2,#08H
WRI_01:
RRCA;传输地址到DS1302
NOP
NOP
CLRSCLK
NOP
NOP
MOVIO_DATA,C
NOP
NOP
SETBSCLK
NOP
NOP
DJNZR2,WRI_01
CLRSCLK
NOP
NOP
MOVA,R0
MOVR2,#08H
WRI_02:
RRCA;传输数据到DS1302
NOP
CLRSCLK
NOP
NOP
MOVIO_DATA,C
NOP
NOP
SETBSCLK
NOP
NOP
DJNZR2,WRI_02
CLRSCLK
NOP
NOP
CLRRST
NOP
NOP
RET
;=================================================
;读DS1302子程序
;=================================================
READ:
CLRSCLK
NOP
NOP
SETBRST
NOP
NOP
MOVA,R1
MOVR2,#08H
READ_01:
RRCA
NOP;先传输地址到DS1302
MOVIO_DATA,C
NOP
NOP
SETBSCLK
NOP
NOP
CLRSCLK
NOP
NOP
DJNZR2,READ_01
NOP
NOP
SETBIO_DATA
CLRA
CLRC
MOVR2,#08H
READ_02:
CLRSCLK
NOP
NOP
MOVC,IO_DATA
NOP
NOP
RRCA;再从DS1302接收数据
NOP
NOP
SETBSCLK
NOP
NOP
DJNZR2,READ_02
MOVR0,A
CLRRST
RET
;==============================================
;实时时间、日期数据处理子程序
;==============================================
CHULI:
MOVA,40H;处理秒数据
ANLA,#0FH
MOV50H,A
MOV70H,A
MOVA,40H
ANLA,#11110000B
SWAPA
MOV51H,A
MOV71H,A
;---------------------------------------------
MOVA,41H;处理分数据
ANLA,#0FH
MOV52H,A
MOV72H,A
MOVA,41H
ANLA,#11110000B
SWAPA
MOV53H,A
MOV73H,A
;---------------------------------------------
MOVA,42H;处理时数据
ANLA,#0FH
MOV54H,A
MOV74H,A
MOVA,42H
ANLA,#11110000B
SWAPA
MOV55H,A
MOV75H,A
;----------------------------------------------
MOVA,43H;处理日数据
ANLA,#0FH
MOV60H,A
MOV76H,A
MOVA,43H
ANLA,#11110000B
SWAPA
MOV61H,A
MOV77H,A
;---------------------------------------------
MOVA,44H;处理月数据
ANLA,#0FH
MOV62H,A
MOV78H,A
MOVA,44H
ANLA,#11110000B
SWAPA
MOV63H,A
MOV79H,A
;---------------------------------------------
MOVA,45H;处理年数据
ANLA,#0FH
MOV64H,A
MOV7AH,A
MOVA,45H
ANLA,#11110000B
SWAPA
MOV65H,A
MOV7BH,A
;----------------------------------------------
MOVA,46H;处理周数据
MOV66H,A
MOV7CH,A
RET
;=============================================
;实时时间、日期查表取数子程序
;=============================================
DISP:;MOVR0,#TIME_DATA
MOVR3,#06H
DISP1:MOVA,@R0
MOVDPTR,#TAB_NU
MOVCA,@A+DPTR
MOV@R0,A
INCR0
DJNZR3,DISP1
RET
;====================================================
;时间、日期显示子程序
;====================================================
TIME_DISPLAY:
;MOVR0,#TIME_DATA;取得显示单元首地址
MOVR1,#07FH;从第一个数码管开始
MOVR2,#08H;共8个数码管
DISLP:MOVP0,@R0;获得当前单元数据
MOVA,R1
MOVP2,A;数码显示
JBACC.5,DISLP1;第三位数码管显示-
MOVP0,#0f7H
JMPDISLP3
DISLP1:JBACC.2,DISLP2;第六位数码管显示-
MOVP0,#0f7H
JMPDISLP3
DISLP2:INCR0
DISLP3:MOVA,R1;为下一个数准备
RRA;下一个单元
MOVR1,A;保存
LCALLDELAY;为了保证数码管亮度,延时
DJNZR2,DISLP;重复显示,直到全部数据刷新过
RET;返回
DELAY:
MOVR4,#0AH
L15:MOVR5,#64H
L16:DJNZR5,L16
DJNZR4,L15
RET
;******************************************************
SET_KEY:
SETBK1;增加键
SETBK2;减少键
SETBK3;选择键
SETBK4;定时设定功能键
NOP
JBK4,KEY01
LCALLBEEP_BL
JMPDS_KEY;进入定时值设定子程序
KEY01:JBK2,KEY02
LCALLBEEP_BL
JMPSET_TIME;进入时间设定子程序
KEY02:JBK3,KEY03
LCALLBEEP_BL
CPL20H.0;止闹标记取反
KEY03:RET
;-----------------------------------------------------
DS_KEY:
CALLDS_DELAY
JNBK4,$
LCALLDSSET
CALLDS_DELAY
RET
;==============================================
;实时时间设定子程序
;K1为加键、K2为减键、K3为选择键
;==============================================
SET_TIME:
MOVR1,#8EH;写保护寄存器
MOVR0,#00H;允许写入
LCALLWRITE
MOVR1,#80H;写秒寄存器
MOVR0,#80H;停止振荡器工作
LCALLWRITE
SETBTR0
K001:CALLTIME_DELAY;校时
JNBK3,K001;K3为位移键
K010:
CALLCHULI
JNB0AH,KH01
MOV54H,7FH;送入熄灭符
MOV55H,7FH
JMPKH02
KH01:MOV54H,74H;送实时值
MOV55H,75H;送实时值
KH02:MOVR0,#TIME_DATA
CALLDISP
MOVR0,#TIME_DATA
CALLTIME_DISPLAY
JNBK1,K011A
JNBK2,K011B
JNBK3,K002
JMPK010
K011A:
MOVA,42H
ADDA,#01H
DAA
MOV42H,A
XRLA,#24H
JNZK012A
MOV42H,#00H
K012A:MOVR1,#84H;写时寄存器
MOVR0,42H
LCALLWRITE
CALLTIME_DELAY
JMPK010
K011B:
MOVA,42H
XRLA,#00H
JZK012B
SETBC;求补运算
CLRA
ADDCA,#99H;加99
SUBBA,#01H;减去减数
ADDA,42H;加被减数
DAA;十进制调整
MOV42H,A;
XRLA,#00H
JNZK012C
K012B:MOV42H,#23H
K012C:MOVR1,#84H;写时寄存器
MOVR0,42H
LCALLWRITE
CALLTIME_DELAY
JMPK010
;-------------------------------------------------
K002:CALLTIME_DELAY;校分
JNBK3,K002;K3为位移键
K020:CALLCHULI
JNB0AH,KM01
MOV52H,7FH;送入熄灭符
MOV53H,7FH
JMPKM02
KM01:MOV52H,72H;送实时值
MOV53H,73H;送实时值
KM02:MOVR0,#TIME_DATA
CALLDISP
MOVR0,#TIME_DATA
CALLTIME_DISPLAY
JNBK1,K021A
JNBK2,K021B
JNBK3,K003
JMPK020
K021A:
MOVA,41H
ADDA,#01H
DAA
MOV41H,A
XRLA,#60H
JNZK022A
MOV41H,#00H
K022A:MOVR1,#82H;写分寄存器
MOVR0,41H
LCALLWRITE
CALLTIME_DELAY
JMPK020
;---------------------------------------------------
K021B:
MOVA,41H
XRLA,#00H
JZK022B
SETBC;求补运算
CLRA
ADDCA,#99H;加99
SUBBA,#01H;减去减数
ADDA,41H;加被减数
DAA;十进制调整
MOV41H,A;
XRLA,#00H
JNZK022C
K022B:MOV41H,#59H
K022C:MOVR1,#82H;写分寄存器
MOVR0,41H
LCALLWRITE
CALLTIME_DELAY
JMPK020
;---------------------------------------------------
K003:CALLDATE_DELAY;校日
JNBK3,K003;K3为位移键
K030:CALLCHULI
JNB0AH,KR01
MOV60H,7FH;送入熄灭符
MOV61H,7FH
JMPKR02
KR01:MOV60H,76H;送实时值
MOV61H,77H;送实时值
KR02:MOVR0,#DATE_DATA
CALLDISP
MOVR0,#DATE_DATA
CALLTIME_DISPLAY
JNBK1,K031A
JNBK2,K031B
JNBK3,K004
JMPK030
K031A:
MOVA,43H
ADDA,#01H
DAA
MOV43H,A
XRLA,#32H
JNZK032A
MOV43H,#00H
K032A:MOVR1,#86H;写日寄存器
MOVR0,43H
LCALLWRITE
CALLDATE_DELAY
JMPK030
K031B:
MOVA,43H
XRLA,#00H
JZK032B
SETBC;求补运算
CLRA
ADDCA,#99H;加99
SUBBA,#01H;减去减数
ADDA,43H;加被减数
DAA;十进制调整
MOV43H,A
XRLA,#00H
JNZK032C
K032B:MOV43H,#31H
K032C:MOVR1,#86H;写日寄存器
MOVR0,43H
LCALLWRITE
CALLDATE_DELAY
JMPK030
;------------------------------------------------
K004:CALLDATE_DELAY;校月
JNBK3,K004;K3为位移键
K040:CALLCHULI
JNB0AH,KC01
MOV62H,7FH;送入熄灭符
MOV63H,7FH
JMPKC02
KC01:MOV62H,78H;送实时值
MOV63H,79H;送实时值
KC02:MOVR0,#DATE_DATA
CALLDISP
MOVR0,#DATE_DATA
CALLTIME_DISPLAY
JNBK1,K041A
JNBK2,K041B
JNBK3,K005
JMPK040
K041A:
MOVA,44H
ADDA,#01H
DAA
MOV44H,A
XRLA,#13H
JNZK042A
MOV44H,#00H
K042A:MOVR1,#88H;写月寄存器
MOVR0,44H
LCALLWRITE
CALLDATE_DELAY
JMPK040
K041B:
MOVA,44H
XRLA,#00H
JZK042B
SETBC;求补运算
CLRA
ADDCA,#99H;加99
SUBBA,#01H;减去减数
ADDA,44H;加被减数
DAA;十进制调整
MOV44H,A;
XRLA,#00H
JNZK042C
K042B:MOV44H,#12H
K042C:MOVR1,#88H;写月寄存器
MOVR0,44H
LCALLWRITE
CALLDATE_DELAY
JMPK040
;-----------------------------------------------
K005:CALLDATE_DELAY;校年
JNBK3,K005;K3为位移键
K050:CALLCHULI
JNB0AH,KY01
MOV64H,7FH;送入熄灭符
MOV65H,7FH
JMPKY02
KY01:MOV64H,7AH;送实时值
MOV65H,7BH;送实时值
KY02:MOVR0,#DATE_DATA
CALLDISP
MOVR0,#DATE_DATA
CALLTIME_DISPLAY
JNBK1,K051A
JNBK2,K051B
JNBK3,K008
JMPK050
K051A:
MOVA,45H
ADDA,#01H
DAA
MOV45H,A
XRLA,#9AH
JNZK052A
MOV45H,#00H
K052A:MOVR1,#8CH;写年寄存器
MOVR0,45H
LCALLWRITE
CALLDATE_DELAY
JMPK050
K051B:
MOVA,45H
XRLA,#00H
JZK052B
SETBC;求补运算
CLRA
ADDCA,#99H;加99
SUBBA,#01H;减去减数
ADDA,45H;加被减数
DAA;十进制调整
MOV45H,A;
XRLA,#00H
JNZK052C
K052B:MOV45H,#99H
K052C:MOVR1,#8CH;写年寄存器
MOVR0,45H
LCALLWRITE
CALLDATE_DELAY
JMPK050
;-------------------------------------------------
K008:JNBK3,K008
MOVR1,#80H;写秒寄存器
MOVR0,#00H;启动振荡器工作
LCALLWRITE
MOVR1,#8EH;写保护寄存器
MOVR0,#80H;禁止写入
LCALLWRITE
CALLDATE_DELAY
CLR0AH
CLRTR0
CALLBEEP_BL
RET
;===================================================
;定时时间设定子程序
;K1为加键、K2为减键、K3为选择键
;===================================================
DSSET:
SETBTR0
DS01:LCALLDS_DELAY;定时分设定
JNBK4,$
DS010:CALLDS_CHULI
JNB0AH,DS01_1
MOV58H,7FH;送入熄灭符
MOV59H,7FH
JMPDS01_2
DS01_1:MOV58H,70H;送实时值
MOV59H,71H;送实时值
DS01_2:MOVR0,#58H
LCALLDS_SP
MOVR0,#58H
LCALLDS_DISPLAY
JNBK1,DS01A;加键
JNBK2,DS01B;减键
JNBK3,DS02
JMPDS010
DS01A:;加
MOVA,48H
ADDA,#01H
DAA
MOV48H,A
XRLA,#60H
JNZDS011
MOV48H,#00H
DS011:LCALLDS_DELAY
JMPDS010
DS01B:MOVA,48H;判48H是否为0
XRLA,#00H
JZDS012
SETBC;减
CLRA;求补运算
ADDCA,#99H;加99
SUBBA,#01H;减去减数
ADDA,48H;加被减数
DAA;十进制调整
MOV48H,A;
XRLA,#00H
JNZDS013
DS012:MOV48H,#59H
DS013:CALLDS_DELAY
JMPDS010
;----------------------------------------------
DS02:LCALLDS_DELAY;定时时设定
JNBK3,$
DS020:
CALLDS_CHULI
JNB0AH,DS02_1
MOV5AH,7FH;送入熄灭符
MOV5BH,7FH
JMPDS02_2
DS02_1:MOV5AH,72H;送实时值
MOV5BH,73H;送实时值
DS02_2:MOVR0,#58H
LCALLDS_SP
MOVR0,#58H
LCALLDS_DISPLAY
JNBK1,DS02A
JNBK2,DS02B
JNBK3,DS03
JMPDS020
DS02A:MOVA,49H;加
ADDA,#01H
DAA
MOV49H,A
XRLA,#24H
JNZDS021
MOV49H,#00H
DS021:LCALLDS_DELAY
JMPDS020
DS02B:MOVA,49H;判49H是否为0
XRLA,#00H
JZDS022
SETBC;减
CLRA;求补运算
ADDCA,#99H;加99
SUBBA,#01H;减去减数
ADDA,49H;加被减数
DAA;十进制调整
MOV49H,A;
XRLA,#00H
JNZDS023
DS022:MOV49H,#23H
DS023:CALLDS_DELAY
JMPDS020
;-------------------------------------------
DS03:CALLDS_DELAY
JNBK3,$
DS030:CALLDS_CHULI
JNB0AH,DS03_1
MOV5CH,7FH;送入熄灭符
JMPDS03_2
DS03_1:MOV5CH,74H;送实时值
DS03_2:MOVR0,#58H
LCALLDS_SP
MOVR0,#58H
LCALLDS_DISPLAY
JNBK3,DS04
JNBK1,DS03A
JMPDS030
DS03A:CPL20H.1;报警标记取反
JNB20H.1,DS031
MOV4AH,#01H;报警标记=1,允许报警
AJMPDS032
DS031:MOV4AH,#00H;报警标记=0,禁止报警
DS032:LCALLDS_DELAY
JMPDS030
;--------------------------------------------
DS04:CLRTR0
CLR0AH
CALLBEEP_BL
LCALLDS_DELAY
RET
;=============================================
;定时时间数据处理子程序
;=============================================
DS_CHULI:
MOVA,48H;处理分数据
ANLA,#0FH
MOV58H,A
MOV70H,A
MOVA,48H
ANLA,#0F0H
SWAPA
MOV59H,A
MOV71H,A
MOVA,49H;处理时数据
ANLA,#0FH
MOV5AH,A
MOV72H,A
MOVA,49H
ANLA,#0F0H
SWAPA
MOV5BH,A
MOV73H,A
MOVA,4AH;处理定时标记
ANLA,#01H
MOV5CH,A
MOV74H,A
RET
;==================================================
;定时时间查表取数子程序
;==================================================
DS_SP:;MOVR0,#58H
MOVR3,#05H
DS_SP1:MOVA,@R0
MOVDPTR,#TAB_NU
MOVCA,@A+DPTR
MOV@R0,A
INCR0
DJNZR3,DS_SP1
RET
;==================================================
;定时时间显示子程序
;==================================================
DS_DISPLAY:
;MOVR0,#58H;取得设定显示单元首地址
MOVR1,#07FH;从第一个数码管开始
MOVR2,#07H;共7个数码管
DSPLAY:MOVP0,@R0;获得当前单元数据
MOVA,R1
MOVP2,A;数码显示
JBACC.5,DSLP1;第三位数码管显示“-”
MOVP0,#0f7H
JMPDSLP3
DSLP1:JBACC.2,DSLP2;第六位数码管显示“-”
MOVP0,#0f7H
JMPDSLP3
DSLP2:INCR0
DSLP3:MOVA,R1;为下一个数准备
RRA;下一个单元
MOVR1,A;保存
LCALLDELAY
DJNZR2,DSPLAY;重复显示,直到全部数据刷新过
RET;返回
;====================================================
;实时时间与设定时间比较子程序
;20H.0止闹标记,=0,允许,=1,禁止。
;20H.1报警标记,=1,允许,=0,禁止。
;====================================================
COMP:JNB20H.1,COMP1
MOVR0,#TIME_DATA
LCALLTIME_DISPLAY
MOVA,42H;实时时间与设定时间比较
CJNEA,49H,COMP1;先比较时后比较分
MOVA,41H
CJNEA,48H,COMP1
JB20H.0,COMP2;20H.0=1,止闹开关,关
;LCALLBEEP_BL
CLRRELAY;继电器吸合1分钟
JMPCOMP3
COMP1:CLR20H.0
COMP2:SETBRELAY
COMP3:RET
;====================================================
;键延时子程序
;多次调用显示程序做键延时
;====================================================
DS_DELAY:
MOVR6,#0AH;设定定时时间,键延时用
DS_KK:
LCALLDS_CHULI
MOVR0,#DS_DATA
LCALLDS_SP
MOVR0,#DS_DATA
LCALLDS_DISPLAY
DJNZR6,DS_KK
RET
TIME_DELAY:;设定时间,键延时用
MOVR6,#0AH
TIME_KK:
LCALLCHULI
MOVR0,#TIME_DATA
LCALLDISP
MOVR0,#TIME_DATA
CALLTIME_DISPLAY
DJNZR6,TIME_KK
RET
DATE_DELAY:;设定日期,键延时用
MOVR6,#0AH
DATE_KK:
LCALLCHULI
MOVR0,#DATE_DATA
LCALLDISP
MOVR0,#DATE_DATA
CALLTIME_DISPLAY
DJNZR6,DATE_KK
RET
;====================================================
;蜂鸣器响一声子程序(适用交流蜂鸣器)
;====================================================
BEEP_BL:
MOVR6,#100
BL2:CALLDEX1
CPLBEEP
DJNZR6,BL2
MOVR5,#10
CALLDELAY_BL
RET
DEX1:MOVR7,#180
DE2:NOP
DJNZR7,DE2
RET
DELAY_BL:;(R5)*延时10MS
MOVR6,#50
DL1:MOVR7,#100
DJNZR7,$
DJNZR6,DL1
DJNZR5,DELAY_BL
RET
;*************************************************************
TAB_NU:DB28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h
DB0FFH;灭
DB30h,25h,0a9h,26h,0a1h,0b1h;A-F《共阳数码管》
;*************************************************************
END