基于单片机并行口的电子钟的设计毕业设计论文 精品.docx

上传人:b****2 文档编号:24142948 上传时间:2023-05-24 格式:DOCX 页数:27 大小:257.13KB
下载 相关 举报
基于单片机并行口的电子钟的设计毕业设计论文 精品.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

基于单片机并行口的电子钟的设计毕业设计论文精品

毕业设计论文

基于单片机并行口的电子钟的设计

摘要:

电子钟是一种用电子电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。

电子钟从原理上讲是一种典型的电子电路,其中包括了组合逻辑电路和时序电路。

目前,电子钟的功能越来越强,并且有多种专门的大规模集成电路可供选择。

从有利于学习的角度考虑,这里主要介绍以中小规模集成电路设计电子钟的方法。

经过了电子电路设计这门课程的系统学习,特别经过了关于组合逻辑电路与时序逻辑电路部分的学习,我们已经具备了设计小规模集成电路的能力,借由本次设计的机会,充分将所学的知识运用到实际中去。

本次课程设计要求设计一个电子钟,基本要求为电子钟的时间周期为24小时,电子钟显示时、分、秒,数字钟的时间基准一秒对应现实生活中的时钟的一秒。

供扩展的方面涉及到定时自动报警、按时自动打铃、定时广播、定时启闭路灯等。

因此,研究电子钟及扩大其应用,有着非常现实的意义。

关键字:

单片机,LED显示器,电子钟,汇编语言。

 

1多功能电子表说明及总体方案介绍1

1.1多功能电子表计时方案1

1.2多功能电子表键盘/显示方案2

2电子钟的工作原理4

3多功能电子表原理框图、原理图及PCB图5

3.1多功能电子表原理框图5

4多功能电子表元器件清单9

5单片机硬件资源分配25

6程序流程图26

7电子钟程序清单32

8误差分析40

9电子钟使用说明43

10设计体会44

11教学意见45

12参考资料46

1多功能电子表说明及总体方案介绍

本次设计电子钟系统功能简单,用单片机的最小系统就能得以实现。

而单片机的最小系统设计中实际上最重要的就是对键盘/显示器接口电路的设计,由于系统功能不同所以要求就不同,接口设计也就不同。

对一个键盘/显示器接口设计应从整个系统出发,综合考虑软、硬件特点。

下面是本人在设计前对各种设计方案的考虑

1.1多功能电子表计时方案

方案一:

采用实时时钟芯片

实时时钟芯片具备年、月、日、时、分、秒计时功能和多点定时功能,计时数据的更新每秒自动进行一次,不需程序干预。

计算机可通过中断或查询方式读取计时数据进行显示,因此计时功能的实现无需占用CPU的时间,程序简单。

此外,实时时钟芯片多数带有锂电池做后备电源,具备永不停止的计时功能;具有可编程方波输出功能,可用做实时测控系统的采样信号等;有的实时时钟芯片内部还带有非易失性RAM,可用来存放需长期保存但有时也需变更的数据。

由于功能完善,精度高,软件程序设计相对简单,且计时不占用CPU时间,因此,在工业实时测控系统中多采用这一类专用芯片来实现实时时钟功能。

方案二:

软件控制。

利用单片机内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时及秒表计时。

该方案节省硬件成本,且能使设计者对单片机的指令系统能有更深入的了解,从而掌握单片机应用技术MCS-51汇编语言程序设计方法,因此,本系统设计采用此种软件控制方法来实现计时。

而由于ATMEL公司的AT89S51单片机是低功耗的具有4KB在线可编程Flash存器的单片机。

它与通用80C51系列单片机的指令系和引脚兼容。

片内的Flash可允许在线重新编程,也可使用通用非易失性存储器编程。

它将通用CPU和在线可编程Flash集成在一个芯片上,形成了功能强大、使用灵活和具有较高性能价格比的微控制器。

它的功能强大,而且也较容易购买,故本设计中所选的单片机为AT89S51单片机。

1.2多功能电子表键盘/显示方案

方案一:

8279扩展。

