完整word版带闹钟的智能电子时钟单片机课程设计.docx

上传人:b****5 文档编号:14871729 上传时间:2023-06-28 格式:DOCX 页数:26 大小:254.88KB
下载 相关 举报
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第1页
第1页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第2页
第2页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第3页
第3页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第4页
第4页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第5页
第5页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第6页
第6页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第7页
第7页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第8页
第8页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第9页
第9页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第10页
第10页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第11页
第11页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第12页
第12页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第13页
第13页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第14页
第14页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第15页
第15页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第16页
第16页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第17页
第17页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第18页
第18页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第19页
第19页 / 共26页
完整word版带闹钟的智能电子时钟单片机课程设计.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

完整word版带闹钟的智能电子时钟单片机课程设计.docx

《完整word版带闹钟的智能电子时钟单片机课程设计.docx》由会员分享,可在线阅读,更多相关《完整word版带闹钟的智能电子时钟单片机课程设计.docx(26页珍藏版)》请在冰点文库上搜索。

完整word版带闹钟的智能电子时钟单片机课程设计.docx

完整word版带闹钟的智能电子时钟单片机课程设计

 

微处理器综合设计实践报告

 

题目:

智能电子时钟的设计

院系:

电子与信息工程学院

专业:

电子科学与技术年级

姓名:

学号:

指导老师:

 

一、课程设计目的:

综合应用所学的微处理器原理,汇编语言及相关硬件知识,设计一个具有一定功能的电路。

熟练掌握仿真器和编程器的使用。

二、课程设计要求:

在面包板上搭建好硬件电路。

以单片机为核心器件,组成一个电子时钟系统。

系统显示用4位7段LED显示器,显示当前时间的小时和分。

能够通过按键实现对当前时间的调整,系统时间到整点后能够通过蜂鸣器报时,时间为1s;能通过按键设置闹钟时间,闹钟时间到后,通过蜂鸣器报时。

三、系统组成与工作原理:

1、电路原理图

2、工作原理

(1)设计原理及思路

本课程设计要求以AT89C52单片机为核心器件,组成一个电子时钟系统。

我们可以利用单片机自带的定时器功能来进行定时,再通过一些软件编程来构造出一个时钟,同时也可以利用软件的编程来实现所要求的其他功能。

通过四个按键开关来控制电子时钟的工作模式。

KEY1、KEY2分别对应时钟的调时和调分。

KEY3可以设置闹钟,进入闹钟模式后,KEY1、KEY2将转变成闹钟的调时和调分键。

此外,当按下KEY4就可以进入秒表模式,进入秒表模式以后,KEY1可以控制秒表的开始于暂停,KEY2可以对秒表清零,再次按下KEY4键便退出秒表模式。

程序运行时主程序一直在循环查询各按键的状态,并将当前时间与闹钟设定时间不断进行比较,如果时间相同则响铃,同时通过动态显示的方式将相应的时间显示在数码管显示器上。

与此同时,整个过程中时钟的时间都是由单片机的定时器进行计时的。

单片机的P0口负责输出段码,P2.0~P2.3对应四个数码管的位选端,分别为数码管1号、2号、3号、4号(由右至左编号);P1.0对应蜂鸣器;P2.4~P2.7对应四个按键4、3、2、1(由上至下编号)。

各个分电路:

a.蜂鸣器电路

当P1.0为低电平时,三极管导通,蜂鸣器开始工作

b.上电复位电路

在通电瞬间,电容C通过电阻R20充电,RST端出现正脉冲,用以复位。

只要接通电源就完成了系统的复位初始化。

 

c.振荡电路

此处晶振为12MHz,提供单片机的时钟频率。

晶振频率越高,单片机运行速度越快。

d.数码管显示电路

P0口连接上拉电阻(排阻),用万用表测试得数码管为共阳极。

当P2.3~P2.0口输出低电平时,三极管导通,所对应的数码管显示;因为共阳极,所以P0口为低电平的端口所对应的段码显示。

 

e.按键电路

当按键没有按下时,P2.4~P2.7为高电平,若按下则变低电平。

(2)所用存储单元

31H——时钟分的个位3AH——时钟分的个位的段码

32H——时钟分的十位3BH——时钟分的十位的段码

33H——时钟时的个位3CH——时钟时的个位的段码

34H——时钟时的十位3DH——时钟时的十位的段码

41H——闹钟分的个位4AH——闹钟分的个位的段码

