电子时钟课程设计.docx

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

电子时钟课程设计.docx

《电子时钟课程设计.docx》由会员分享,可在线阅读,更多相关《电子时钟课程设计.docx(22页珍藏版)》请在冰点文库上搜索。

电子时钟课程设计.docx

电子时钟课程设计

 

单片机课程设计

报告

 

题目:

电子时钟

姓名:

学号:

班级:

专业:

学院:

指导教师:

2008年12月25日

 

一、实验要求

1.P1.3接地,设置p1.3行上从左到右4个键依次为:

切换键,校正键,加1键,确定键。

2.切换键的功能:

每按一次切换键显示“月份日期”、“时分”、“分秒”。

如由“12.05”到“14.35”到“34.23"或相反,表示由12月5日切换到“14点35分”再切换到“34分23秒”或相反。

3.校正键的功能:

第1次按下,校月,月份闪烁,通过加1键校正月份。

第2次按下,校日,日期闪烁,通过加1键校正日期。

第3次按下,校时,小时闪烁,通过加1键校正小时数。

第4次按下,校分,分钟闪烁,通过加1键校正分钟数。

第5次按下,校秒,秒钟闪烁,通过加1键校正秒钟数。

4.加1键的功能:

闪烁的内容不进位加1。

校月时,月份显示为1~12,校日时,日期显示为1~31,校时时,小时显示为0~23,校分时,分钟显示为0~59,校秒时,秒显示为0~59。

5.确定键的功能:

校正的内容生效,返回正常显示,在切换状态按下确定键,返回正常显示。

6.开机后从某一特定的时间开始显示,用第2个数码管的小数点以1秒的周期闪烁,切换到日期显示时该小数点不闪烁,其他3个数码管的小数点不亮。

7.按切换键时,始终任然走时。

8.按校正键时,时钟继续走时,按确定键后按新设定的时间继续走时。

二、实验内容

1.编写程序,完成上面要求,利用定时器中断和静态显示,实现电子钟走时和校时。

2.时间或日期显示用四个数码管分别显示时、分(分、秒)或月、天。

显示格式如下:

1

2

1

2

月日

1

2

0

0

时分

3

0

0

0

分秒

三、资源分配

1、44H、43H、42H、41H、40H五个地址单元分别存储秒、分、时、日、月。

2、30H、31H作为缓显区。

3、2FH.0作为校准状态指针。

4、50H存放等键释放除键值。

5、51H存40H按加键时作需加1的地址指针。

6、20H校准对象指针,21H中断次数指针,22H切换指针。

7、P1.4切换键,P1.5校正键,P1.6加键,P1.7确定。

四、编程原理与思路

电路原理图

1、电子时钟正常走时

电子时钟的走时通过中断记时,中断时间到1S时,秒加1,到60S,秒重新记时分加1,分到60,分清0时加1,时到24,时清0天加1,天到31,天清0月加1,月到13,月置1。

有按键则进行按键处理,需显示的数送缓显区调用显示子程序,中断返回,等待下次中断。

2、按键的判断

键的判断放到中断里面处理,人正常按一次键所需时间在100ms左右,中断时间为1/16S,在中断里面判键肯定不会漏键,判键的前提要等键释放,无键或没放键不执行判键程序。

正常的等键释放如:

JNBP1.4$。

在中断里面这中方法行不通,如果你按键时间超过1/16S,当下次中断来临时,程序还在等键处(中断里面),无法执行中断。

此处等键释放用以下几条指令实现MOVA,P1;CJNEA,50H,NEXT0;NEXT0:

MOV50H,A(50H存上次的键码,取P1口,与上次的键码比较,相等则表示没按键或没放键,不相等则有新的按键,并把这次键码存下已便与下次的键码比较)。

校正状态做总线,在此基础上分别判断各按键,2FH.0做校正状态标志,第一次按下校正键,建立校正标志,20H做校正对象指针,20H置0。

校正状态时,每按一次校正键,20H加1,当20H等于5时清0。

校正时数码管闪烁,把前两个数码管看成高位,后两数码管看成低位。

当校月或时时,高位闪烁,校日、分或秒时,低位闪烁,用20H.0、20H.1判断是哪个位闪烁,如:

(20H.0)等与1,表示校正对象是日或分即低位闪烁,20H.2单独用来判断秒的闪烁。

3、加键的处理

加键只在校正状态下起作用,非校正状态下按此键无效。

每按一次加键,对应的值加1。

50H存月的地址,50H加20H的内容为要加1的地址,如:

校时是,按加键,时需加1,即((50H)+(20H))加1,(50H)+(20H)存放的值等于时的地址。

校正时,无进位加1,每按一次加键后,对应的数值加1,当数值加到最大时,则清0,但不进位。

4、切换键的处理

切换键只在非校正状态下起作用,校正状态下按此键无效。

22H作切换指针,第一次按下切换键,显示日期,22H置1,每按一次切换键,22H加1,当22H等于3时清0,用22H的低3位判断显示“日期”、“时和分”或“分和秒”。

正常显示下20H置0即显示“分和秒”。

确定键按下,初始化各指针即可。

5、显示的实现

显示子程序里面有校正位闪烁和秒点闪烁(由于秒已显示出来,故秒点闪烁不再处理)。

数码管是共阳极的,当送#0FF时,数码管灭。

当在校正状态时,确定闪的位置方法与校正位置判断同理,不闪的数码管正常送数,取反F0,当F0等与1时,缓显地址里面的数,当F0等0时,送#0FFH。

 

五、流程图如下:

主函数流程图

开始

 

给堆栈指针赋值

 

初使化显示地址和各标志地址

 

设置中断方式,定时器设初值

 

设置SCON,开中断,

等待中断

 

结束

 

中断程序流程图

开始

记时指针=16?

清0记时指针,调用记时子程序

定时器重赋值,记时指针加1

 

是否校正状态?

等键释放?

N

N

Y

 

是否校正状态?

切换键?

NY

显示标志22H加1

(A)

YNY

确定键?

加键?

无操作

校正键?

N(A)

确定键?

(22H)=3?

校正键?

22H清0

YN

校正指针加1

调用加键子程序

清校正标志和时间日期标志

YYY

建立校正状态标志,校正指针置0

NYN

(22H)=1?

Y

20H.1=1?

N

Y

N

20H.2=1?

分和秒送缓显,调用显示子程序

时和分送缓显,调用显示子程序

日期送缓显,调用显示子程序

Y

 

N

 

中断返回

显示子程序

开始

表首地址给DPTR,清TI

 

校正状态?

取反F0

 

Y

F0=0?

后两数码管闪?

秒闪?

NN

Y

NYY

HHOU分离分别给SBUF

#0FF连送两次给SBUF

HHOU分离分别给SBUF

F0=0?

HMIN分离分别给SBUF

Y

HMIN分离分别给SBUF

#0FF连送两次给SBUF

N

 

中断返回

 

加键子程序

 

开始

(20H)加(51H)值(需加1的地址)存入R0

 

((R0))加1,并DA转换

 

月加1?

天加1?

秒加1?

时加1?

分加1?

 

Y

YYYYY

((R0))=60?

((R0))=60?

((R0))=24?

((R0))=31?

((R0))=13?

NN

 

YYYYY

存分的地址清0

存秒的地址清0

存时的地址清0

存天的地址清0

存月的地址清0

 

中断返回

 

记时子程序

开始

 

秒加1并DA转换

秒=60?

N

Y

秒清0分加1并DA转换

分=60?

N

分清0时加1并DA转换

Y

时=24?

N

时清0天加1并DA转换

Y

 

天=31?

N

Y

天置1月加1并DA转换

月=13?

N

Y

月置1并DA转换

 

中断返回

 

六、运行与调试

1、打开KEIL单片机软件仿真软件,在其上写好上面源程序后,建立工程并进行编译,发现有很多汇编语言语法上面的错误,对这些进行一一改正至完全正确。

2、将电脑与单片机仿真器进行连接,连接成功后,再按照实物原理图将试验箱上的元件进行连接,检查硬件电路的问题。

使其成为完整的电子钟系统。

3、点击运行后,发现走时完全正确,但秒点的闪烁时间间隔有点长,从理论上推应该是初始值没有设好,查看程序,从理论上说是会有一定的误差的,主要是语句的运行。

4、在检查程序的是后必要是可以将T0的值改为一定大使其计数时间缩短,方便检查错误。

