数字钟单片机报告.docx

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

数字钟单片机报告.docx

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

数字钟单片机报告.docx

数字钟单片机报告

武汉大学电子信息学院

电子系统综合设计课程论文

数字钟

专业:

年级:

作者:

指导教师:

 

2012年6月28日

目录

1作品的背景与意义1

2功能指标设计1

3作品方案设计1

3.1总体方案的选择1

3.1.1方案一1

3.2控制方案比较1

3.3显示方案比较1

3.4...2

4硬件设计2

4.1显示模块电路图2

4.2...3

5软件设计4

5.1主程序流程图4

5.2显示模块流程图4

5.3...5

6系统测试5

6.1测试环境5

6.2测试步骤5

6.3测试数据5

6.4测试结论5

参考文献5

附录1系统电路图7

附录2系统软件代码7

附录3系统器件清单7

 

·1作品的背景与意义

20世纪末,电子技术获得飞速发展,在其推动下,现代电子产品几乎渗透了社会各个领域,有力的推动了社会生产力的发展和社会信息化程度的提高,同时也使现代产品的性能进一步提高,产品更新换代的节奏也越来越快。

时间对人们来说总是那么宝贵,工作的忙碌性和复杂性容易使人们忘记当前的时间,忘记了要做的事!

当事情不是很重要的时候,这种遗忘无伤大雅。

但是,一旦重要的事情,一时的耽误可能酿成大祸。

目前,单片机正朝着高性能和多品种方向发展是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方向发展。

单片机应用的根本意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。

从前必须有模拟电路或数字电路实现的大部分功能,现在已能用单片机软件来实现了。

这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。

单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此广泛用于个人、家庭、车站、码头、办公室等场所,成为人们日常生活中不可少的必需品。

由于数字集成电路的发展和石英晶体震

荡器的广泛应用,使数字钟的精度远远超过老式仪表,钟表的数字化给人们的生产生活带来了极大的方便,而且大大的扩展了钟表原先的报时功能。

诸如定时报警、按时自动打铃、时间程序自动控制、定时广播、自动启闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电器的自动启动等。

所有这些,都是以数字钟表数字化为基础的。

因此,研究数字钟及其扩展应用有着非常现实的意义。

基于数字钟在人们生活中的重要性和广泛应用以及目前学的单片机、电力电子等技术,我们组决定做一个实用的数字钟!

2功能指标设计

准确计时,以数字形式显示时、分、秒的时间,小时计时要求为“24翻1”,分和秒的计时要求为60进位,要有校正时间电路,可以分别对时及分进行单独校时,使其校正到标准时间。

3作品方案设计

·3.1总体方案的选择

3.1.1方案一

本方案完全用软件仿真实现数字时钟。

原理为:

在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。

利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。

该方案具有硬件电路简单的特点。

但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。

而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。

系统由AT89C51、LED数码管、按键、发光二极管等部分构成,能实现时间的调整、定时时间的设定,输出等功能。

系统的功能选择由SB0、SB1、SB2、SB3、SB4完成。

其中SB0为时间校对,定时器调整功能键,按SB0进入调整状态。

SB1为功能切换键。

第一轮按动SB1依次进入一路、二路、三路定时时间设置提示程序,按SB3进入各路定时调整状态。

定时时间到,二极管发亮。

到了关断时间后灭掉。

如果不进入继续按SB1键,依次进入时间¡年¡位校对、¡月¡位校对、¡日¡位校对、¡时¡位校对、¡分¡位校对、¡秒¡位校对状态。

不管是进入那种状态,按动SB2皆可以使被调整位进行不进位增量加1变化。

各预置量设置完成后,系统将所有的设置存入RAM中,按SB1退出调整状态。

上电后,系统自动进入计时状态,起始于¡00¡时¡00¡分。

SB4为年月日显示转换键,可使原来显示时分秒转换显示年月日。

·3.3.2方案二

本方案采用Dallas公司的专用时钟芯片DS12887A。

该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。

为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。

当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。

而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。

基于硬件的考虑,本设计采用方案一完成数字时钟的功能。

3.2控制方案