42H——闹钟分的十位4BH——闹钟分的十位的段码

43H——闹钟时的个位4CH——闹钟时的个位的段码

44H——闹钟时的十位4DH——闹钟时的个位的段码

51H~54H分别存放着秒表模式下1~4号管要显示的数字

5AH~5DH分别存放着秒表模式下1~4号管要显示的数字的段码

其中,1号管——秒的十分位

2号管——秒的个位

3号管——秒的十位

4号管——分的个位

R7的初值为20,控制定时器T0的中断次数,T0中断1次定时50ms,20次定时1s;

R0用来记录秒;

 

(3)总流程图

 

(4)“当前时间调时”子程序流程图

 

(5)“当前时间调分”子程序流程图

 

(6)“闹钟时间设置”子程序流程图

 

(7)“闹钟工作”子程序流程图

 

(8)“秒表”子程序流程图

 

(9)“数码管显示”子程序流程图

 

四、总结

因为平时对于电路设计这方面的训练比较少,电路也是自己最薄弱的地方。

因此,在第一天拿到器件以后完全没有方向,不知道从哪里开始设计。

后来通过自己上网搜索资料,逐渐摸索出了思路,最终完成了电路的设计。

电路设计完之后,在面包板上搭建也让我犯了难。

什么器件应该放在哪个位置,这么放插孔够不够用,这么放连线方不方便成了我一直头疼的问题。

后来通过观察上一届学长的面包板和同学的讨论,终于搭好了板子。

但是因为对于面包板不熟悉,搭小灯泡时,把它的两个引脚插在了联通的两个孔里,导致小灯泡一直不亮;插按键的时候也是,没有搞清楚按键和面包板的构造,把按键的两边引脚都插在联通的一排里,导致后面在验证的时候出现了数码管一直不亮的问题,后来经过老师的指导,解决了这个问题。

软件的编写可能是最困难的一个部分了。

虽然之前有做过单片机实验,写过代码,但是,实验的代码非常简短,实现的功能很简单。

这次因为要实现很多功能,一开始我想偷懒,直接写了代码。

这样就导致了我的思路不成熟,运行下来有很多地方都是错误的。

因此我才意识到,直接写代码是不可能的,要先画流程图理清思路。

在我画完流程图以后,再会过去看我原来的代码,才知道有多么的混乱。

后来经过我分模块的编写,最后把它们汇总到一起,构成了最后的代码,开始调试。

首先,我先在WAVE软件里写了一个最小系统的代码,再通过wellon软件,烧制到AT89C52单片机上,对最小系统进行测试。

测试时发现小灯和蜂鸣器都没有正常的工作。

因为当时刚刚开始,并不知道该如何调试,就马上叫老师了,老师发现小灯的两个引脚插在了联通的两个孔里,才导致了不亮。

当我把小灯的引脚插在其他地方时,灯就亮了。

至于蜂鸣器不响的问题,我用万用表测试了蜂鸣器周围的所有电路发现都是正确的,测试蜂鸣器两端的电压,发现也是有电压差的,我的代码又没有问题,一时不知道怎么办才好。

后来,我又连接电源,让电路运行了一次,发现其实蜂鸣器是发出声音的,只是很微弱以至于我们都把它忽略了。

然后我就想是不是因为蜂鸣器两端电压太小导致的。

于是,我就把和蜂鸣器相连接的电阻拿掉了,终于蜂鸣器也响了。

最小系统测试完成。

后来,老师教我们使用了仿真器,这让整个调试过程变得方便了许多。

当我把整个代码都编译到仿真器里面时,板子上的数码管没有任何反应,但是换成同学的板子就可以显示,这让我觉得很不可思议。

当我又写了段测试数码管的程序,让它显示的时候,数码管也是可以正确显示的。

我实在想不出办法,决定单步运行,看看到底哪里出现了问题。

但是我单步运行了几次,都没有发现哪里有问题,于是只能求助于老师。

老师通过设断点的方法发现,我的按键完全没有实现它的功能,于是就询问我怎么安装的按键,这才找出了原因,原来我的按键的安装方向错了。

在改正了之后,我的数码管就能正常的显示了。

数码管显示之后,我发现我的闹钟到了指定时间不会响,然后我仔细再看了我的代码,发现虽然写了闹铃的子程序,但是在主程序里面并没有调用,这才导致了闹钟不响。

在有加了一句调用语句以后,闹钟就能正常工作了。

