DS1302时钟 秒表.docx
- 文档编号:29682770
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:30
- 大小:23KB
DS1302时钟 秒表.docx
《DS1302时钟 秒表.docx》由会员分享,可在线阅读,更多相关《DS1302时钟 秒表.docx(30页珍藏版)》请在冰豆网上搜索。
DS1302时钟秒表
;******************************************************************
;123A;修改时间时,A键为当前修改时间加一,B键为减一,C不保存退出,D保存并退出
;456BINT0;INT0键,进入和退出秒表
;789CINT1;显示时间时,INT1键,进入修改时间程序;秒表时,INT1键为计数清零
;E0FDT0;显示时间时,T0键为切换日历和时钟,秒表时,T0为开始结束计时
;*******************************************************************
;修改时间时E键左移F键右移
;*******************************************************************
LEDEQUP0;显示接口
KEYEQUP1;键盘接口
DUANEQUP2;LED段控制
ZCLKBITP1.6;时钟线引脚
ZIOBITP3.5;数据线引脚
ZRSTBITP1.7;复位线引脚
ZINT0BITP3.2;外部中断0引脚
ZINT1BITP3.3;外部中断1引脚
ZT0BITP3.4;T0引脚
ZT1BITP3.5;T1引脚
XSWEQU7FH;显示首地址
SECONDEQU30H;秒地址
XGDDZEQU7EH;修改段地址
XGSJDZEQU7DH;修改时间地址
SMBZEQU70H;键盘扫描标志位
XGWBZEQU71H;修改位标志
MBBZEQU72H;秒表标志
SSEQU70H;闪烁缓存地址
T0JCEQU74H;T0计数次数
XSW1EQU75H;显示辅助
;********************************
ORG00H;程序入口
LJMPSTART
ORG03H;外部中断0程序入口
LJMPAINT0
ORG0BH;定时器T0程序入口
LJMPAT0
ORG13H;外部中断1程序入口
LJMPAINT1
ORG1BH;定时器T1程序入口
LJMPAT1
;********************************
ORG30H
START:
CLRSMBZ;清扫描标志,为0表示当前不进行键盘扫描,为1表示扫描。
CLRXGWBZ;清显示位标志,为0表示当前修改的是十位上的数,为1个位
CLRMBBZ;清秒表标志,0表示没有进入秒表。
SETBPT1;置T1中断为最高级中断
MOVT0JC,#5;T0中断计数,当计数5次运行一次中断子程序里面的内容
MOVTMOD,#11H;设置定时器工作方式,T0,T1都为方式1
MOVTH0,#03CH;T0定时50ms初始化
MOVTL0,#0AFH;
MOVTH1,#0D8H;T1定时10ms初始化
MOVTL1,#0F0H;
SETBEA;开总中断
SETBEX1;开外部中断0
SETBET1;开定时器T1中断,还没开始计时
SETBEX0;开外部中断1
MOVDPTR,#SJ;数据段首地址送DPTR
MOVSECOND,#00H;初始化时间2010年7月4日5时20分00秒星期日
MOVSECOND+1,#20H;
MOVSECOND+2,#05H;
MOVSECOND+3,#04H;
MOVSECOND+4,#07H;
MOVSECOND+5,#07H;
MOVSECOND+6,#10H;
LCALLSET1302;调用初始化程序,把我们设定的时间(即30H—36H里面的内容)写入芯片
MOV52H,#40H;置显示程序里面一杠
MOV55H,#40H;
MOV5BH,#40H;
MOV5EH,#40H;
;SETBTR0;启动T0计数
SETBTR1;启动T1计数
MOV65H,#100
CLR30H
CLR31H
MOVXSW,#50H;显示位首地址设置
MOVXSW1,#50H;显示首地址辅助切换位
LOOP_1:
;主循环
MOVR0,XSW;取显示首地址,XSW内存59H时显示时分秒,50H时显示年月日
MOVR2,#00H;默认第一个LED亮
JB30H,LOOP_2
DJNZ65H,LOOP_2
MOV65H,#100
LCALLYIWEI
LOOP_2:
;
JNBSMBZ,LOOP_3;判断扫描标志(SMBZ),是否进行键盘扫描
LCALLSAOMIAO;键盘扫描程序
LOOP_3:
;
MOVLED,#00H;LED灭
MOVDUAN,R2;送哪个LED亮
MOVLED,@R0;送显示代码
LCALLDELAY;延时1ms
INCR0;
INCR2;亮的LED灯右移
JBSMBZ,LOOP_5;判断扫描标志,是否屏蔽T0键
JNBZT0,LOOP_4;
LOOP_5:
;
CJNER2,#08H,LOOP_2;判断是否已循环8次
LJMPLOOP_1;跳回主循环
LOOP_4:
;
LCALLDL20MS;延时20ms,去抖
JBZT0,LOOP_1;
JNBZT0,$;T0键一直按着,会卡在这里,是为了确保按下T0键只运行一次下面的程序
;MOVA,XSW1;以下三行,交换显示首地址
;XCHA,XSW;切换显示年月日,还是时分秒
;MOVXSW1,A
CPL30H
MOVXSW,#59H;
LJMPLOOP_1;
YIWEI:
JB31H,YIWEI_0
INCXSW
MOVA,XSW
CJNEA,#5AH,YIWEI_1
DECXSW
CPL31H
LJMPYIWEI_1
YIWEI_0:
DECXSW
MOVA,XSW
CJNEA,#4FH,YIWEI_1
INCXSW
CPL31H
YIWEI_1:
RET
;****************************************************************************************
SET1302:
;设置DS1302初始时间,并启动计时。
CLRZRST;
CLRZCLK;
SETBZRST;
MOVB,#8EH;控制寄存器
LCALLINB;
MOVB,#00H;写操作前WP=0
LCALLINB;
SETBZCLK;
CLRZRST;
MOVR0,#SECOND;
MOVR7,#07H;秒分时日月星期年
MOVR1,#80H;秒写地址
S13021:
;
CLRZRST;
CLRZCLK;
SETBZRST;
MOVB,R1;写秒分时日月星期年地址
LCALLINB;
MOVA,@R0;写秒数据
MOVB,A;
LCALLINB;
INCR0;
INCR1;
INCR1;
SETBZCLK;
CLRZRST;
DJNZR7,S13021;循环7次,将年星期月日时分秒写入芯片
CLRZRST;
CLRZCLK;
SETBZRST;
MOVB,#8EH;控制寄存器
LCALLINB;
MOVB,#80H;控制,WP=1,写保护
LCALLINB;
SETBZCLK;
CLRZRST;
RET;
;********************************************************************************
GET1302:
;读时间
MOVR0,#SECOND;;功能简述:
将芯片中的当前时间读到单片机的30H—36H存储单元
MOVR7,#07H;
MOVR1,#81H;秒地址
G13021:
;
CLRZRST;
CLRZCLK;
SETBZRST;
MOVB,R1;读秒分时日月星期年地址
LCALLINB;
LCALLOUTB;
MOV@R0,A;秒
INCR0;
INCR1;
INCR1;
SETBZCLK;
CLRZRST;
DJNZR7,G13021;
RET;
;************************************************************************
INB:
;写1302一字节
MOVR4,#08H;
INB1:
;
MOVA,B;
RRCA;
MOVB,A;
MOVZIO,C;
SETBZCLK;
CLRZCLK;
DJNZR4,INB1;
RET;
;************************************************************************
OUTB:
;读1302一字节
MOVR4,#08H;
OUT1:
;
MOVC,ZIO;
RRCA;
SETBZCLK;
CLRZCLK;
DJNZR4,OUT1;
RET;
;************************************************************************
XS:
;显示转换子程序
MOVR0,#5FH;功能简述:
将30H—36H的时间转换为显示码,存储在50H—60H,
MOVR1,#SECOND;
XS_1:
;
MOVA,@R1;举例:
50H存的是年的十位,51H年的个位。
52H是一杠,53H,54H是月
MOVB,#10H;
DIVAB;
MOVCA,@A+DPTR;
MOV@R0,A;注意:
里面存的是显示码,比10年,那么50H存的是#06H,51H存#3FH
MOVA,B;
MOVCA,@A+DPTR;
INCR0;
MOV@R0,A;
DECR0;
DECR0;
DECR0;
DECR0;
INCR1;
CJNER1,#35H,XS_1;
MOVA,36H;
MOVB,#10H;
DIVAB;
MOVCA,@A+DPTR;
MOV50H,A;
MOVA,B;
MOVCA,@A+DPTR;
MOV51H,A;
RET;
;**************************************************************************
SAOMIAO:
;键盘扫描程序,扫描原理详见课本251页
CLRTR0;
CLRET0;
PUSHACC;
PUSH1;
MOVKEY,#0FH;
MOVA,KEY;
CJNEA,#0FH,GO1;
LJMPSMRET_1;
GO1:
;
CALLDL20MS;延时20ms,去抖
MOVA,KEY;
CJNEA,#0FH,GO2;
LJMPSMRET_1;
GO2:
;
MOVKEY,#0F0H;
MOVB,KEY;
ORLA,B;
PUSHACC;
MOVLED,#00H;
GO3:
;键按着一直卡在这里
MOVKEY,#0FH;
MOVA,KEY;
CJNEA,#0FH,GO3;
POPACC;
NE1:
;
CJNEA,#0EEH,NE2;1键
JBXGWBZ,NE1_1;判断修改位标志(XGWBZ),决定将1送修改时间的十位还是个位。
MOVR1,XGSJDZ;取要修改的时间地址(比如秒地址为30H),以下为将1,送十位
MOVA,@R1;
ANLA,#0FH;
ORLA,#10H;
MOV@R1,A;
CPLXGWBZ;
LJMPSMRET;
NE1_1:
;以下为将1送个位
MOVR1,XGSJDZ;
MOVA,@R1;
ANLA,#0F0H;
ORLA,#01H;数字键全部都是这样,只是送的值不同
MOV@R1,A;
LJMPNE15;
LJMPSMRET;
NE2:
;
CJNEA,#0EDH,NE3
JBXGWBZ,NE2_1
MOVR1,XGSJDZ
MOVA,@R1
ANLA,#0FH
ORLA,#20H
MOV@R1,A
CPLXGWBZ
LJMPSMRET
NE2_1:
MOVR1,XGSJDZ
MOVA,@R1
ANLA,#0F0H
ORLA,#02H
MOV@R1,A
LJMPNE15
LJMPSMRET
NE3:
CJNEA,#0EBH,NE4
JBXGWBZ,NE3_1
MOVR1,XGSJDZ
MOVA,@R1
ANLA,#0FH
ORLA,#30H
MOV@R1,A
CPLXGWBZ
LJMPSMRET
NE3_1:
MOVR1,XGSJDZ
MOVA,@R1
ANLA,#0F0H
ORLA,#03H
MOV@R1,A
LJMPNE15
LJMPSMRET
NE4:
;A键,功能:
加1
CJNEA,#0E7H,NE5;
MOVR1,XGSJDZ;取要修改的时间地址(比如秒地址为30H)
INC@R1;修改的时间加1
MOVA,@R1;以下为判断加1后数字个位是否超过#0AH
ANLA,#0FH;若超过,加#06H,相当于清零,然后进位。
CJNEA,#0AH,NE4_1;
MOVA,#06H;
ADDA,@R1;
MOV@R1,A;
NE4_1:
LJMPSMRET
NE5:
CJNEA,#0DEH,NE6
JBXGWBZ,NE5_1
MOVR1,XGSJDZ
MOVA,@R1
ANLA,#0FH
ORLA,#40H
MOV@R1,A
CPLXGWBZ
LJMPSMRET
NE5_1:
MOVR1,XGSJDZ
MOVA,@R1
ANLA,#0F0H
ORLA,#04H
MOV@R1,A
LJMPNE15
LJMPSMRET
NE6:
CJNEA,#0DDH,NE7
JBXGWBZ,NE6_1
MOVR1,XGSJDZ
MOVA,@R1
ANLA,#0FH
ORLA,#50H
MOV@R1,A
CPLXGWBZ
LJMPSMRET
NE6_1:
MOVR1,XGSJDZ
MOVA,@R1
ANLA,#0F0H
ORLA,#05H
MOV@R1,A
LJMPNE15
LJMPSMRET
NE7:
CJNEA,#0DBH,NE8
JBXGWBZ,NE7_1
MOVR1,XGSJDZ
MOVA,@R1
ANLA,#0FH
ORLA,#60H
MOV@R1,A
CPLXGWBZ
LJMPSMRET
NE7_1:
MOVR1,XGSJDZ
MOVA,@R1
ANLA,#0F0H
ORLA,#06H
MOV@R1,A
LJMPNE15
LJMPSMRET
NE8:
;B键,功能:
减1
CJNEA,#0D7H,NE9;
MOVR1,XGSJDZ;
CJNE@R1,#00H,NE8_2;
LJMPNE8_1;
NE8_2:
;
DEC@R1;减1,
MOVA,@R1;
ANLA,#0FH;同A键,若减1产生借位,减#06H
CJNEA,#0FH,NE8_1;
MOVB,#06H;举例:
比如20H减1=1FH,有产生借位,所以减#06H,变为19H
MOVA,@R1;20H变成的19H。
。
。
CLRC;
SUBBA,B;
MOV@R1,A;
NE8_1:
;
LJMPSMRET;
NE9:
CJNEA,#0BEH,NE10
JBXGWBZ,NE9_1
MOVR1,XGSJDZ
MOVA,@R1
ANLA,#0FH
ORLA,#70H
MOV@R1,A
CPLXGWBZ
LJMPSMRET
NE9_1:
MOVR1,XGSJDZ
MOVA,@R1
ANLA,#0F0H
ORLA,#07H
MOV@R1,A
LJMPNE15
LJMPSMRET
NE10:
CJNEA,#0BDH,NE11
JBXGWBZ,NE10_1
MOVR1,XGSJDZ
MOVA,@R1
ANLA,#0FH
ORLA,#80H
MOV@R1,A
CPLXGWBZ
LJMPSMRET
NE10_1:
MOVR1,XGSJDZ
MOVA,@R1
ANLA,#0F0H
ORLA,#08H
MOV@R1,A
LJMPNE15
LJMPSMRET
NE11:
CJNEA,#0BBH,NE12
JBXGWBZ,NE11_1
MOVR1,XGSJDZ
MOVA,@R1
ANLA,#0FH
ORLA,#90H
MOV@R1,A
CPLXGWBZ
LJMPSMRET
NE11_1:
MOVR1,XGSJDZ
MOVA,@R1
ANLA,#0F0H
ORLA,#09H
MOV@R1,A
LJMPNE15
NE12:
CJNEA,#0B7H,NE13;
LJMPNE16_1;不保存退出修改
NE13:
;
CJNEA,#07EH,NE14;功能:
修改位左移一位,看的的就是闪烁的左移了。
MOVA,XGSJDZ;
CJNEA,#36H,NE13_3;
LJMPNE13_2;
NE13_3:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS1302时钟 秒表 DS1302 时钟