保存编译后运行再观察,看原来错误是否得到解决。

5、在检验校时功能时发现有乱码出现,检查程序发现没有很好的控制按键的按与未按,必须加上去抖语句。

6、在调试按键功能时,首先要判断P1.7是否按下,再去抖,再判断P1.7是否按下,来实现分秒独显,在调试判断P1.6,P1.5,若按下拉则看是否能实现分时加1功能,能够则功能实现,否则就的继续调试,检查其相应语句及端口直到功能实现。

七、总结

通过本次设计,使我对单片机的应用有了初步的了解。

在做具体的时钟时,必须全面考虑程序的功能。

在编程时,必须利用板块化编程。

将每一个小的功能实现,再将所有小的功能组合在一起就可以实现一个大的系统功能。

在进行软件和硬件同时设计时,我们必须考虑软硬两方面的原因。

必须先保证硬件没问题时,因为硬件电路可以通过我们已有的电路、模电、数电和信号等知识能快速的找到硬件存在的问题。

再单方面的从软件入手就可以做到有的放矢,事半功倍。

在做一个具体的设计时,必须有扎实的基础和较强的动手能力才能做到游刃有余。

在实际编程过程中会遇到很多不同的错误,有时候是一些很明显很细节的语法错误,这些可以通过编译来查找错误的所在,然而那些并不明显难以查找的隐性错误却真让人头痛,没有办法只好利用断点调试来一步步检查代码中的错误,这样为了找一个错误花费了大量的时间,但是找出错误之后的感觉却是非常“爽”的。

同时我翻阅了大量的书籍,尽管大部分书都只是翻了一部分页码而已,却给了我一个非常有价值的经验。

N7)y__mQ=# 

总之,此次系统设计给我们提供了一个既动手又动脑、自学、独立实践的机会,使我们养成了勤翻阅各种相关资料的习惯,将书本上的理论知识和实际有机地结合起来,锻炼了实际分析问题和解决问题的能力,提高了适应实际、实践编程的能力,为今后的学习和实践打下了良好的基础。

 

附表

YUEEQU40H;月

TIANEQU41H;天

HOUEQU42H;时

MINEQU43H;分

SECEQU44H;秒

HHOUEQU30H;时间缓冲区

HMINEQU31H

ORG0000

LJMPMAIN

ORG000BH

LJMPTT0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;主程序

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ORG0030H

MAIN:

MOVSP,#65H

MOV2FH,#00;校准状态指针

MOV21H,#00;做中断次数指针

MOV50H,#0FFH;处理等键释放

MOV51H,#40H;按加键时,存放要加1的单元

MOV20H,#00;做校准指对象指针

MOV22H,#00;做切换键指针

MOVSCON,#00

MOVTMOD,#01

MOVTL0,#0EEH

MOVTH0,#85H

MOVHOU,#12H

MOVMIN,#25H

MOVSEC,#00

MOVHHOU,#00H;时间缓冲区设初值

MOVHMIN,#00H;时间缓冲区设初值

MOVYUE,#03H

MOVTIAN,#09

SETBET0

SETBTR0

SETBEA

XTIME:

MOVDPTR,#TAB

CLRTI

JNB2FH.0,KK3;判断是否为校正状态

CPLF0

JB20H.0,KK3;判断校正的对象

JB20H.2,KK3

JBF0,KK3

LCALLKK6

LJMPKK2

KK3:

MOVA,HHOU

ANLA,#0F0H

SWAPA

MOVCA,@A+DPTR

MOVSBUF,A

LCALLKK7

MOVA,HHOU

ANLA,#0FH

MOVCA,@A+DPTR

MOVC,21H.3

;ANLC,20H.0;点的闪烁

MOVACC.0,C

MOVSBUF,A

LCALLKK7

KK2:

JB20H.2,PP7;是高电平则秒闪

JNB20H.0,KK4

PP7:

JBF0,KK4

LCALLKK6

LJMPEXIT

KK4:

MOVA,HMIN

ANLA,#0F0H

SWAPA

MOVCA,@A+DPTR

MOVSBUF,A

LCAALKK7

MOVA,HMIN

ANLA,#0FH

MOVCA,@A+DPTR

MOVSBUF,A

LCALLKK7

LJMPEXIT3

EXIT2:

