课程设计基于51单片机的数字时钟Word格式.docx

上传人:b****2 文档编号:3640197 上传时间:2023-05-02 格式:DOCX 页数:29 大小:125.09KB
下载 相关 举报
课程设计基于51单片机的数字时钟Word格式.docx_第1页
第1页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第2页
第2页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第3页
第3页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第4页
第4页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第5页
第5页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第6页
第6页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第7页
第7页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第8页
第8页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第9页
第9页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第10页
第10页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第11页
第11页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第12页
第12页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第13页
第13页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第14页
第14页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第15页
第15页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第16页
第16页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第17页
第17页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第18页
第18页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第19页
第19页 / 共29页
课程设计基于51单片机的数字时钟Word格式.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

课程设计基于51单片机的数字时钟Word格式.docx

《课程设计基于51单片机的数字时钟Word格式.docx》由会员分享,可在线阅读,更多相关《课程设计基于51单片机的数字时钟Word格式.docx(29页珍藏版)》请在冰点文库上搜索。

课程设计基于51单片机的数字时钟Word格式.docx

由前述可知,从P2口输出位选码,从P0口输出段选码,LED就会显示出数字来。

但P0

口的输出的数据是要BCD码,各存储单元存储的是二进制数,也就是和要显示出的字符表达

的含义是不一致的。

可见,将要显示的存储单元的数据直接送到P0口去驱动LED数码管显示是不能正确表达的,必须在系统内部将要显示的数据经过BCD码行转换后,将各个单元数据的段选代码送入P0口,给CD4511译码后去驱动数码管显示。

具体转换过程如下:

我们先将要显示的数据装入累加器A中,再将A中的数据转换成高低两位的BCD码,

再放回A中,然后将A中的值输出。

如:

有一个单元存储了45这样一位数,则需转换成四

位的BCD码:

(0100)(0101)然后放入A中。

A中BCD码,高位四位代表¡

低四位代

表¡

同时送给两个译码器中,译码后¡

45¡

字就在两个LED中显示出来。

2.计时功能的实现与中断服务程序

时间的运行依靠定时中断子程序对时钟单元数值进位调整来实现的。

计数器T0打开后,

进入计时,满100毫秒后,重装定时。

中断一次,满一秒后秒进位,满60秒后即为1分钟,

分钟单元进位,60分到了后,时单元进位,24小时满后,天单元进位。

这样然后根据进率,

得到年、月、日、时、分、秒存储单元的值,并经译码后,通过扫描程序送LED中显示出来,实现时钟计时功能。

累加是用指令INC来实现的。

进入中断服务程序以后,执行PUSHPSW和PUSHA将程序状态寄存器PSW的内容和累加器A中的数据保存起来,这便是所谓的¡

保护现场¡

.以保护现场和恢复现场时存取关键数据的存储区叫做堆栈。

在软件的控制之下,堆栈可在片内RAM中的任一区间设定,而堆栈的数据存取与一般的RAM存取又有区别,对它的操作,要遵循¡

后进先出¡

的原则。

3时间控制功能与比较指令

系统的另一功能就是实现对执行设备的定时开关控制,其主要控制思想是这样的:

将执行设备开启的时间和关闭时间置入RAM某一单元,在计时主程序当中执行几条比较指

令,如果当前计时时间与执行设备的设定开启时间相等,就执行一条CLR指令,将对应的

那路P3置为高电位,开启;

如果当前计时时间与执行设备设定的关闭时间相等,就执行SETB

对应的P3置低电位,二极管截止,。

实现此控制功能用到的比较指令为CJNEA,#direct,rel,其转移条件是累加器A中的值与立即数不等则转移。

参考文献

1、谢自美,《电子线路设计、实验、测试》武汉:

华中理工大学出版社,2000

2、何书森、何华斌《实用数字电路原理与设计速成》福州:

福建科学技术出版社,2000.6

3、白驹衍,《单片计算机及应用》北京:

电子工业出版社,1999.2

五:

程序

SECEQU32H;

秒即时时间\伪指令

MINEQU31H;

HOUREQU30H;

DAYEQU35H;

MONEQU34H;

YEAREQU33H;

MIN_1EQU41H;

分定时器1路、开存储单元

HOUR_1EQU42H;

DAY_1EQU43H;

MON_1EQU44H;

YEAR_1EQU45H;

MIN_11EQU40H;

分定时器1路、关存储单元

HOUR_11EQU46H;

DAY_11EQU47H;

MON_11EQU48H;

YEAR_11EQU49H;

;

***********************

ORG0000H

ljmpMAIN

ORG0003H;

中断转换显示年月日、INT0(SB4键)

LJMPSHOW

ORG000BH;

计数中断T0、方式1

LJMPTIME

ORG0013H

LJMPCHANGE;

调整时间、定时、INT1(SB0键)

------主程序

ORG0030H

MAIN:

--------初始化付值

MOVYEAR,#02

MOVMON,#05

MOVDAY,#01

MOVHOUR,#00