当我把前一天调试好的程序第二天再用仿真器进行测试时,发现蜂鸣器只要一通电就响了,完全不受程序的控制。

为什么我程序一点都没改过但是再次验证又失败了呢?

我又拿了同学的板子做测试,发现她跟我是一样的问题,于是我就想会不会是仿真器的问题。

于是,我又拿了另一个仿真器测试了一下,发现程序是正常运行的;我又把蜂鸣器接在了第一个仿真器的P3口进行实验,发现程序也是正常运行的。

因此,我认为是第一个仿真器的P1口坏了。

通过这次课程设计,我对单片机有了更加深刻的认识,体会到了单片机的强大。

同时,从设计电路图到最后的验证成功,在这整个过程中遇到了很多的问题,当遇到问题时我认为最重要的还是冷静下来自己思考,仔细的检查。

因为很多的问题的出现大部分程度上是因为自己的不仔细。

一个地方的出错可能就导致了整个数码管的不显示,整个程序的实现不了功能。

当出现了问题时,应该自己默默地看代码,仔仔细细地观察,看看到底哪里出现了问题,因为自己的代码只有自己知道具体哪里是干什么的,自己检查出来错误才会有成就感。

总之,通过这次课程设计,我学习到了很多,也意识到了自己在动手方面的不足,希望在以后的学习中能改正这一缺点。

 

五、附程序清单

ORG0000H

AJMPMAIN

ORG000BH

LJMPTIME;时钟程序

ORG001BH

LJMPIT1P;IT1P用于秒表计时

ORG0030H

MAIN:

MOVSP,#60H;堆栈指针初始化

MOVIE,#8AH;允许T0和T1中断

MOVTMOD,#11H;T0和T1均工作在方式1

MOVTL0,#0B0H;给T0装初值,中断一次定时50ms

MOVTH0,#3CH

MOVR0,#0;用R0记录秒

MOVR7,#20;中断20次,定时1s

MOV31H,#00H;时间初始化,显示器显示:

00:

00

MOV32H,#00H

MOV33H,#00H

MOV34H,#00H

MOV3AH,#0C0H

MOV3BH,#0C0H

MOV3CH,#0C0H

MOV3DH,#0C0H

MOV41H,#00H;闹钟初始化,定在00:

00时刻

MOV42H,#00H

MOV43H,#00H

MOV44H,#00H

MOV4AH,#0C0H

MOV4BH,#0C0H

MOV4CH,#0C0H

MOV4DH,#0C0H

MOVDPTR,#TAB;段码表首地址传给DPTR

SETBP1.0

SETBTR0

START1:

JBP2.7,NEXT1;按键1调时

LCALLDEL1;调用延时程序,消除按键抖动

JBP2.7,NEXT1

JNBP2.7,$;等待按键弹开

LCALLKEY1

NEXT1:

JBP2.6,NEXT2;按键2调分

LCALLDEL1

JBP2.6,NEXT2

JNBP2.6,$

LCALLKEY2

NEXT2:

JBP2.5,NEXT3;按键3设置闹钟

LCALLDEL1

JBP2.5,NEXT3

JNBP2.5,$

LCALLKEY3

NEXT3:

LCALLNAOZHONG;闹钟响铃程序,当前时间与闹钟时间相同则响铃

JBP2.4,DSPLY1;按键4秒表

LCALLDEL1

JBP2.4,DSPLY1

JNBP2.4,$

LCALLKEY4

DSPLY1:

;显示时间

MOVP2,#0FEH;1号管显示分的个位

MOVP0,3AH

LCALLDEL2

MOVP2,#0FDH;2号管显示分的十位

MOVP0,3BH

LCALLDEL2

MOVP2,#0FBH;3号管显示时的个位

MOVP0,3CH

CLRP0.7;点亮3号管后的小数点,区别时和分

LCALLDEL2

MOVP2,#0F7H;4号管显示时的十位

MOVP0,3DH

LCALLDEL2

LJMPSTART1

TIME:

;时钟程序

DJNZR7,LOOP1

MOVR7,#20

INCR0

CJNER0,#60,LOOP1

MOVR0,#00H

INC31H

MOVR1,31H

CJNER1,#10,TABLP1

MOV31H,#00H

INC32H

MOVR1,32H

CJNER1,#6,TABLP1

MOV32H,#00H

LCALLBAOSHI

INC33H

MOVR1,33H

MOVR2,34H