MOVA,#00

MOVSBUF,A

LCALLKK7

MOVSBUF,A

LCALLKK7

EXIT3:

RET

KK7:

JNBTI,$

CLRTI

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;中断处理(有按键处理)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TT0:

MOVTL0,#0EEH

MOVTH0,#85H

INC21H

MOVA,21H

CJNEA,#10H,NEXT1

MOV21H,#00

LCALLCTIME;调用记时子程序

NEXT1:

MOVA,P1;等键释放

CJNEA,50H,NEXT0

JNB2FH.0,NEXT8

LJMPTOP1

NEXT0:

MOV50H,A

JNB2FH.0,NEXT2;是否校正状态

JBP1.4,NEXT3;P1.4做校正键,看是否按下此键

INC20H

MOVA,20H

CJNEA,#05,TOP1

MOV20H,#00

TOP1:

JB20H.1,PP5;是高电平则显示时间

JB20H.2,PP3;是高电平则显示分和秒

OUT1:

LJMPKK1

NEXT3:

LCALLAKEY;调用是否有加键按下的子程序

JBP1.7,TOP1;是否按下确定键

MOV2FH,#00

MOV20H,#00

LJMPKK1

NEXT2:

JBP1.5,NEXT4;P1.5做切换键,看是否按下此键

INC22H

MOVA,22H

CJNEA,#03,NEXT8

MOV22H,#00;重新循环

CLRA

LJMPPP3

NEXT4:

JBP1.4,PP9;判断校正键是否已按下

SETB2FH.0;建立校正标记

MOV20H,#00;校正指针置0

LJMPKK1

PP9:

JBP1.7,TOP1;判断是否按下确定键

MOV22H,#00

NEXT8:

MOVA,22H

CJNEA,#01,NEXT5;是,则显示日期

KK1:

MOVHHOU,YUE

MOVHMIN,TIAN

SJMPXIAN

NEXT5:

CJNEA,#02,PP3

PP5:

MOVHHOU,HOU

MOVHMIN,MIN

SJMPXIAN

PP3:

;CJNEA,#00,EXIT;相等显示分和秒

MOVHHOU,MIN

MOVHMIN,SEC

XIAN:

LCALLXTIME;调用显示子程序

EXIT:

RETI

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;加键子程序;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

AKEY:

JBP1.6,LP0

MOVA,20H

ADDA,51H

MOVR0,A

MOVA,#01

ADDA,@R0

DAA

MOV@R0,A

CJNER0,#YUE,LP1;是否是月加1

CJNEA,#13H,LP0

MOVYUE,#01

LP1:

CJNER0,#TIAN,LP3;是否是天加1

CJNEA,#32H,LP0

MOVTIAN,#01

LP3:

CJNER0,#HOU,LP4

CJNEA,#24H,LP0

MOVHOU,#00

LP4:

CJNER0,#MIN,LP5

CJNEA,#60H,LP0

MOVMIN,#00

LP5:

CJNER0,#SEC,LP0

CJNEA,#60H,LP0

MOVSEC,#00

LP0:

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;记时程序段

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

CTIME:

MOVA,#01

ADDA,SEC

DAA

MOVSEC,A

CJNEA,#60H,LP7

MOVSEC,#00

MOVA,#01

ADDA,MIN

DAA

MOVMIN,A

CJNEA,#60H,LP7

MOVMIN,#00

MOVA,#01

ADDA,HOU

DAA

MOVHOU,A

CJNEA,#24H,LP7

MOVHOU,#00

MOVA,#01

ADDA,TIAN

DAA

MOVTIAN,A

CJNEA,#32H,LP7

MOVTIAN,#01

MOVA,#01

ADDA,YUE

DAA

MOVYUE,A

CJNEA,#13H,LP7

MOVYUE,#01

LP7:

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;闪烁子程序

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

KK6:

MOVA,#00

MOVSBUF,A

LCALLKK7

MOVC,21H.3

ANLC,20H.0;点的闪烁

MOVACC.0,C

MOVSBUF,A

LCALLKK7

RET

TAB:

DB0FCH,60H,0DAH,0F2H,066H,0B6H,0BEH,0E0H,0FFH,0E6H

END

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

当前位置:首页 > 解决方案 > 学习计划

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

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