先将执行设备开启的时间和关闭时间置入RAM某一单元,在计时主程序当中执行几条比较指令,如果当前计时时间与执行设备的设定开启时间相等,就执行一条CLR指令,将对应的那路P3置为高电位,开启;如果当前计时时间与执行设备设定的关闭时间相等,就执行SETB对应的P3置低电位,二极管截止,。

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

3.3显示方案

电原理图见附图1。

由6个共阴极的数码管组成时、分、秒的显示。

P0口的8条数据线P0.0至P0.7分别与两个CD4511译码的ABCD口相接,P2口的P2.0至P2.2分别通过电阻R10至R13与VT1至VT3的基极相连接。

这样通过P0口送出一个存储单元的高位、低位BCD显示代码,通过P2口送出扫描选通代码轮流点亮LED1至LED6,就会将要显示的数据在数码管中显示出来。

从P0口输出的代码是BCD码,从P2口输出的就是位选码。

这是扫描显示原理。

·3.4连击功能的实现

按下某键时,对应的功能键解释程序得到执行,如操作者没有释放按键,则对应的功能会反复执行,好象连续执行,在这里我们采用软件延时250ms,当按键没释放则执行下一条对应程序。

利用连击功能,能实现快速调时操作。

·3.5数据与代码转换

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

但P0口的输出的数据是要BCD码,各存储单元存储的是二进制数,也就是和要显示出的字符表达的含义是不一致的。

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

具体转换过程如下:

我们先将要显示的数据装入累加器A中,再将A中的数据转换成高低两位的BCD码,再放回A中,然后将A中的值输出。

如:

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

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

A中BCD码,高位四位代表¡4¡低四位代表¡5¡同时送给两个译码器中,译码后¡45¡字就在两个LED中显示出来。

·3.6计时功能的实现与中断服务程序

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

计数器T0打开后,进入计时,满100毫秒后,重装定时。

中断一次,满一秒后秒进位,满60秒后即为1分钟,分钟单元进位,60分到了后,时单元进位,24小时满后,天单元进位。

这样然后根

据进率,得到年、月、日、时、分、秒存储单元的值,并经译码后,通过扫描程序送LE

D中显示出来,实现时钟计时功能。

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

进入中断服务程序以后,执行PUSHPSW和PUSHA将程序状态寄存器PSW的内容和累加器A中的数据保存起来,这便是所谓的¡保护现场¡.以保护现场和恢复现场时存取关键数据的存储区叫做堆栈。

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

4硬件设计

4.1显示模块电路图

5软件设计

5.1主程序流程图

5.2定时中断程序流程图

5.3调时功能流程图

 

附录1系统电路图

 

附录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:

MOVA,YEAR

CJNEA,YEAR_11,LOOP;年比较

MOVA,MON

CJNEA,MON_11,LOOP

MOVA,DAY

CJNEA,DAY_11,LOOP

MOVA,HOUR

CJNEA,HOUR_11,LOOP

MOVA,MIN

CJNEA,MIN_11,LOOP

CPLP3.0

LJMPLOOP

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

SHOW:

PUSHPSW

pushACC

PUSHB

PUSH01H

PUSH02H

PUSH03H

PUSH04H

MOVR2,#0FFH;中断扫描次数

TURN:

MOVR1,#33H

MOVR4,#01H

MOVR3,#03H

NEXT_1:

MOVA,@R1

MOVB,#10

DIVAB

SWAPA

ORLA,B

MOVP0,A

MOVP2,R4

INCR1

RLA

MOVR4,A

LCALLDE5SM

DJNZR3,NEXT_1

DJNZR2,TURN;反复显示一定时间后返回

POP04H

POP03H

POP02H

POP01H

POPB

POPACC

POPPSW

RETI

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

TIME:

PUSHPSW

PUSHACC

PUSHB

PUSH06H

MOVTH0,#3CH;重装计数

MOVTL0,#0BH;

DJNZ20H,OUT;转到中断跳出pop程序

MOV20H,#0AH;重装:

100*10=1000

;-----进位程序

INCSEC

MOVR6,SEC;

CJNER6,#60,OUT;比较

MOVSEC,#00;

INCMIN

MOVR6,MIN

CJNER6,#60,OUT

MOVMIN,#00

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

POPB

POPACC

POPPSW

RETI

MON_22:

MOVR5,MON

CJNER5,#2,MON_33;是否2月、不是转3月

