单片机数字时钟设计报告.docx

上传人:b****2 文档编号:23124834 上传时间:2023-05-08 格式:DOCX 页数:29 大小:581.44KB
下载 相关 举报
单片机数字时钟设计报告.docx_第1页
第1页 / 共29页
单片机数字时钟设计报告.docx_第2页
第2页 / 共29页
单片机数字时钟设计报告.docx_第3页
第3页 / 共29页
单片机数字时钟设计报告.docx_第4页
第4页 / 共29页
单片机数字时钟设计报告.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

单片机数字时钟设计报告.docx

《单片机数字时钟设计报告.docx》由会员分享,可在线阅读,更多相关《单片机数字时钟设计报告.docx(29页珍藏版)》请在冰豆网上搜索。

单片机数字时钟设计报告.docx

单片机数字时钟设计报告

目录

一、实验目的…………………………………………………………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

五、调试记录及调试结果

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1