CJNER2,#2,LOOP2;判断时的十位是否为2,若不是跳转到LOOP2

CJNER1,#4,TABLP1;接着判断时的个位是否为4,若不是查表获取段码

MOV33H,#00H;若为24时,则将时的个位和十位清零

MOV34H,#00H

SJMPTABLP1

LOOP2:

CJNER1,#10,TABLP1

MOV33H,#00H

INC34H

TABLP1:

MOVA,31H

MOVCA,@A+DPTR

MOV3AH,A;分的个位的段码

MOVA,32H

MOVCA,@A+DPTR

MOV3BH,A;分的十位的段码

MOVA,33H

MOVCA,@A+DPTR

MOV3CH,A;时的个位的段码

MOVA,34H

MOVCA,@A+DPTR

MOV3DH,A;时的十位的段码

LOOP1:

MOVTL0,#0B0H;给T0重装初值

MOVTH0,#3CH

RETI

DEL1:

;按键去抖延时程序(约10ms)

MOVR6,#20

DEL11:

MOVR5,#248

DJNZR5,$

DJNZR6,DEL11

RET

DEL2:

;动态显示延时程序(约5ms)

MOV2CH,#10

DEL21:

MOV2BH,#248

DJNZ2BH,$

DJNZ2CH,DEL21

RET

KEY2:

;调分程序

MOVR0,#0;秒清零,使校时更加精准

MOVR7,#20

INC31H;分的个位增1

MOVR1,31H

CJNER1,#10,TABLP2

MOV31H,#00H

INC32H

MOVR1,32H

CJNER1,#6,TABLP2

MOV32H,#00H

TABLP2:

MOVA,31H

MOVCA,@A+DPTR

MOV3AH,A;时钟分的个位的段码

MOVA,32H

MOVCA,@A+DPTR

MOV3BH,A;时钟分的十位的段码

RET

KEY1:

;调时程序

INC33H;时的个位增1

MOVR1,33H

MOVR2,34H

CJNER2,#2,LOOP3

CJNER1,#4,TABLP3

MOV33H,#00H

MOV34H,#00H

AJMPTABLP3

LOOP3:

CJNER1,#10,TABLP3

MOV33H,#00H

INC34H

TABLP3:

MOVA,33H

MOVCA,@A+DPTR

MOV3CH,A;时的个位的段码

MOVA,34H

MOVCA,@A+DPTR

MOV3DH,A;时的十位的段码

RET

KEY3:

;闹钟设置程序

START2:

JBP2.5,NEXT4;判断是否完成闹钟设置

LCALLDEL1

JBP2.5,NEXT4

JNBP2.5,$

LJMPEXIT1

NEXT4:

JBP2.7,NEXT5;按键1闹钟调时

LCALLDEL1

JBP2.7,NEXT5

JNBP2.7,$

LCALLAKEY1

NEXT5:

JBP2.6,DSPLY2;按键2闹钟调分

LCALLDEL1

JBP2.6,DSPLY2

JNBP2.6,$

LCALLAKEY2

DSPLY2:

MOVP2,#0FEH;1号管显示闹钟分的个位

MOVP0,4AH

CLRP0.7;点亮1号管后面的小数点,区分时钟和闹钟

LCALLDEL2

MOVP2,#0FDH;2号管显示闹钟分的十位

MOVP0,4BH

LCALLDEL2

MOVP2,#0FBH;3号管显示闹钟时的个位

MOVP0,4CH

CLRP0.7;点亮3号管后面的小数点,区别时和分

LCALLDEL2

MOVP2,#0F7H;4号管显示闹钟时的十位

MOVP0,4DH

LCALLDEL2

LJMPSTART2

EXIT1:

RET

AKEY2:

;闹钟调分程序

INC41H

MOVR3,41H

CJNER3,#10,TABLP4

MOV41H,#00H

INC42H

MOVR3,42H

CJNER3,#6,TABLP4

MOV42H,#00H

TABLP4:

MOVA,41H

MOVCA,@A+DPTR

MOV4AH,A;闹钟分的个位的段码

MOVA,42H

MOVCA,@A+DPTR

MOV4BH,A;闹钟分的十位的段码

RET

AKEY1:

;闹钟调时程序

INC43H

MOVR3,43H

MOVR4,44H

CJNER4,#2,LOOP4

CJNER3,#4,TABLP5

MOV43H,#00H

MOV44H,#00H