MOVA,YEAR;判断是否瑞年

MOVB,#4

DIVAB

MOVA,B

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

MOVR5,DAY

CJNER5,#30,OUT;如是瑞年、判断是否到29天

INCMON

MOVDAY,#1

LJMPOUT

OUT_1:

MOVR5,DAY

CJNER5,#29,OUT;平年二月判断

INCMON

MOVDAY,#1

LJMPOUT

MON_33:

MOVR5,MON

CJNER5,#3,MON_44

MOVR5,DAY

CJNER5,#32,OUT

INCMON

MOVDAY,#1

LJMPOUT

MON_44:

MOVR5,MON

CJNER5,#4,MON_55

MOVR5,DAY

CJNER5,#31,OUT

INCMON

MOVDAY,#1

LJMPOUT

MON_55:

MOVR5,MON

CJNER5,#5,MON_66

MOVR5,DAY

CJNER5,#32,OUT

INCMON

MOVDAY,#1

LJMPOUT

MON_66:

MOVR5,MON

CJNER5,#6,MON_77

MOVR5,DAY

CJNER5,#31,OUT

INCMON

MOVDAY,#1

LJMPOUT

MON_77:

MOVR5,MON

CJNER5,#7,MON_88

MOVR5,DAY

CJNER5,#32,L1

INCMON

MOVDAY,#1

L1:

LJMPOUT

MON_88:

MOVR5,MON

CJNER5,#8,MON_99

MOVR5,DAY

CJNER5,#32,L2

INCMON

MOVDAY,#1

L2:

LJMPOUT

MON_99:

MOVR5,MON

CJNER5,#9,MON_00

MOVR5,DAY

CJNER5,#31,L3

INCMON

MOVDAY,#1

L3:

LJMPOUT

MON_00:

MOVR5,MON

CJNER5,#10,MON_AA

MOVR5,DAY

CJNER5,#32,L4

INCMON

MOVDAY,#1

L4:

LJMPOUT

MON_AA:

MOVR5,MON

CJNER5,#11,MON_BB

MOVR5,DAY

CJNER5,#31,L5

INCMON

MOVDAY,#1

L5:

LJMPOUT

MON_BB:

MOVR5,DAY

CJNER5,#32,L6

INCYEAR

MOVMON,#1

MOVDAY,#1

L6:

LJMPOUT

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

SB3_2:

LJMPSHOW_2;二路没编返回

SB3_3:

LJMPSHOW_3;三路没编返回

SB3_1:

MOVA,YEAR_1;调时年单元

MOVB,#10

DIVAB

SWAPA

ORLA,B

MOVP0,A

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;调时月单元显示

MOVB,#10

DIVAB

SWAPA

ORLA,B

MOVP0,A

MOVP2,#02H

LCALLREAD

LCALLDE250SM

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;调时日单元显示提示

MOVB,#10

DIVAB

SWAPA

ORLA,B

MOVP0,A

MOVP2,#04H

LCALLREAD

LCALLDE250SM

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;调时时单元显示提示

MOVB,#10

DIVAB

SWAPA

ORLA,B

MOVP0,A

MOVP2,#01H

LCALLREAD

LCALLDE250SM

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;调时分单元、并显示提示

MOVB,#10

DIVAB

SWAPA

ORLA,B

MOVP0,A

MOVP2,#02H

LCALLREAD

LCALLDE250SM

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;调时年单元

MOVB,#10

DIVAB

SWAPA

ORLA,B

MOVP0,A

MOVP2,#01H

LCALLREAD

LCALLDE250SM

CJNEA,01H,OFF_CH

CJNEA,#0FBH,KEY2_F7;按SB2转年调整

LJMPMON_OFF;按SB1往下调月单元

KEY2_F7:

CJNEA,#0FDH,OFF_CH

INCYEAR_11;1路年单元加1

MOVR5,YEAR_11

CJNER5,#09,OFF_CH;益出

MOVYEAR_11,#00H

AJMPOFF_CH;

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

MON_OFF:

MOVA,MON_11;调时月单元显示

MOVB,#10

DIVAB

SWAPA

ORLA,B

MOVP0,A

MOVP2,#02H

LCALLREAD

LCALLDE250SM

CJN

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

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

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

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