该方案方框图如图1.2.1所示,8279是一种可编程的键盘/显示接口专用芯片,它含有键盘输入和显示输出两种功能,键扫描程序和动态显示程序全由8279硬件自动完成,此种方案能以比较简单的硬件

电路和较少的软件开销实现单片机与键盘、LED显示器的接口。

方案二:

8155扩展,LED动态显示。

该方案方框图如图1.2.2所示,8155是一块可编程的接口芯片,与单片机的接口非常简单,它的键盘、显示共用一个接口电路,可节省I/O口。

但动态扫描方式需占用CPU较多的时间,在单片机没有太多实时测控任务的情况下可以采用。

方案三:

串口扩展,LED静态显示。

该方案方框图如图1.2.3所示,独立式键盘配置灵活,软件结构简单,按键较多时不宜采用。

静态显示占用口资源少,采用串口传输实现静态显示,LED数码管与单片机之间通过6个移位寄存器相连,显示亮度有保证,但此方案的硬件开销大,电路复杂,信息刷新速度慢,比较适用于并行口资源较少的场合。

方案四:

独立式按键,LED动态显示。

该方案方框图如图1.2.4所示,独立式按键直接与单片机I/O口相连构成键盘,每个按键不会相互影响,因本系统用到的按键比较少,采用独立式键盘不会浪费I/O口线,所以本系统采用独立式键盘。

动态显示的亮度虽然不如静态显示,但其硬件电路较简单,可节省硬件成本,虽然动态扫描需占用CPU较多的时间,但本系统中的单片机没有很多实时测控任务,因此,本系统采用此种方案。

2多功能电子表的工作原理

本设计中的电子钟的核心是AT89S51单片机,其内部带有4KB在线可编程Flash存储器的单片机,无须外扩程序存储器,硬件电路主要由四部分构成:

时钟电路,复位电路,键盘以及显示电路。

时钟电路是电子表硬件电路的核心,没有时钟电路,电子表将无法正常工作计时。

本系统时钟电路采用的晶振的频率为12MHz,定时器采用的是定时器0工作在方式1定时,用于实现时、分、秒的计时,定时时间为62.5ms。

复位电路可使电子表恢复到初始状态。

键盘可对电子表进行开启、停止,还能实现时、分、秒的显示及设定等操作。

显示电路由两个共阳级4位一体LED数码管构成,它的段控端和位控端通过74LS244及其S8550PNP型号三极管与AT89S51单片机的I/O口相连,显示器可使电子表显示出时、分、秒。

多功能电子表的计时原理为:

上电后,电子表显示P.提示符,按下A键后,电子表从00:

00:

00开始计时。

当定时器0的定时时间满62.5ms后,定时器0溢出一次,溢出满16次后,电子表的秒加1,满60秒后,分加1,满60分后,时加1,满24时后,电子表重新从00:

00:

00开始计时

3多功能电子表原理方框图、原理图及PCB图

3.1多功能电子表原理方框图

多功能电子表整机电路方框图如图3.1

4多功能电子表元器件清单

多功能电子表电路所有元器件清单如表4.1所示

表4.1多功能电子表元器件清单1

元件名称

封装形式

元件号

LED数码管(共阳极)

DIP-12

D1

LED数码管(共阳极)

DIP-12

D2

510Ω电阻

AXIAL0.4

R1

510Ω电阻

AXIAL0.4

R2

510Ω电阻

AXIAL0.4

R3

510Ω电阻

AXIAL0.4

R4

510Ω电阻

AXIAL0.4

R5

510Ω电阻

AXIAL0.4

R6

510Ω电阻

AXIAL0.4

R7

510Ω电阻

AXIAL0.4

R8

1K电阻

AXIAL0.4

R9

200电阻

AXIAL0.4

R10

4.7K电阻

AXIAL0.4

R11

4.7K电阻

AXIAL0.4

R12

4.7K电阻

AXIAL0.4

R13

4.7K电阻

AXIAL0.4

R14

4.7K电阻

AXIAL0.4

R15

4.7K电阻

AXIAL0.4

R16

4.7K电阻

