单片机数字时钟设计报告.docx
- 文档编号:23124834
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:29
- 大小:581.44KB
单片机数字时钟设计报告.docx
《单片机数字时钟设计报告.docx》由会员分享,可在线阅读,更多相关《单片机数字时钟设计报告.docx(29页珍藏版)》请在冰豆网上搜索。
单片机数字时钟设计报告
目录
一、实验目的…………………………………………………………2
二、实验要求…………………………………………………………2
三、整体设计方案……………………………………………………2
1、总框图及流程…………………………………………………2
2、主要子程序框图及说明………………………………………3
4、参考程序…………………………………………………………6
5、调试记录及调试结果……………………………………………16
6、系统实现功能及操作说明………………………………………16
7、心得体会…………………………………………………………16
八、附录………………………………………………………………17
参考文献…………………………………………………………17
接口电路逻辑图…………………………………………………17
一、实习目的
1、学会掌握KeilC51汇编语言程序的设计和调试。
2、学会将所学的单片机原理的有关知识应用于实践,提高单片机应用于技术的实践操作技能,掌握单片机应用系统设计、研制的方法,培养理论联系实际的学习作风,提高动手能力、分析并解决实际问题的能力。
3、使我们进一步了解掌握所学的专业知识,巩固和深化对单片机的结构、指令系统、中断系统、键盘/显示系统、接口技术、系统扩展、定时/控制、程序设计、应用开发、等基本理论知识的理解。
4、通过设计、分析、调试,培养我们工程意识,激发大家对产品开发的兴趣,及培养对科技革新、开发和创新的基本能力。
二、实习要求
本课题为数字钟设置,其效果为能正常显示数字时钟,显示时、分、秒,其中时为24小时制,并且通过合理的按键操作能修改时、分、秒的内容来修改时间。
还有闹钟功能,可以给它设定一个时间,到这个时间它就能产生报警信号,并可以随时停止警报,如果不进行任何操作则它将响铃一分钟后自动停止响铃。
除此之外还能显示日期,日期分为年、月、日,其显示方式为xxxx年xx月xx日,并且通过合理的按键操作可以任意设置日期时间。
三、整体设计方案
进入闹铃子程序
显示闹铃时间
进入闹铃设置子程序
显示日期子程序
显示日期子程序
进入设置日期子程序
显示时间子程序
进入设置时间子程序
判断是否进入显示日期
判断是否进入设置时间功能
程序初始化,赋初值
程序开始
调用子程序,让秒增1,并且当时为24溢出时,让存放天的单元增1
等待1s脉冲到来
1、总体框图及流程
判断是否进入设置日期
判断是否进入闹铃时间设置
判断是否闹铃
判断是否停止响铃
进入停止响铃子程序
调用显示时间子程序
2、主要子程序框图及说明
1、秒增1子程序2、显示时间子程序框图
程序说明
本程序的作用为设置时间的工作方式
3、设置时间子程序4、显示日期子程序
程序说明
本程序为判断是否进入时间设置程序,并且进入相应设置
程序说明
本程序为显示日期的子程序,里面包含了日期的工作方式子程序
5、日期工作方式子程序
程序说明
本程序为日期的工作方式程序,它的结果不能直接显示,要通过一个月份的调整子程序调整才将日期显示出来,因为月份有大、小,有些月份为31天,有些月份为30天,有些则为28天。
6、月份调整子程序
7、设置闹铃时间子程序8、响铃子程序
程序说明
本程序要实现的功能为,当响铃信号来临时让警报响起
程序说明
本程序要实现的功能就是定时,当闹铃时间与当前时间相等时能实现响铃
八、源程序
ORG0000H
AJMPMAIN
MAIN:
LCALLDEL
MOVDPTR,#0FE03H;开片选端
MOVA,#81H
MOVX@DPTR,A
MOVDPTR,#0FD03H;开片选端
MOVA,#8BH
MOVX@DPTR,A
MOV45H,#0;设置初始值
MOV44H,#0
MOV43H,#23;预先设置显示缓冲区
MOV6EH,#2
MOV6DH,#0
MOV6CH,#1
MOV6BH,#0
MOV6AH,#0
MOV69H,#6
MOV68H,#2
MOV67H,#6
MOVTMOD,#01H;设置中断方式
MOV20H,#28H;设置中断次数
CLRA
MOV40H,A;闹铃缓冲区预先设置
MOV41H,A
MOV42H,A
SETBET0
MOVTH0,#0B0H;置初值
MOVTL0,#3CH
SETBTR0
HERE:
JNBTF0,HERE;判断1秒时间是否来到
CLRTF0
LCALLIT0P;调用时间增1子程序
LCALLCHANGE1;调用是否进入设置时间子程序
LCALLCHANGE2;调用是否进入显示日期子程序
LCALLCHANGE3;调用是否进入设置日期子程序
LCALLNAOLIN;调用设置闹铃时间子程序
LCALLWARNING;调用是否警报子程序
LCALLSTOP;调用是否响铃停止
HUI:
LCALLXIANSHI;调用显示时间子程序
SJMPHERE
IT0P:
PUSHPSW;进堆栈
PUSHACC
MOVTH0,#0B0H;重新赋初值
MOVTL0,#3CH
DJNZ20H,RETURN;循环次数不为0则返回
MOV20H,#28H;设置中断次数
MOVA,#01H;准备增1
ADDA,42H;让秒单元增1
MOV42H,A;秒增1
CJNEA,#60,RETURN;秒不超过60则返回
MOV42H,#00H;把秒单元清零
MOVA,#01H;准备增1
ADDA,41H;让分单元增1
MOV41H,A;分增1
CJNEA,#60,RETURN;分不超过60则返回
MOV41H,#00H;分单位清零
MOVA,#01H;换准备增1
ADDA,40H;让时单元增1
MOV40H,A;时增1
CJNEA,#24,RETURN;时不才超过60则返回
MOV40H,#00H;时清零
MOVA,67H;准备让天单元增1
INCA
MOV67H,A;天增1
AJMPRETURN
RETURN:
POPACC;出堆栈
POPPSW
RET
XIANSHI:
MOVA,42H;显示时间子程序
MOVB,#10;赋值除数10给B
DIVAB
MOV77H,B;将秒的个位存入77H单元
MOV78H,A;将秒的十位存入78H单元
MOVA,41H;准备分离分单元的个位和十位
MOVB,#10;赋值除数10
DIVAB
MOV07AH,B;将分的个位存入7AH单元
MOV07BH,A;将分的十位存入7BH单元
MOVA,40H;准备分离时单元的个位和十位
MOVB,#10;赋值除数10
DIVAB
MOV7DH,B;将时的个位存入7DH单元
MOV7EH,A;将时的十位存入7EH单元
MOV79H,#12;赋值12给剩下的数码管让它显示"-"
MOV7CH,#12
LP2:
MOVR0,#77H;用数码管显示77H~7EH里的数值子程序
MOVR3,#01H
LP3:
MOVA,@R0
MOVDPTR,#TBL
MOVCA,@A+DPTR
MOVDPTR,#0FE00H
MOVX@DPTR,A;送位码
MOVDPTR,#0FE01H
MOVA,R3
MOVX@DPTR,A;送段码
INCR0
MOVA,R3
RLA
MOVR3,A
LCALLDELAY
JNBACC.0,LP3;控制循环让数码管都显示一遍
RET
CHANGE1:
MOVDPTR,#0FD02H;判断是否进入设置时间子程序
MOVXA,@DPTR
MOVDPTR,#0FD00H
MOVX@DPTR,A
FD1:
JNBACC.0,FD0;当拨码盘的最低为1时进入设置,否则跳出
MOVDPTR,#0FD01H
MOVXA,@DPTR
JNBACC.2,MIAO;当按键的第3位按下时进入秒增1子程序
JNBACC.1,FEN;当按键的第2位按下时进入分增1子程序
JNBACC.0,SHI;当按键的第1位按下时进入时增1子程序
LCALLXIANSHI;调用显示时间子程序
SJMPCHANGE1;返回判断是否进入时间设置子程序
FD0:
RET
CHANGE2:
MOVDPTR,#0FD02H;判断是否进入显示日期子程序
MOVXA,@DPTR
MOVDPTR,#0FD00H
MOVX@DPTR,A
FD2:
JNBACC.1,FD0;当拨码盘第2位为1时进入显示日期
LCALLRIQI;进入显示日期子程序
SJMPCHANGE2
CHANGE3:
MOVDPTR,#0FD02H;判断是否进入设置日期子程序
MOVXA,@DPTR
MOVDPTR,#0FD00H
MOVX@DPTR,A
FD7:
JNBACC.2,FD0;当拨码盘第3位为1时进入设置日期子程序
MOVDPTR,#0FD01H
MOVXA,@DPTR
JNBACC.5,TIAN;当按键第6位按下时天数增1
JNBACC.4,YUE;当按键第5位按下是月份增1
JNBACC.3,NIAN;当按键第4位按下时年份增1
LCALLRIQI;显示日期
SJMPCHANGE3
MIAO:
LCALLDELAY1;进入设置秒增1的子程序
MOVA,42H
INCA
MOV42H,A;秒增1
CJNEA,#60,FD0;判断是否退出
CLRA
MOV42H,A;把分单元清零
RET
NIAN:
LCALLNIAN1
FEN:
LCALLDELAY1;进入设置分增1的子程序
MOVA,41H
INCA
MOV41H,A;分增1
CJNEA,#60,FD0;判断是否退出
CLRA
MOV41H,A;把分单元清零
RET
SHI:
LCALLDELAY1;进入设置时增1的子程序
MOVA,40H
INCA
MOV40H,A;让时单元增1
CJNEA,#24,FD0;判断是否退出
CLRA
MOV40H,A;时单元清零
RET
TIAN:
LCALLDELAY1;进入设置天数增1的子程序
MOVA,68H
CJNEA,#3,ED0;判断当前月份以便进入不同设置
LCALLED1
RET
ED0:
MOVA,67H
INCA
MOV67H,A;天增1
CJNEA,#0AH,FD0;判断是否退出
CLRA
MOV67H,A;天个位清零
MOVA,68H
INCA
MOV68H,A;天十位增1
RET
ED1:
MOVA,67H
INCA
MOV67H,A;天增1
CJNEA,#2,FD10;判断是否退出
ED2:
MOV67H,#1;将天的个位置1
MOV68H,#0;天的十位清零
FD10:
RET
YUE:
LCALLDELAY1;进入设置月份增1的子程序
MOVA,6AH
CJNEA,#1,ED3;判断当前月份是否大于10一便进入不同设置
LCALLED4;进入相应设置
RET
ED3:
MOVA,69H
INCA
MOV69H,A;月份的个位增1
CJNEA,#0AH,ED5;比较判断是否月份是否大于10,大于则继续往下执行
CLRA
MOV69H,A;清零月份个位
MOVA,6AH
INCA
MOV6AH,A;月份十位增1
RET
ED4:
MOVA,69H
INCA
MOV69H,A;月份各位增1
CJNEA,#3,ED5;比较判断是否退出
MOV6AH,#0;月份十位清零
MOV69H,#1;月份个位置1
RET
ED5:
RET
NIAN1:
LCALLDELAY1;进入设置年增1的子程序
MOVA,6BH
INCA
MOV6BH,A;年的个位增1
CJNEA,#0AH,ED5;判断是否退出
CLRA
MOV6BH,A;清零年的个位
MOVA,6CH
INCA
MOV6CH,A;年的十位增1
CJNEA,#0AH,ED5;判断是否退出
CLRA
MOV6CH,A;清零年的十位
MOVA,6DH
INCA
MOV6DH,A;年的白位增1
CJNEA,#0AH,ED5;判断是否退出
CLRA
MOV6DH,A;清零年的百位
MOVA,6EH
INCA
MOV6EH,A;年的千位增1
RET
RIQI:
MOVA,68H;进入显示日期子程序
CJNEA,#3,FD4;判断当前天数十位以便进入不同显示
LCALLFD3;进入不同显示
FD4:
MOVA,6AH
CJNEA,#1,FD5;判断当前月份的十位以便进入不同显示
MOVA,69H
CJNEA,#3,FD5;判断当前月份的个位,以便进入不同显示
LCALLFD6
FD5:
MOVA,67H
CJNEA,#0AH,ES1;判断是否退出
CLRA
MOV67H,A;清零天的个位
MOVA,68H
INCA
FD3:
MOV68H,A;增1天的十位
CJNEA,#3,ES1;判断是否退出
MOVA,67H
CJNEA,#2,ES1;判断是否退出
CLRA
MOV67H,#1;把天数的个位置1
MOV68H,#0;把天数的十位置0
MOVA,69H
INCA
MOV69H,A;月份增1
CJNEA,#0AH,ES1;判断是否退出
MOV69H,#0;清零月份的是个位
MOV68H,#0;清零天数的十位
MOV67H,#1;置1天数的个位
MOVA,6AH
INCA
MOV6AH,A;月份的十位增1
FD6:
MOV69H,#1;月份的个位置1
MOV6AH,#0;月份的十位清零
MOV68H,#0;天数的十位清零
MOV67H,#1;天数的个位置1
MOVA,6BH
INCA
MOV6BH,A;年份的个位增1
CJNEA,0AH,ES1;判断是否退出
CLRA
MOV6BH,A;清零年的个位
MOVA,6CH
INCA
MOV6CH,A;年的十位增1
CJNEA,#0AH,ES1;判断是否退出
CLRA
MOV6CH,A;清零年的十位
MOVA,6DH
INCA
MOV6DH,A;年的百位增1
CJNEA,#0AH,ES1;判断是否退出
CLRA
MOV6DH,A;清零年的百位
MOVA,6EH
INCA
MOV6EH,A;年的千位增1
ES1:
LCALLXIAOYUE;调用月份天数调整子程序
MOV7EH,6EH;准备显示日期
MOV7DH,6DH
MOV7CH,6CH
MOV7BH,6BH
MOV7AH,6AH
MOV79H,69H
MOV78H,68H
MOV77H,67H
LCALLLP2
RET
XIAOYUE:
MOVA,6AH;进入月份天数调整子程序
CJNEA,#1,CS0;判断当前月份的十位以便进入不同调整
MOVA,69H
CJNEA,#1,CS4;判断当前月份的个位以便进入不同调整
MOVA,68H
CJNEA,#3,CS0;判断当前天数的十位以便进入不同调整
MOVA,67H
CJNEA,#1,CS0;判断当前天数的十位以便进入不同调整
MOV6AH,#1;日期调整
MOV69H,#2
MOV68H,#0
MOV67H,#1
RET
CS0:
MOVA,69H
CJNEA,#9,CS1;判断当前月份的各位以便进入不同调整
MOVA,68H
CJNEA,#3,CS1;判断当前天数的十位以便进入不同调整
MOVA,67H
CJNEA,#1,CS1;判断当前天数的个位以便进入不同调整
MOV6AH,#1H
MOV69H,#0;日期调整
MOV68H,#0
MOV67H,#1
RET
CS1:
MOVA,69H
CJNEA,#6,CS2;判断当前月份的个位以便进入不同调整
MOVA,68H
CJNEA,#3,CS2;判断当前天数的十位以便进入不同调整
MOVA,67H
CJNEA,#1,CS2;判断当前天数的个位以便进入不同调整
MOV69H,#7;日期调整
MOV68H,#0
MOV67H,#1
RET
CS2:
MOVA,69H
CJNEA,#4,CS3;判断当前月份个位以便进入不同调整
MOVA,68H
CJNEA,#3,CS3;判断当前天数的十位以便进入不同调整
MOVA,67H
CJNEA,#1,CS3;判断当前天数的个位以便进入不同调整
MOV69H,#5;日期调整
MOV68H,#0
MOV67H,#1
RET
CS3:
MOVA,69H
CJNEA,#2,CS4;判断当前月份的个位以便进入不同调整
MOVA,68H
CJNEA,#2,CS4;判断当前天数的十位以便进入不同调整
MOVA,67H
CJNEA,#9,CS4;判断当前天数的个位以便进入不同调整
MOV69H,#3;日期调整
MOV68H,#0
MOV67H,#1
CS4:
RET
NAOLIN:
MOVDPTR,#0FD02H;判断是否进入闹铃时间设置子程序
MOVXA,@DPTR
MOVDPTR,#0FD00H
MOVX@DPTR,A
JNBACC.3,ED7;当拨码盘第4位按下时进入闹铃时间设置
MOVDPTR,#0FD01H
MOVXA,@DPTR
JNBACC.2,SEC;当按键第3位按下时秒增1
JNBACC.1,MIN;当按键第2位按下时分增1
JNBACC.0,HOUR;当按键第1位按下时时增1
MOVA,45H
MOVB,#10;赋值除数10分离闹铃时间的秒
DIVAB
MOV77H,B;将秒的个位存入77H单元
MOV78H,A;将秒的十位存入78H单元
MOVA,44H
MOVB,#10;赋值除数10分离闹铃时间的分
DIVAB
MOV7AH,B;将分的个位存入7AH单元
MOV7BH,A;将分的十位存入7BH单元
MOVA,43H
MOVB,#10;赋值除数10分离闹铃时间的时
DIVAB
MOV7DH,B;将时的个位存入7DH单元
MOV7EH,A;将时的十位存入7EH单元
MOV7CH,#12;熄灭其他数码管
MOV79H,#12
LCALLLP2
SJMPNAOLIN
ED7:
RET
SEC:
LCALLDELAY1;进入调整闹铃时间秒增1子程序
MOVA,45H
CJNEA,#59,ED16
MOV45H,#0
SJMPRETU13
ED16:
INCA
MOV45H,A
RETU13:
RET
MIN:
LCALLDELAY1;进入调整闹铃时间分增1子程序
MOVA,44H
CJNEA,#59,ED6
MOV44H,#0
SJMPRETU3
ED6:
INCA
MOV44H,A
RETU3:
RET
HOUR:
LCALLDELAY1;进入调整闹铃时间时增1子程序
MOVA,43H
CJNEA,#23,LOOP4
MOV43H,#0
SJMPRETU4
LOOP4:
INCA
MOV43H,A
RETU4:
RET
WARNING:
MOVDPTR,#0FD02H;进入是否闹铃子程序
MOVXA,@DPTR
MOVDPTR,#0FD00H
MOVX@DPTR,A
JBACC.5,ED9
MOVA,40H
CJNEA,43H,ED8;时相等时继续往下执行
MOVA,41H
CJNEA,44H,ED8;分相等是继续往下执行
MOVA,42H
CJNEA,45H,ED8;秒相等是继续往下执行
CLRP3.2;响铃
RET
ED9:
SETBP3.2
RET
ED8:
RET
STOP:
MOVDPTR,#0FD02H;进入判断是否停止响铃子程序
MOVXA,@DPTR
MOVDPTR,#0FD00H
MOVX@DPTR,A
JNBACC.5,ED8;拨码盘第6位按下时停止响铃
SETBP3.2
RET
DELAY:
MOVR2,#10
L1:
MOVR4,#100
L2:
DJNZR4,L2
DJNZR2,L1
RET
DELAY1:
MOVR1,#10
D1:
LCALLLP2
MOVR2,#1
D2:
MOVR6,#1
D3:
DJNZR6,D3
DJNZR2,D2
DJNZR1,D1
RET
DEL:
MOVR1,#10
LD0:
MOVR2,#150
LD1:
MOVR6,#200
LD2:
DJNZR6,LD2
DJNZR2,LD1
DJNZR1,LD0`
RET
TBL:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H
DB83H,0BFH,0FFH,086H,08EH,08CH,0C1H,0CEH,091H,089H,0C7H,0FFH
END
五、调试记录及调试结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 数字 时钟 设计 报告