多功能数字电子钟.docx

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

多功能数字电子钟.docx

《多功能数字电子钟.docx》由会员分享,可在线阅读,更多相关《多功能数字电子钟.docx(26页珍藏版)》请在冰点文库上搜索。

多功能数字电子钟.docx

多功能数字电子钟

 

《单片机原理及应用课程设计报告》

 

课题:

多功能数字电子钟设计

 

 

一、课程设计目的

《单片机原理及应用》课程设计是一项重要的实践性教育环节,是学生在校期间必须接受的一项工程训练。

在课程设计过程中,在教师指导下,运用工程的方法,通过一个简单课题的设计练习,可使学生初步体验单片机应用系统的设计过程、设计要求、完成工作内容和具体的设计方法,了解必须提交的各项工程文件,也达到巩固、充实和综合运用所学知识解决实际问题的目的。

通过课程设计,应能加强学生如下能力的培训:

(1)独立工作能力和创造力;

(2)查阅图书资料,产品手册和各种工具书的能力;

(3)工程绘图的能力;

(4)编写技术报告和编制技术资料的能力

(5)综合运用专业及基础知识,解决实际工程技术问题的能力;

1.1总体要求

(1)独立完成设计任务

(2)绘制系统硬件总框图

(3)绘制系统原理电路图

(4)制定编写设计方案,编制软件框图,完成详细完整的程序清单和注释;

(5)制定编写调试方案,编写用户操作使用说明书

(6)写出设计工作小结。

对在完成以上文件过程所进行的有关步骤如设计思想、指标论证、方案确定、参数计算、元器件选择、原理分析等作出说明,并对所完成的设计作出评价,对自己整个设计工作中经验教训,

1.2具体要求

本次工程实践的校内部分主要以单片机为基础,进行单片机软件编程,目的是为了提高学生的软件编程和系统设计能力,整个设计系统包括两个部分,硬件及软件部分,硬件部分已经制作成功,学生只需要掌握其原理和焊接相应的元器件,掌握元器件的辨别和元器件的作用以及应用场所即可,另外对所焊接的电路还需要进行仔细的检查,判断是否有焊接错误的地方或者短路的地方,对出现的异常情况要能够根据现象判别原因,并具备解决问题的能力,从而切实提高学生的硬件电子电路的分析、判断能力。

软件编程是本次工程实践的重要环节。

在为期两周的工程实践中,将占据主要时间,学生要完成的软件编程任务主要包括以下几点:

1)、熟悉KeilC51编程平台及相关编程软件

2)、编写、调试蜂鸣器、继电器动作、方波程序并进行软硬件联调

3)、编写、调试LED流水灯(循环显示)程序并进行软硬件联调

4)、编写、调试键盘扫描子程序并进行软硬件联调

5)、编写、调试数码管动态扫描程序并进行软硬件联调

6)、电子钟设计(包括键盘、时钟、显示等)

7)、作息时间控制系统设计(包括键盘、显示、时钟、报警等)

8)、智能交通灯控制系统设计

9)、车速里程测量、显示设计

二、总体设计

2.1系统硬件总框图

控制原理:

该设计以单片机为主控电路,分别控制5个工作模块:

按键控制模块、实时时钟模块、数码管显示模块、LED显示模块、扬声器模块。

按键控制模块由单片机P1.4-P1.7口控制。

实时时钟由DS1302完成,由单片机INT0、INT1、T0口控制。

数码管显示由LED显示模块由P0口和P1.0-P1.4控制。

LED模块由P2口控制。

扬声器由T0口控制。

3、单元模块电路设计

3.1按键控制扫描模块

按键用于控制数码显示、LED显示、扬声器等模块的工作。

通过扫描按键是否按下,来设定各模块的工作情况,使各模块可以在按键的控制下,有序地进行工作。

设计中使用单个按键实现单个功能,属于较为简单的控制方式.

按键输入电路

使用4个按键分别与单片机的平P1.4、P1.5、P1.6、P1.7分别连接,以完成按键控制。

3.2扬声器模块

要求扬声器能够发出连续,断续的声音及音乐,我们可以选择一个蜂鸣器来实现这些功能。

蜂鸣器电路图:

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。

下面我们以电磁式蜂鸣器为例来说明它的工作原理:

电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。

接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。