AXIAL0.4

R17

4.7K电阻

AXIAL0.4

R18

电源插座

UIN

DIANYUAN

74LS244芯片

DIP-20

A1

S8550PNP三极管

TO-5

85501

S8550PNP三极管

TO-5

85502

S8550PNP三极管

TO-5

85503

S8550PNP三极管

TO-5

85504

S8550PNP三极管

TO-5

85505

S8550PNP三极管

TO-5

85506

轻触开关A

DIP04

A

轻触开关B

DIP04

B

轻触开关C

DIP04

C

轻触开关D

DIP04

D

轻触开关

DIP04

S5

12M晶振

XTAL1

Y1

33pF电容

RAD0.2

C1

33pF电容

RAD0.2

C2

22µF电容

RB.2/.4

C3

7805芯片

TO-220

U1

0.33µF电容

RAD0.2

C1

0.1µF电容

RAD0.2

C2

220µF电容

RB.2/.4

C3

220µF电容

RB.2/.4

C4

桥式整流

DIP-04

D2

二极管

DIODE0.4

D1

11V变压器

DIP-5

TR

扩展插针

SIP08

J0

扩展插针

SIP08

J1

5单片机硬件资源的分配

本次设计用到了单片机正常工作的硬件资源,如(连接晶振的引脚XTAL1和XTAL2,复位引脚RESET),对其硬件资源还做了具体的安排。

(1).P0口

作为数码管显示器的段控输出口,对数码管显示器进行控制。

(2).P1口

P1.0~P1.3接了四个独立式分别为A键、B键、C键、D键,用于对键盘的控制,P1.5、P1.6、P1.7则作为ISP程序下载的输入端。

(3).P2口

该口全部用于数码管的位控端。

(4).定时/计数器

使用定时器0来实现本次电子钟的运行。

(5).内部存储单元

30H存储定时/计数器0的中断次数。

31H~36H分别作为时、分、秒个位和十位的数据存储单元。

79H~7E分别作为LED0、LED1、LED2、LED3、LED4、LED5显示缓冲单元。

(6).通用寄存器

第0组寄存器:

R0、R1、R3、R7,用来存放键功能程序的数据;第1组寄存器:

R3,用来存放中断服务程序的数据;第2组寄存器:

R1、R4,用来存放显示程序的数据。

(7).专用寄存器

定时器控制寄存器TCON,通过设置该寄存器中TR0位的状态来控制定时/计数器0的启动/停止;中断允许寄存器IE,通过设置该寄存器EA/ET0位的状态来设置定时/计数器0中断允许/禁止;定时/计数器工作方式寄存器TMOD,设置定时/计数器0的工作方式。

7程序流程图

 

 

8电子钟程序清单

调整运行后的电子钟程序清单

;该程序实现电子钟时、分、秒运行,时、分、秒调整;十、分、秒同时显示;

;共A、B、C、D四个按键,A键实现电子钟的运行和停止、B键调时、C键调分、D键调秒

;该电子钟是单片机AT89S51控制,使用芯片中的定时器0方式1实现定时功能;P0口输出段控码、P2口输出位控码控制数码管显示

;该电子钟共使用两个4位一体数码管(S02841A-B)显示

;系统初始化程序****************************************************

ORG0000H

AJMPMAIN;转到系统初始化程序

ORG000BH

AJMPPITO;转到定时器0中断服务程序

ORG0100H

MAIN:

MOVSP,#60H;确立堆栈区

MOVTMOD,#01H;设定定时器0为工作方式1

MOVTL0,#0DCH;装计数器初值

MOVTH0,#0BH

CLR21H.0

CLRTR0H;TR0置“0”,定时关闭

SETBEAH;EA置“1”,中断总允许

SETBET0H;ET0置“1”,定时器0中断

允许

MOV30H,#10H;循环次数

MOV7EH,#0AH;P.点显示初始化

MOVR0,#79H

MOVR1,#05H

PP:

MOV@R0,#0BH

INCR0

DJNZR1,PP

MOVR0,#31H;时、分、秒值存储单元清零