AJMPTABLP5

LOOP4:

CJNER3,#10,TABLP5

MOV43H,#00H

INC44H

TABLP5:

MOVA,43H

MOVCA,@A+DPTR

MOV4CH,A;闹钟时的个位的段码

MOVA,44H

MOVCA,@A+DPTR

MOV4DH,A;闹钟时的十位的段码

RET

NAOZHONG:

;闹钟响铃程序

MOVA,31H;当前时间与闹钟设定时间相同则响铃

CJNEA,41H,OFF

MOVA,32H

CJNEA,42H,OFF

MOVA,33H

CJNEA,43H,OFF

MOVA,34H

CJNEA,44H,OFF

CLRP1.0

AJMPON

OFF:

SETBP1.0

ON:

RET

KEY4:

;秒表程序

MOV51H,#00H;秒的十分位

MOV52H,#00H;秒的个位

MOV53H,#00H;秒的十位

MOV54H,#00H;分的个位

MOV5AH,#0C0H;秒表初始化,显示器显示:

0:

00.0

MOV5BH,#0C0H

MOV5CH,#0C0H

MOV5DH,#0C0H

MOVTL1,#0B0H;T1装初值,中断一次计时50ms

MOVTH1,#3CH

MOVR4,#2;中断两次,定时0.1s

SETBPT1;设T1为高优先级中断

CLRTR1

START3:

JBP2.4,NEXT6;判断是否退出秒表模式

LCALLDEL1

JBP2.4,NEXT6

JNBP2.4,$

LJMPEXIT2

NEXT6:

JBP2.7,NEXT7;秒表开始/暂停

LCALLDEL1

JBP2.7,NEXT7

JNBP2.7,$

CPLTR1

NEXT7:

JBP2.6,DSPLY3;秒表清零

LCALLDEL1

JBP2.6,DSPLY3

JNBP2.6,$

CLRTR1

MOV51H,#00H

MOV52H,#00H

MOV53H,#00H

MOV54H,#00H

MOV5AH,#0C0H

MOV5BH,#0C0H

MOV5CH,#0C0H

MOV5DH,#0C0H

MOVTL1,#0B0H

MOVTH1,#3CH

MOVR4,#2

DSPLY3:

MOVP2,#0FEH;1号管显示秒的十分位

MOVP0,5AH

LCALLDEL2

MOVP2,#0FDH;2号管显示秒的个位

MOVP0,5BH

CLRP0.7;点亮2号管后面的小数点,区别秒的个位和十分位

LCALLDEL2

MOVP2,#0FBH;3号管显示秒的十位

MOVP0,5CH

LCALLDEL2

MOVP2,#0F7H;4号管显示分的个位

MOVP0,5DH

CLRP0.7;点亮4号管后面的小数点,区别分和秒

LCALLDEL2

LJMPSTART3

EXIT2:

CLRPT1

RET

IT1P:

;T1的中断服务子程序

DJNZR4,NEXT8

MOVR4,#2

INC51H;秒的十分位增1

MOVR3,51H

CJNER3,#10,TABLP6

MOV51H,#00H

INC52H;秒的个位增1

MOVR3,52H

CJNER3,#10,TABLP6

MOV52H,#00H

INC53H;秒的十位增1

MOVR3,53H

CJNER3,#6,TABLP6

MOV53H,#00H

INC54H;分的个位增1

MOVR3,54H

CJNER3,#10,TABLP6

MOV54H,#00H

TABLP6:

MOVA,51H

MOVCA,@A+DPTR

MOV5AH,A;秒的十分位的段码

MOVA,52H

MOVCA,@A+DPTR

MOV5BH,A;秒的个位的段码

MOVA,53H

MOVCA,@A+DPTR

MOV5CH,A;秒的十位的段码

MOVA,54H

MOVCA,@A+DPTR

MOV5DH,A;分的个位的段码

NEXT8:

MOVTL1,#0B0H;给T1重装初值

MOVTH1,#3CH

EXIT3:

RETI

BAOSHI:

;整点报时程序

CLRP1.0

LCALLDEL1S

SETBP1.0

RETURN:

RET

DEL1S:

MOV2FH,#10

DE1:

MOV2EH,#200

DE2:

MOV2DH,#250

DJNZ2DH,$

DJNZ2EH,DE2

DJNZ2FH,DE1

RET

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;数字0~9的断码

END

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

当前位置:首页 > 高等教育 > 文学

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

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