振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声,当输出高电平时,三极管截止,蜂鸣器的两引脚间的直流电压接近于0V,没有电流流过线圈,蜂鸣器不发声;当输出低电平时,三极管导通,使蜂鸣器的两个引脚间获得将接近+5V的直流电压,这样蜂鸣器的电流形成回路,发出声音在这个设计中是通过p3.4口控制其发声的。

由于p3.4与ds1302是连在一起的,故只要ds1302工作,就可以设定使扬声器发出声音。

3.3数码管显示模块

设计中采用四位共阳极数码管,共阳极是指其公共端接正极,通过单片机AT89C52的P1口控制其位选,以达到动态显示的效果,再通过P0口,控制其段选以显示相应的数值。

在其位选控制部分,采用了一个9012型三极管,要求当P1口输出低电平时,位选成功。

数码管显示电路

硬件电路中,数码管显示的小时和分.小时通过按键2控制,分通过按键3控制。

数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。

①静态显示驱动:

静态驱动也称直流驱动。

静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。

静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢:

),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。

②动态显示驱动:

数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。

通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。

在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

3.4LED显示模块

LED(LightEmittingDiode),发光二极管,是一种固态的半导体器件,它可以直接把电转化为光。

LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。

半导体晶片由两部分组成,一部分是P型半导体,在它里面空穴占主导地位,另一端是N型半导体,在这边主要是电子。

但这两种半导体连接起来的时候,它们之间就形成一个“P-N结”。

当电流通过导线作用于这个晶片的时候,电子就会被推向P区,在P区里电子跟空穴复合,然后就会以光子的形式发出

能量,这就是LED发光的原理。

而光的波长也就是光的颜色,是由形成P-N结的材料决定的。

LED显示电路

本次设计中通过按键1来控制其流水显示,打开电源后按下按键1,流水灯模块有效。

电路中LED为共阳极,故控制流水灯显示的P2口应为低电平时才有效。

从原理图中可以看出,如果要让接在P2.0口的LED1亮起来,那么只要把P2.0口的电平变为低电平就可以了;相反,如果要接在P2.0口的LED1熄灭,就要把P2.0口的电平变为高电平;同理,接在P2.1~P2.7口的其他7个LED的点亮和熄灭的方法同LED1。

因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。

我们首先把要显示流水花样的数据建在一个以TAB为标号的数据表中,然后通过查表指令“MOVC A,@A+DPTR”把数据取到累加器A中,然后再送到P1口进行显示。

在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。

3.5DS1302实时时钟模块

DS1302模块电路图

DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。

DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。

DS1302与CPU的连接:

实际上,在调试程序时可以不加电容器,只加一个32.768kHz的晶振即可。

只是选择晶振时,不同的晶振,误差也较大。

Ds1302引脚图

其中Vcc1为后备电源,VCC2为主电源。

在主电源关闭的情况下,也能保持时钟的连续运行。

DS1302由Vcc1或Vcc2两者中的较大者供电。

当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。

当Vcc2小于Vcc1时,DS1302由Vcc1供电。

X1和X2是振荡源,外接32.768kHz晶振。

RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。

RST输入有两种功能:

首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。

当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。

如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。

上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。

只有在SCLK为低电平时,才能将RST置为高电平。

I/O为串行数据输入输出端(双向),SCLK始终是输入端。

如图所示DS1302制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。

3.6AT89C52

本次课程设计中主要是设计一个以作息时间控制为主的多功能控制系统。

该设计中我们主控电路部分采用了单片机AT89C52芯片来实现这些功能,AT89C52是一个低电压,高性能CMOS的8位单片机,片内含8KB的可反复擦写的Flash只读程序存储器和256B的随机存取数据存储器(RAM)。

其引脚如下图所示:

VCC:

供电电压。

GND:

接地。

P0口(P0.0-P0.7):

P0口来控制数码管的段选,以显示相应的数值。

P1口(P1.0-P1.7):

P1口用来控制数码管的位选,以达到动态显示的效果。

P2口(P2.0-P2.7):

P2口来控制LED的亮灭。

P3口(P3.0-P3.7):

P3.0为RXD(串行输入口),P3.1为TXD(串行输出口),P3.2为/INT0(外部中断0),P3.3为/INT1(外部中断1),P3.4为T0(记时器0外部输入),

P3.5为T1(记时器1外部输入),P3.6为/WR(外部数据存储器写选通),P3.7为/RD(外部数据存储器读选通)。

XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。

RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。

VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源正负端。

P0~P3为可编程通用I/O脚,其功能用途由软件定义。

 

四、硬件总电路图

 

五、各模块流程图

5.1流水灯程序流程图