MOVR1,#06H

Q00:

MOV@R0,#00H

INCR0

DJNZR1,Q00

;监控程序**********************************************************

LOOP:

LCALLDIR;调显示子程序

LCALLKEY;调键扫描子程序

LOOP1:

JB20H.0,KEYA;A键是否按下,是跳转到A键功能程序

JB20H.1,KEYB;B键是否按下,是跳转到B键功能程序

JB20H.2,KEYC;C键是否按下,是跳转到C键功能程序

JB20H.3,KEYD;D键是否按下,是跳转到D键功能程序

LCALLDIR

LJMPLOOP;跳转到监控程序

;A键功能子程序****************************************************

KEYA:

CPLTR0H;开启/关闭定时器

SETB21H.0

AJMPLOOP;返回

;B键功能子程序****************************************************

KEYB:

JBTR0H,KEYBO;定时器是否运行,是跳转

JNB21H.0,KEYBOO

MOVR0,#36H;时值存储单元地址送R0

LCALLDAAD1;调加1子程序

MOVA,R3;时值加1后的值送累加器A

XRLA,#24H

JNZKEYBO;时值是否到24时,否返回

LCALLCLR0;时值存储单元清零

KEYBO:

MOV7DH,35H

MOV7EH,36H

KEYBOO:

LJMPLOOP;返回监控程序

;C键功能子程序****************************************************

KEYC:

JB8CH,KEYCO;定时器是否运行,否跳转

JNB21H.0,KEYCOO

MOVR0,#34H;分值存储单元地址送R0

LCALLDAAD1;调加1子程序

MOVA,R3;分值加1后的值送累加器A

XRLA,#60H

JNZKEYCO;分值是否到60分,否返回

LCALLCLR0;分值存储单元清零

KEYCO:

MOV7CH,34H

MOV7BH,33H

KEYCOO:

LJMPLOOP;返回监控程序

;D键功能子程序****************************************************

KEYD:

JB8CH,KEYDO;定时器是否运行,否跳转

JNB21H.0,KEYDOO

MOVR0,#32H;秒值存储单元地址送R0

LCALLDAAD1;调加1子程序

MOVA,R3;秒值加1后的值送R0

XRLA,#60H

JNZKEYDO;秒值是否到60秒,否返回

LCALLCLR0;秒值存储单元清0

KEYDO:

MOV79H,31H

MOV7AH,32H

KEYDOO:

LJMPLOOP;返回监控程序

;中断服务程序******************************************************

PITO:

PUSHPSW;中断服务程序,现场保护

PUSHA

SETBRS0;选第三组通用寄存器

SETBRS1

MOVTL0,#0DCH;计数器重新加载

MOVTH0,#0BH

MOVA,30H;循环次数减1

DECA

MOV30H,A

JNZRETO;不满16次,转RET0返回

MOV30H,#10H;满16次开始计时操作

MOVR0,#32H;秒显示单元地址

ACALLDAAD1;秒加1

MOVA,R3;加1后秒值在R3中

XRLA,#60H;判是否到60秒

JNZRETO;不到转RET0返回

ACALLCLR0;到60秒显示单元清0

MOVR0,#34H;分显示单元地址

ACALLDAAD1;分加1

MOVA,R3;加1后分值在R3中

XRLA,#60H;判是否到60分

JNZRETO;不到转RET0返回

ACALLCLR0;到60分显示单元清0

MOVR0,#36H;时显示单元地址

ACALLDAAD1;时加1

MOVA,R3;加1后时值在R3中

XRLA,#24H;判是否到24时

JNZRETO;不到转RET0返回

ACALLCLR0;到24时显示单元清0

RETO:

CLRRS0;返回第0组通用寄存器

CLRRS1

POPA;现场恢复

POPPSW

MOV79H,31H;时、分、秒值放缓冲区

MOV7AH,32H

MOV7BH,33H

MOV7CH,34H

MOV7DH,35H

MOV7EH,36H

RETI;中断返回

;加1子程序*******************************************************

DAAD1:

MOVA,@R0;加1子程序,十位送A

