6位LED时钟设计的源程序清单.docx
- 文档编号:3425466
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:38
- 大小:30.83KB
6位LED时钟设计的源程序清单.docx
《6位LED时钟设计的源程序清单.docx》由会员分享,可在线阅读,更多相关《6位LED时钟设计的源程序清单.docx(38页珍藏版)》请在冰豆网上搜索。
6位LED时钟设计的源程序清单
6源程序清单
(1)参考汇编程序
;************************************;
;课程设计程序:
单片机时钟;
;*************************************;
;***************************设计说明**********************;
;以下程序能用于24小时计时,能作为秒表使用,能定时闹铃1min(也可关),
;能整点报时,能倒计时定时。
使用方法:
开机后在00:
00:
00起开始计时,
;
(1)长按P1.0进入调分状态:
分单元闪烁,按P1.0加l,按P1.1减1。
;再长按P1.0进入时调整状态,时单元闪烁,加减调整同调分,长按P1.0退出调整状态。
;
(2)按下P1.1进入秒表状态:
按P1.2暂停,再按P1.2秒表清零,再按P1.2秒表
;又启动,按P1.1退出秒表回到时钟状态。
;(3)按P1.3进入设定闹时状态:
00:
00:
--,
;可进行分设定,按P1.2分加l,再按P1.3为时调整.00:
00:
--,按P1.2时加1,
;按P1.1闹铃有效,显示为00:
00:
--,再按P1.1闹铃无效(显示00:
00:
--,),
;按P1.3调闹钟结束。
在闹铃时可按P1.3停闹,不按闹铃响1分钟。
按P1.4进入倒计时
;定时模式.按P1.5进行分十位调整(加1),按P1.6进行分个位加l,按Pl.4倒计时
;开始,当对间为0时停止倒计时,并发声提醒,倒计时过程中按P1.4可退回到
;正常时钟状态,定时器T0、T1溢出周期为50ms,T0为秒计数用,T1为调整时闪烁
;及秒表定时用。
P1.0、P1.1、P1.2、P1.3为调整按钮,P0口为字符输出口,
;P2为扫描口.P3.7为小喇叭口.采用共阳显示管。
50H~55H为闹钟定时单元,
;60H--65H为秒表计时单元.70H~75H为显示时间单元,76H~79H为分时计时单元。
;03H标志=0时钟状态,03H=ls;05H=0,不闹铃,05H=1要闹铃;
;07H每秒改变一次,用作间隔呜叫。
08H为整点报时标志位,08H=l时为整点;
;09H为闹铃到点标志,09H=1时定时闹时时间到。
;*********************************************************************;
DISPFIRSTEQU30H;显示首址存放单元
BELLEQUP3.7;小喇叭或蜂鸣器
CONBSEQU2FH;存放报时次数
SONGCONEQU31H;唱歌程序计数器
CONR2EQU32H;以下唱歌程序用寄存器
CONR3EQU33H
CONR4EQU34H
CONR6EQU36H
CONR7EQU37H
CONR5EQU35H;以上唱歌程序寄存器
DELAYR3EQU38H;以下延时程序用寄存器
DELAYR5EQU39H;
DELAYR6EQU3AH;
DELAYR7EQU3BH;
;****************************************;
;中断入口程序;
;****************************************;
ORG0000H;程序执行开始地址
LJMPSTART;跳到标号START执行
ORG0003H;外中断0中断程序入口
RETI;外中断0中断返回
ORG000BH;定时器T0中断程序入口
LJMPINTT0;跳至INTT0执行
ORG0013H;外中断l中断程序人口
RETI;外中断1中断返回
ORG001BH;定时器T1中断程序入口
LJMPINTTI;跳至INTTI执行
ORG0023H;串行中断程序入口地址
RETI;串行中断程序返回
;***************************************;
;以下为程序开始;
;****************************************;
;整点报时功能程序
ZDBS:
MOVA,#10;十位数乘10加上个位数为报时的次数
MOVB,79H
MULAB
ADDA,78H
MOVCONBS,A;报时次数计算完成
JZOUT00;如为午夜零点不报时
BSLOOP:
LCALLDS20ms;以下按次数鸣叫
MOVP3,#00H
LCALLDLIS
LCALLDLIS
MOVP3,#0FFH
LCALLDLIS
DJNZCONBS,BSLOOP;报时完成
OUT00:
CLR08H;清整点报时标志
AJMPSTART1;返回主程序
;以下为闹钟功能时的唱歌程序
SPPP:
;LCALLMUSIC0;调用唱歌程序
MOVB,#10;闹钟叫10下
BLOOP:
LCALLDS20ms
LCALLDLIS;
LCALLDLIS;
DJNZB,BLOOP
CLR0AH;清闹钟时的唱歌标志
CLR05H;清止闹标志
AJMPSTART1;返回主程序
;倒计时程序进入程序
DJS:
LCALLDS20mS
JBP1.4,START1
WAITH111:
JNBP1.4,WAITH111;等待键释放
LJMPDJSST
;*******************************;
;主程序开始;
;******************************;
;
START:
MOVSP,#80H;堆栈在80H以上
LCALLST;上电显示年月日及班级学号
LCALLSTFUN0;流水灯
LCALLSTMEN;时钟程序初始化子程序
SETBEA;中断开放
SETBET0;允许T0中断
SETBTR0;开启T0定时器
MOVR4,#14;1s定时用计数值(50ms×20)
MOVDISPFIRST,#70H;显示单元为70H~75H
LCALLLMUSIC0;唱歌测试程序
;以下为主程宇循环
START1:
LCALLDISPLAY;调用显示子程序
JNBP1.0,SETMM1;PI.0口为0时转时间调整程序
JNBPl.1,FUNSS;秒表功能,P1.1按键调时作减l功能
JNBPl.2,FUNPT;秒表STOP,PUSE,CLR
JNBPl.3,TSFUN;定时闹铃设定
JNBPl.4,DJS;倒计时功能
JB08H,ZDBS;08H为l,整点到,进行整点报时
JB0AH,SPPP;0AH为1时,闹铃时间到,进行提醒
AJMPSTART1;P1.0口为l时跳回START1
;
FUNPT:
LJMPFUNPTT
;以下为闹铃时间设定程序,按P1.3进入设定
TSFUN:
LCALLDS20ms
JBPl.3,STARTI;
WAIT113:
JNBPl.3,WAIT113;等待键释放
JB05H,CLOSESP;闹铃已开的话,关闹铃
MOVDISPFIRST,#50H;显示50H~55H闹钟定时单元
MOV50H,#0CH;”--”闹铃设定时显示格式00:
00:
--
MOV5IH,#0AH;”黑”
DSWAIT:
SETBEA
LCALLDISPLAY
JNBPl.2,DSFINC;分加l
JNBPl.0,DSDEC;分减1
JNBPl.3,DSSFU;进入时调整
AJMPDSWAIT
CLOSESP:
CLR05H;关闹铃标志
CLRBELL
AJMPSTARTI
DSSFU:
LCALLDS20ms;消抖
JBPl.3.DSWAIT
LJMPDSSFUNN;进入时调整
SETMM1:
LJMPSETMM;转到时间调整程序SETMM
DSFINC:
LCALLDS20ms;消抖
JBPl.2.DSWAIT
DSWAIT12:
LCALLDISPLAY;等键释放
JNBPl.2,DSWAIT12
CLREA
MOVR0,#53H
LCALLADD1;闹铃设定分加l
MOVA,R3;分数据放入A
CLRC;清进位标志
CJNEA,#60H,ADDHH22
ADDHH22:
JCDSWAIT;小于60分时返回
ACALLCLR0;大于或等于60分时分计时单元清o
AJMPDSWAIT
DSDEC:
LCALLDS20ms;消抖
JBPl.0.DSWAIT
DSWAITEE:
LCALLDISPLAY;等键释放
JNBPl.0,DSWAITEE
CLREA
MOVR0,#53H
LCALLsubl;闹铃设定分减1
LJMPDSWAIT
;以下为秒表功能/时钟转换程序
;按下P1.1可进行功能转换
FUNSS:
LCALLDS20ms
JBPl.1,START11
WAIT11:
JNBPl.1,WAIT11
CPL03H
JNB03H,TIMFUN
MOVDISPFIRST,#60H;显示秒表数据单元
MOV60H,#00H
MOV6IH,#00H
MOV62H,#00H
MOV63H,#00H
MOV64H,#00H
MOV65H,#00H
MOVTL1,#0F0H;l0ms定时初值
MOVTHl,#0D8H;l0ms定时初值
SETBTR1
SETBET1
START11:
LJMPSTART1
TIMFUN:
MOVDISPFIRST,#70H;显示时钟数据单元
CLRET1
CLRTR1
START12:
LJMPSTART1
;以下为秒表暂停/清零功能程序
;按下P1.2暂停或清0,按下P1.1退出秒表回到时钟计时
FUNPTT:
LCALLDS20ms
JBPl.2,START12
WAIT22:
JNBPl.2,WAIT21
CLRET1
CLRTR1
WAIT33:
JNBP1.1,FUNSS
JBPl.2,WAIT31
LCALLDS20ms
JBPl.2,WAIT33
WAIT66:
JNBPl.2,WAIT61
MOV60H,#00H
MOV6IH,#00H
MOV62H,#00H
MOV63H,#00H
MOV64H,#00H
MOV65H,#00H
WAIT44:
JNBPl.1,FUNSS
JBPl.2.WAIT41
LCALLDS20ms
JBPl.2,WAIT44
WAIT55:
JNBPl.2,WAIT51
SETBET1
SETBTR1
AJMPSTART1
;以下为键等待释放时显示不会熄灭程序
WAIT21:
LCALLDISPLAY
AJMPWAIT22
WAIT31:
LCALLDISPLAY
AJMPWAIT33
WAIT41:
LCALLDISPLAY
AJMPWAIT44
WAIT51:
LCALLDISPLAY
AJMPWAIT55
WAIT61:
LCALLDISPLAY
AJMPWAIT66
;
;
;******************************;
;1秒计时程序;
;******************************;
;T0中断服务程序
INTT0:
PUSHACC;累加器入栈保护
PUSHPSW;状态字入栈保护
CLRET0;关T0中断允许
CLRTR0;关闭定时器T0
MOVA,#0B7H;中断响应时间同步修正
ADDA,TL0;低8位初值修正
MOVTL0,A;重装初值(低8位修正值)
MOVA,#3CH;高8位初值修正
ADDCA,TH0;
MOVTH0,A;重装初值(高8位修正值)
SETBTR0;开启定时器T0
SETBP3.6
SETBP3.5
DJNZR4,OUTT0;20次中断未到中断退出
ADDSS:
MOVR4,#14H;20次中断到(ls)重赋初值
CLRP3.6
CLRP3.5
CPL07H;闹铃时间隔呜叫用
MOVR0,#7IH;指向秒计时单元(7IH~72H)
ACALLADD1;调用加l程序(加1s操作)
MOVA,R3;秒数据放入A(R3为2位十进制数组合)
CLRC;清进位标志
CJNEA,#60H,ADDMM;
ADDMM:
JCOUTT0;小于60s时中断退出
ACALLCLR0;大于或等于60s时对秒计时单元清0
MOVR0,#77H;指向分计时单元(76H~77H)
ACALLADD1;分计时单元加1分钟
MOVA,R3;分数据放入A
CLRC;清进位标志
CJNEA,#60H,ADDHH;
ADDHH:
JCOUTT0;小于60min时中断退出
ACALLCLR0;大于或等于60min时分计时单元清0
LCALLDS20ms;正点报时
SETB08H
MOVR0,#79H;指向小时计时单元(78H~79H)
ACALLADD1;小时计时单元加l小时
MOVA,R3;时数据放八A
CLRC;清进位标志
CJNEA,#24H,HOUR
HOUR:
JCOUTT0;小于24小时中断退出
ACALLCLR0;大于或等于24小时,计时单元清0
OUTT0:
MOV72H,76H;中断退出时将分、时计时单元数据移入
MOV73H,77H;对应显示单元
MOV74H,78H;
MOV75H.79H;
LCALLBAOJ
POPPSW;恢复状态字(出栈)
POPACC;恢复累加器
SETBET0;开放T0中断
RETI;中断返回
;
;****************************************;
;闪动调时程序/秒表功能程序;
;****************************************;
;TI中断服务程序,用作时间调整时调整单元闪烁指示或秒表计时
INTT1I:
PUSHACC;中断现场保护
PUSHPSW;
JB09H,SPCC
JB06H,DJSFUN
JB03H,MMFUN;03H=1时秒表
MOVTL1,#0B0H;装定时器T1定时初值
MOVTH1,#3CH
DJNZR2,INTTlOUT;0.3s未到退出中断(50ms中断6次
MOVR2,#06H;重装0.3s定时用初值
CPL02H;0.3s定时到对闪烁标志取反
JB02H,FLASH1;02H位为1时显示单元”熄灭”
MOV72H,76H;02H位为0时正常显示
MOV73H,77H;
MOV74H,78H;
MOV75H,79H;
INTT1OUT:
POPPSW;恢复现场
POPACC;
RETI;中断退出
FLASH1:
JB01H,FLASH2;01H位为1时,转小时熄灭控制
MOV72H,7AH;01H位为0时,”熄灭符”数据放入分
MOV73H,7AH;显示单元(72H~73H),将不显示分数据
MOV74H,78H;
MOV75H,79H;
AJMPINTT1OUT;转中断退出
FLASH2:
MOV72H,76H;01H位为1时,“熄灭符”数据放入小时
MOV73H,77H;显示单元(74H~75H),小时数据将不显示
MOV74H,7AH;
MOV75H,7AH;
AJMPINTT1OUT;转中断退出
SPCC:
INCSONGCON;中断服务.中断计数器加1
MOVTH1.#0D8H
MOVTL1,#0EFH;l0ms定时初值
AJMPINTT1OUT;
DJSFUN:
LJMPDJSS
MMFUN:
CLRTR1
MOVA,#0F7H;中断响应时间同步修正,重装初值(l0ms)
ADDA,TL1;低8位初值修正
MOVTL1,A;重装初值(低8位修正值)
MOVA,#0D8H;高8位初值修正
ADDCA,TH1
MOVTH1,A;重装初值(高8位修正值)
SETBTR1;开启定时器T0
MOVR0,#61H;指向秒计时单元(7IH~72H)
ACALLADD1;调用加1程序(加1s操作)
CLRC
MOVA,R3
JZFSS1;加1后为00,C=0
AJMPOUTT01;加l后不为00,C=1
FSS1:
ACALLCLR0;大于或等于60s时对秒计时单元清0
MOVR0.#63H;指向分计时单元(76H~77H)
ACALLADD1;分计时单元加1分钟
MOVA,R3;分数据放入A
CLRC;清进位标志
CJNEA,60H,ADDHH1
ADDHH1:
JCOUTT01;小于60min时中断退出
LCALLCLR0;大于或等于60min时,计时单元清0
MOVR0.#65H;指向小时计时单元(78H~79H)
ACALLADD1;小时计时单元加l小时
OUTT01:
POPPSW;恢复状态字(出栈)
POPACC;恢复累加器
RETI;中断返回;
;****************************************;
;加l子程序;
;****************************************;
ADD1:
MOVA,@R0;取当前计时单元数据到A
DECR0;指向前一地址
SWAPA;A中数据高四位与低四位交换
ORLA,@R0;前一地址中数据放入A中低四位
ADDA,#01H;A加1操作
DAA;十进制调整
MOVR3,A;移入R3寄存器
ANLA,#0FH;高四位变0
MOV@R0,A;放回前一地址单元
MOVA,R3;取回R3中暂存数据
INCR0;指向当前地址单元
SWAPA;A中数据高四位与低四位交换
ANLA,#0FH;高四位变0
MOV@R0,A;数据放入当前地址单元中
RET;子程序返回
;***************************************;
;分减1子程序;
;**************************************;
SUB1:
MOVA,@R0;取当前计时单元数据到A
DECR0;指向前一地址
SWAPA;A中数据高4位与低4位交换
ORLA.@R0;前一地址中数据放入A中低4位
JZSUB11
DECA;A减1操作
SUB111:
MOVR3,A;移入R3寄存器
ANLA,#0FH;高4位变0
CLRC;清进位标志
SUBBA,#0AH
SUB1111:
JCSUB1110
MOV@R0,#09H;大于等于0AH,为9
SUB110:
MOVA,R3;取回R3中暂存数据
INCR0;指向当前地址单元
SWAPA;A中数据高4位与低4位交换
ANLA,#0FH;高4位变0
MOV@R0,A;数据放入当前地址单元中
RET;子程序返回
SUB11:
MOVA,#59H
AJMPSUB111
SUB1110:
MOVA,R3;移人R3寄存器
ANLA,#0FH;高4位变0
MOV@R0,A
AJMPSUB110
;**************************************;
;时减l子程序;
;***************************************;
SUBB1:
MOVA,@R0;取当前计时单元数据到A
DECR0;指向前一地址
SWAPA;A中数据高4位与低4位交换
ORLA,@R0;前一地址中数据放入A中低4位
JZSUBB11;00减l为23(小时)
DECA;A减1操作
SUBBl11:
MOVR3,A;移人R3寄存器
ANLA,#0FH;高4位变0
CLRC;清进位标志
SUBBA,#0AH;时个位大于9,为9
SUBB1111:
JCSUBB1110:
MOV@R0,#09H;大于等于0AH,为9
SUBB110:
MOVA.R3;取回R3中暂存数据
INCR0;指向当前地址单元
SWAPA;A中数据高4位与低4位交换
ANLA,#0FH;高4位变0
MOV@R0,A;时十位数数据放入
RET;子程序返回
SUBB11:
MOVA,#23H
AJMPSUBB111
SUBB1110:
MOVA,R3;时个位小于0A不处理
ANLA,#0FH;高4位变0
MOV@R0,A;个位移入
AJMPSUBB110
;****************************************;
;清零程序;
;****************************************;
;对计时单元复零用
CLR0:
CLRA;清累加器
MOV@R0,A;清当前地址单元
DECR0;指向前一地址
MOV@R0,A;前一地址单元清0
RET;子程序返回
;*****
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LED 时钟 设计 源程序 清单