图6流水灯程序流程图

5.2音乐程序流程图

图7音乐程序流程图

 

5.3时间日期显示程序流程图

图8时间日期显示程序流程图

 

5.4ds1302程序流程图

图9ds1302程序流程图

 

六、完整的程序清单及注释

6.1主程序清单:

T_RSTBitP3.4;实时时钟复位线引脚

T_CLKBitP3.2;实时时钟时钟线引脚

T_IOBitP3.3;实时时钟数据线引脚

SECONDEQU30H

MINEQU31H

HEQU32H

ORG0000H

AJMPMAIN

ORG0100H

MAIN:

MOVSP,#60H

MOVP1,#0F0H

JNBP1.4,K1CHECK

JNBP1.5,K2CHECK

JNBP1.6,K3CHECK

JNBP1.7,K4CHECK

SJMPMAIN

蜂鸣器。

K1CHECK:

;去抖动,按下KEYA,跳转到KEYA子程序

JBP1.4,KEYA

SJMPKEYA

KEYA:

MOVSP,#70H;给堆栈指针赋初值

MOVR2,#0FFFFH;蜂鸣器响声计数

START0:

SETBP3.4;P3.4口置高电平

LCALLDELAY;调用延时子程序

CLRP3.4;P3.4口取反

LCALLDELAY

DJNZR2,START0;判断计数是否结束,否跳到START0处

SJMPMAIN;返回主程序

DELAY:

;延时子程序

MOVR7,#02

DELAY0:

MOVR6,#12

DELAY1:

MOVR5,#75

DJNZR5,$

DJNZR6,DELAY1

DJNZR7,DELAY0

RET

流水灯。

K2CHECK:

;去抖动,按下KEYB,跳转到KEYB子程序

JBP1.5,KEYB

SJMPKEYB

KEYB:

MOVSP,#80H

MOVR2,#18H;LED循环闪亮三次

MOVA,#0FEH;A中赋初始值

LOOP:

MOVP2,A;流水灯闪亮

LCALLDELAY3

RLA;A中初值左移

DJNZR2,LOOP

MOVA,#0FFH;三次结束后,熄灭所以LED灯

MOVP2,A

SJMPMAIN;返回主程序

DELAY3:

;延时子程序

MOVR7,#20

DELAY4:

MOVR6,#125

DELAY5:

MOVR5,#255

DJNZR5,$

DJNZR6,DELAY5

DJNZR7,DELAY4

RET

LED动态显示。

K3CHECK:

;去抖动,按下KEYC,跳转到KEYC子程序

JBP1.6,KEYC

SJMPKEYC

KEYC:

MOVP0,#0FFH

SETBP1.0

CLRP1.1

CLRP1.2

CLRP1.3

MOVP0,#88H

ACALLDELAY

MOVP0,#0FFH

SETBP1.1

CLRP1.0

CLRP1.2

CLRP1.3

MOVP0,#80H

ACALLDELAY

MOVP0,#0FFH

SETBP1.2

CLRP1.0

CLRP1.1

CLRP1.3

MOVP0,#0C6H

ACALLDELAY

MOVP0,#0FFH

SETBP1.3

CLRP1.0

CLRP1.1

CLRP1.2

MOVP0,#0C0H

ACALLDELAY

SJMPSMRUN

DELAY:

MOVR3,#1

DELAY1:

MOVR4,#4

DELAY2:

MOVR5,#25

DJNZR5,$

DJNZR4,DELAY2

DJNZR3,DELAY1

RET

;

闹钟程序。

K4CHECK:

;去抖动,按下KEYD,跳转到KEYD子程序

JBP1.7,KEYD

SJMPKEYD

KEYD:

LCALLSETDS1302

LCALLGET1302

MOVDPTR,#DIG_CODE

;显示分

MOVP1,#11110111b

MOVA,MIN

ANLA,#0FH

MOVCA,@A+DPTR

MOVP0,A

LCALLDIS_DELAY

MOVP1,#11111011b

MOVA,MIN

SWAPA

ANLA,#07H

MOVCA,@A+DPTR

MOVP0,A

LCALLDIS_DELAY

;显示时

MOVP1,#11111101b

MOVA,H

ANLA,#0FH

MOVCA,@A+DPTR

MOVP0,A

LCALLDIS_DELAY

MOVP1,#11111110b

MOVA,H

SWAPA

ANLA,#03H

MOVCA,@A+DPTR

MOVP0,A