DECR0

SWAPA;十位数占高4位

ORLA,@R0;个位数占低4位

ADDA,#01H;加1

DAA;十进制调整

MOVR3,A;全值暂存R3中

ANLA,#0FH;屏蔽十位数,取出个位数

MOV@R0,A;个位值送显示缓冲单元

MOVA,R3

INCR0

ANLA,#0F0H;屏蔽个位数取出十位数

SWAPA;使十位数占低四位

MOV@R0,A;十位数送缓冲单元

RET;返回

CLR0:

CLRA;清缓冲单元子程序

MOV@R0,A;十位缓冲单元清“0”

DECR0

MOV@R0,A;个位数缓冲单元清“0”

RET;返回

;键盘扫描子程序***************************************************

KEY:

LCALLKEYCHULI;调键值处理子程序

JZEXIT;没有键按下转到返回

LCALLDIR

LCALLDIR;调显示去抖动

LCALLKEYCHULI;调键值处理子程序

JZEXIT;没有键按下转到返回

MOVB,20H;保存键值

KEYSF:

LCALLKEYCHULI;调键值处理子程序

JZKEY1;键释放,转到恢复键值

LCALLDIR;调显示子程序延时

AJMPKEYSF;等到键释放

KEY1:

MOV20H,B;键值送20H单元保存

EXIT:

RET;返回

KEYCHULI:

PUSHPSW;保护现场

CLRRS1;改变寄存器组号

SETBRS0

MOVP1,#0FFH;先向P1口写1

MOVA,P1;P1口值送累加器A

CPLA;A值取反

ANLA,#0FH;保存P1口的低4位

MOV20H,A;A值送20H保存

CLRRS1;改变寄存器组号

CLRRS0

POPPSW;恢复现场

RET

;显示子程序********************************************************

DIR:

PUSHPSW;恢复现场

SETBRS1;改变寄存器组号

CLRRS0

MOVR0,#79H;建立显示缓冲区首地址

MOVR3,#0FBH;设置位控码

LD0:

MOVP2,R3;送位控码

MOVA,@R0;缓冲区值送累加器A

DISP1:

ADDA,#1BH

MOVCA,@A+PC;取段控码并送A中

DISP2:

MOVP0,A;送段控码

MOVR2,#09H;设置延时循环次数

ACALLDEY;延时点亮

INCR0;缓冲区地址加1

MOVA,R3;位控码送A

JNBACC.1,HERE;是否到最高位,是转到返回

JBACC.5,LD2

RLA

RLA;不到向显示器高位移位

LD2:

RLA

MOVR3,A;位控值保存到R4中

AJMPLD0;继续扫描

HERE:

CLRRS0;改变寄存器组号

CLRRS1

POPPSW;恢复现场

RET;返回

DBB:

DB0C0H

DB0F9H

DB0A4H

DB0B0H

DB99H

DB92H

DB82H

DB0F8H

DB80H

DB90H

DB0CH

DB0FFH

;延时子程序********************************************************

DEY:

PUSH12H

DEY0:

PUSH12H

DEY1:

PUSH12H

DEY2:

DJNZR2,DEY2

POP12H

DJNZR2,DEY1

POP12H

DJNZR2,DEY0

POP12H

DJNZR2,DEY

RET

END

9.误差分析

在上面的章节中已经介绍过,本电子钟设计是使用单片机的定时/计数器0在工作方式1下定时62.5ms,根据定时时间和单片机最小系统的时钟周期(1μs)使定时/计数器0重复中断16次就是一秒的时间了。

定时/计数器0每产生一个中断就定时62.5ms,当产生一次中断后,定时/计数器0并没有马上被赋予原来产生62.5ms的初值,而是在中断服务程序中重新赋的初值,因而使用定时/计数器实现电子钟的运行存在着一定的误差。

一个62.5ms产生后,到下一个62.5ms开始计数,中间单片机要执行电子钟程序中的指令如下所示:

ORG000BH

AJMPPITO;转到定时器0中断

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

当前位置:首页 > 总结汇报 > 工作总结汇报

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

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