MOVMIN,#00

MOVSEC,#00

CLR40H;

定时单元1路清零

CLR41H

CLR42H

CLR43H

CLR44H

CLR45H

CLR46H

CLR47H

CLR48H

CLR49H

-------开中断

MOVTMOD,#01H;

计数、模式1、T0

MOVTL0,#0B0H;

100SM计数定时

MOVTH0,#3CH;

clrp3.0

MOV20H,#0AH;

10次*100SM

SETBPT0;

T0为最高级

SETBTR0;

允许计数

SETBET0;

允许T0中断

SETBEX0;

允许INT0中断

SETBEX1;

允许INT1中断

SETBEA;

开总中断

------显示、定时器启动判断

LOOP:

MOVR1,#30H;

存储单元

MOVR4,#01H;

位选通

MOVR3,#03H;

三组显示

NEXT:

MOVA,@R1;

MOVB,#10;

将存储单元转换成两高低两组的BCD码

DIVAB

SWAPA

ORLA,B

MOVP0,A;

输出

MOVP2,R4

INCR1;

下一单元

MOVA,R4;

RLA;

位移

MOVR4,A

LCALLDE5SM;

延时0.5SM

DJNZR3,NEXT;

全扫描显示一偏

------判断定时输出(只编写了一路)

CJNER7,#88H,LOOP;

是8则开,否则、定时已关、转

---------开

MOVA,YEAR

CJNEA,YEAR_1,LOOP_1;

年比较,不等转关

MOVA,MON

CJNEA,MON_1,LOOP_1

MOVA,DAY

CJNEA,DAY_1,LOOP_1

MOVA,HOUR

CJNEA,HOUR_1,LOOP_1

MOVA,MIN

CJNEA,MIN_1,LOOP_1

CPLP3.0

---------关

LOOP_1:

CJNEA,YEAR_11,LOOP;

年比较

CJNEA,MON_11,LOOP

CJNEA,DAY_11,LOOP

CJNEA,HOUR_11,LOOP

CJNEA,MIN_11,LOOP

LJMPLOOP

-----年月日显示中断子程序

SHOW:

PUSHPSW

pushACC

PUSHB

PUSH01H

PUSH02H

PUSH03H

PUSH04H

MOVR2,#0FFH;

中断扫描次数

TURN:

MOVR1,#33H

MOVR4,#01H

MOVR3,#03H

NEXT_1:

MOVA,@R1

MOVB,#10

MOVP0,A

INCR1

RLA

MOVR4,A

LCALLDE5SM

DJNZR3,NEXT_1

DJNZR2,TURN;

反复显示一定时间后返回

POP04H

POP03H

POP02H

POP01H

POPB

POPACC

POPPSW

RETI

-----计数中断服务子程序

TIME:

PUSHACC

PUSH06H

MOVTH0,#3CH;

重装计数

MOVTL0,#0BH;

DJNZ20H,OUT;

转到中断跳出pop程序

重装:

100*10=1000

-----进位程序

INCSEC

MOVR6,SEC;

CJNER6,#60,OUT;

比较

MOVSEC,#00;

INCMIN

MOVR6,MIN

CJNER6,#60,OUT

INCHOUR

MOVR6,HOUR

CJNER6,#25,OUT

MOVHOUR,#00

INCDAY

MOVR5,MON

CJNER5,#1,MON_22;

是否1月、不是转2月

MOVR5,DAY

CJNER5,#32,OUT;

本月是否益出

INCMON

MOVDAY,#1

LJMPOUT

OUT:

POP06H

MON_22:

CJNER5,#2,MON_33;

是否2月、不是转3月

MOVA,YEAR;

判断是否瑞年

MOVB,#4

MOVA,B

JNZOUT_1;

不是则转(A不为零则转)

MOVR5,DAY

CJNER5,#30,OUT;

如是瑞年、判断是否到29天

MOVDAY,#1

OUT_1:

CJNER5,#29,OUT;

平年二月判断

MOVDAY,#1

MON_33:

CJNER5,#3,MON_44

CJNER5,#32,OUT

MON_44:

CJNER5,#4,MON_55

CJNER5,#31,OUT

MON_55:

MOVR5,MON

CJNER5,#5,MON_66

MOVR5,DAY

CJNER5,#32,OUT

MON_66:

CJNER5,#6,MON_77

MON_77:

CJNER5,#7,MON_88

CJNER5,#32,L1

L1:

LJMPOUT

MON_88:

CJNER5,#8,MON_99

CJNER5,#32,L2

L2:

MON_99:

CJNER5,#9,MON_00

CJNER5,#31,L3

L3:

MON_00:

CJNER5,#10,MON_AA

CJNER5,#32,L4

L4:

MON_AA:

CJNER5,#11,MON_BB

CJNER5,#31,L5

L5:

MON_BB:

CJNER5,#32,L6

INCYEAR

MOVMON,#1

L6:

-------按SB2\定时器年单元加1子程序

SB3_2:

LJMPSHOW_2;

二路没编返回

SB3_3:

LJMPSHOW_3;

三路没编返回

SB3_1:

MOVA,YEAR_1;

调时年单元

MOVB,#10

ORLA,B

MOVP2,#01H

LCALLREAD

LCALLDE250SM

CJNEA,01H,SB3_1

CJNEA,#0FBH,KEY2_7;

按SB2转年调整

LJMPMON_111;

按SB1往下调月单元

KEY2_7:

CJNEA,#0FDH,SB3_1

INCYEAR_1;

1路年单元加1

MOVR5,YEAR_1

CJNER5,#09,SB3_1;

益出

MOVYEAR_1,#00H

AJMPSB3_1;

-------月单元加1子程序

MON_111:

MOVA,MON_1;

调时月单元显示

MOVP2,#02H

CJNEA,01H,MON_111

CJNEA,#0FBH,KEY2_8;

按SB2转月调整

LJMPDAY_111

KEY2_8:

CJNEA,#0FDH,MON_111

INCMON_1;

1路月单元加1

MOVR5,MON_1

CJNER5,#13,MON_111;

MOVMON_1,#01H

AJMPMON_111;

转到月显

_------日单元加1子程序

DAY_111:

MOVA,DAY_1;

调时日单元显示提示

MOVP2,#04H

CJNEA,01H,DAY_111

CJNEA,#0FBH,KEY2_9;

按SB2转日调整

LJMPHOUR_111

KEY2_9:

CJNEA,#0FDH,DAY_111

INCDAY_1;

1组日单元加1

MOVR5,DAY_1

CJNER5,#32,DAY_111;

MOVDAY_1,#01H

AJMPDAY_111;

转到日显

-------按SB2时单元加1子程序

HOUR_111:

MOVA,HOUR_1;

调时时单元显示提示

CJNEA,01H,HOUR_111

CJNEA,#0FBH,KEY2_10;

按SB2转时调整

LJMPMIN_111

KEY2_10:

CJNEA,#0FDH,HOUR_111

INCHOUR_1

MOVR5,HOUR_1

CJNER5,#24,HOUR_111;

MOVHOUR_1,#00H

AJMPHOUR_111;

转到时显

-------分单元加1子程序

MIN_111:

MOVA,MIN_1;

调时分单元、并显示提示

CJNEA,01H,MIN_111

CJNEA,#0FBH,KEY2_11;

按SB2转分调整

AJMPOFF_CH;

按SB3往下调定时:

关单元

KEY2_11:

CJNEA,#0FDH,MIN_111

INCMIN_1;

1路分单元加1

MOVR5,MIN_1

CJNER5,#60,MIN_111;

益处

MOVMIN_1,#00H

AJMPMIN_111;

转到分显

年单元调整

OFF_CH:

MOVA,YEAR_11;

CJNEA,01H,OFF_CH

CJNEA,#0FBH,KEY2_F7;

LJMPMON_OFF;

KEY2_F7:

CJNEA,#0FDH,OFF_CH

INCYEAR_11;

MOVR5,YEAR_11

CJNER5,#09,OFF_CH;

MOVYEAR_11,#00H

MON_OFF:

MOVA,MON_11;

CJNEA,01H,MON_OFF

CJNEA,#0FBH,KEY2_F8;

LJMPDAY_OFF

KEY2_F8:

CJNEA,#0FDH,MON_OFF

INCMON_11;

MOVR5,MON_11

CJNER5,#13,MON_OFF;

MOVMON_11,#01H

AJMPMON_OFF;

DAY_OFF:

MOVA,DAY_11;

CJNEA,01H,DAY_OFF

CJNEA,#0FBH,KEY2_F9;

LJMPHOUR_OFF

KEY2_F9:

CJNEA,#0FDH,DAY_OFF

INCDAY_11;

MOVR5,DAY_11

CJNER5,#32,DAY_OFF;

MOVDAY_11,#01H

AJMPDAY_OFF;

HOUR_OFF:

MOVA,HOUR_11;

CJNEA,01H,HOUR_OFF

CJNEA,#0FBH,KEY2_F10;

LJMPMIN_OFF

KEY2_F10:

CJNEA,#0FDH,HOUR_OFF

INCHOUR_11

MOVR5,HOUR_11

CJNER5,#24,HOUR_OFF;

MOVHOUR_11,#00H

AJMPHOUR_OFF;

MIN_OFF:

MOVA,MIN_11;

CJNEA,01H,MIN_OFF

CJNEA,#0FBH,KEY2_F11;

LJMPON_1;

开与关

KEY2_F11:

CJNEA,#0FDH,MIN_OFF

INCMIN_11;

MOVR5,MIN_11

CJNER5,#60,MIN_OFF;

MOVMIN_11,#00H

LJMPMIN_OFF;

-------开、关定时

ON_1:

CJNEA,#0FBH,MIN_OFF

K1:

MOVA,#88H

MOVR7,A

MOVP2,#0FFH;

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2