LCALLDIS_DELAY

RET

DIS_DELAY:

PUSHPSW

MOVR7,#10

D1:

MOVR6,#248

D2:

DJNZR6,$

DJNZR7,D1

POPPSW

RET

;设置DS1302初始时间,并启动计时

SETDS1302:

CLRT_RST

nop

CLRT_CLK

nop

SETBT_RST

nop

MOVB,#8EH;写控制命令字

LCALLINPUTBYTE

MOVB,#00H;写保护关闭

LCALLINPUTBYTE

SETBT_CLK

nop

CLRT_RST

MOVR0,#SECOND;内存中的时间首地址

MOVR1,#80H;DS1302中的时间首地址

MOVR7,#7;字节数

SETLOOP:

CLRT_RST

nop

CLRT_CLK

nop

SETBT_RST

nop

MOVB,R1;写命令字

LCALLINPUTBYTE

MOVA,@R0;设置时间

MOVB,A

LCALLINPUTBYTE

INCR0

INCR1

INCR1

SETBT_CLK

nop

CLRT_RST

nop

DJNZR7,SETLOOP

CLRT_RST

nop

CLRT_CLK

nop

SETBT_RST

nop

MOVB,#8EH

LCALLINPUTBYTE

MOVB,#80H;开写保护

LCALLINPUTBYTE

SETBT_CLK

nop

CLRT_RST

nop

RET

;从DS1302读取时间

GET1302:

MOVR0,#SECOND

MOVR1,#81H;DS1302中读时间的首地址

MOVR7,#7

GETLOOP:

CLRT_RST

nop

CLRT_CLK

nop

SETBT_RST

nop

MOVB,R1

LCALLINPUTBYTE;写命令字

LCALLOUTPUTBYTE;读时间

MOV@R0,A;将从DS1302中读取的时间从内存中保存

INCR0;修改地址指针

INCR1

SETBT_CLK

NOP

CLRT_RST

NOP

DJNZR7,GETLOOP

RET

;向DS1302写一个字节

INPUTBYTE:

MOVR4,#8

INPUTLOOP:

MOVA,B

RRCA

MOVB,A

MOVT_IO,C

SETBT_CLK

NOP

NOP

NOP

CLRT_CLK

DJNZR4,INPUTLOOP

RET

;---------------------------------------------------------------------------------------------------

;从DS1302读一个字节

OUTPUTBYTE:

CLRa

CLRc

MOVR4,#8

OUTPUTLOOP:

NOP

NOP

MOVC,T_IO

RRCA

SETBT_CLK

NOP

NOP

NOP

CLRT_CLK

DJNZR4,OUTPUTLOOP

RET

MOVR3,#32H预定时16s

TIME:

MOVA,P3.4

CJNEA,R3,TIME

MOVR2,#0FFFFH;蜂鸣器程序

SETBP3.4;P3.4口置高电平

LCALLDELAY;调用延时子程序

CLRP3.4;P3.4口取反

LCALLDELAY

DJNZR2,START0;判断计数是否结束,否跳到START0处

SJMPMAIN;返回主程序

DELAY:

;延时子程序

MOVR7,#02

DELAY0:

MOVR6,#12

DELAY1:

MOVR5,#75

DJNZR5,$

DJNZR6,DELAY1

DJNZR7,DELAY0

RET

DIG_CODE

DB14H,0D7H,4CH,45H,87H,25H,24H,57H,04H,05H

;

END

七、调试情况及小结

按照此次课程设计的要求调试过程如下:

按键A,B,C,D分别对应蜂鸣器,LED流水灯,数码管,多功能数字电子钟四个功能。

1、蜂鸣器测试

通过按按键A,听到蜂鸣器发出“嘀”,“嘀”的响声;与相应的程序代码相比较,结果正确。

2、LED流水灯测试

通过按按键B,观察到LED流水灯显示,并循环2次;与相应的程序代码相比较,结果正确。

3、数码管测试

通过按按键C,观察到数码管从“1000”开始计时,依次显示“1001”,“1002”,“1003”¡¡;与相应的程序代码相比较,结果正确。

因为程序要求数码管显示的时间是小时和分钟,所以要观察到数码管的变化要等一分钟的时间。

4、音乐测试

通过按按键KEY3,听到蜂鸣器响起“生日快乐”的音乐;与相应的程序代码相比较,结果正确。

八、设计总结

通过这次单片机课程设计我学

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

当前位置:首页 > PPT模板 > 其它模板

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

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