数字电子钟.docx

上传人:b****6 文档编号:6001300 上传时间:2023-01-02 格式:DOCX 页数:30 大小:181.19KB
下载 相关 举报
数字电子钟.docx_第1页
第1页 / 共30页
数字电子钟.docx_第2页
第2页 / 共30页
数字电子钟.docx_第3页
第3页 / 共30页
数字电子钟.docx_第4页
第4页 / 共30页
数字电子钟.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

数字电子钟.docx

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

数字电子钟.docx

数字电子钟

数字电子钟

摘要

数字钟是对.年、月、日、周、时、分、秒,数字显示及到时提醒的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便。

最常见的数字钟通常使用单片机模块控制,一种用单片机原理实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。

本次设计就是通过用单片机为主控制,通过电路仿真而实现。

首先使用Proteus7Professional软件进行绘制硬件电路图,用keil软件进行编程与调试,最终生成hex文件,传入单片机内部,从而实现仿真效果。

此次设计的多功能数字时钟具有显示年、月、日、周、时、分、秒及对各日期与时间的调整、校正功能。

整个时钟通过简易的键盘来实现各个功能,界面简洁、直观、易于操作。

关键词:

数字钟,仿真,单片机

 

目录

摘要5

第一章绪论7

第二章设计要求与方案论证8

2.1设计要求8

2.1.1基本要求8

2.1.2发挥部分8

2.2系统基本方案选择和论证8

2.2.1芯片的选择8

2.2.2显示模块选择方案和论证8

2.2.3时钟信号的选择方案和论证9

2.3电路设计最终方案决定9

第三章系统的硬件设计与实现10

3.1数字钟电路设计框图10

3.2系统硬件概述10

3.3硬件电路结构的设计10

3.3.1单片机主控制模块的设计10

3.3.2显示模块的设计11

3.3.3电路原理及其说明11

3.3.4LED原理说明14

3.3.5开关模块说明15

第四章系统的软件设计16

4.1程序流程框图16

4.2LCD的初始化与及显示程序16

附录20

第五章系统调试35

5.1硬件调试35

5.2软件调试35

结论36

致谢37

参考文献38

 

第1章绪论

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

时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。

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

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

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

下面是单片机的主要发展趋势。

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

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

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

单片机模块中最常见的是数字时钟,数字时钟是一种用单片机原理实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。

数字时钟是采用单片机原理实现对.年、月、日、周、时、分、秒,数字显示及到时提醒的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。

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

第二章数字时钟的设计

2.1设计要求

2.1.1基本要求

1设计能支持年月日星期时分秒的时钟,时钟要具有时间调整功能。

2该设计要用keil软件进行编程与调试,利用Proteus7Professional软件进行绘制硬件电路图且进行仿真。

2.1.2发挥部分

1闹钟时间精度。

2时钟功耗小于0.5MA/5V。

2.2系统基本方案选择和论证

本时钟的设计具体有两种方法。

一是通过单纯的数字电路来实现;二是使用单片机来控制实现。

本次设计选取了较为简单的单片机控制;而选择这一方法后还要进行各个芯片的选择。

以下是我在这次设计中所用的方案。

2.2.1芯片的选择

方案一:

采用AT89C51芯片,其为高性能CMOS8位单片机,该芯片内含有4kbytes的可反复擦写的只读程序存储器(PEROM)、128bytes的随机存取数据存储器(RAM)、32位可编程I/O口线、2个16位定时/计数器、6个中断源、可编程串行UART通道及低功耗空闲和掉电模式,但是由于AT89C51芯片可擦写的空间不够大,且中断源提供的较小,为防止运行过程中出现不必要的问题,我们不选用AT89C51。

方案二:

采用AT89C52芯片,它除了具备AT89C51的所有功能与部件外,其最大的优势就是AT89C52提供了8K字节可擦写Flash闪速存储器空间、8个中断源、及256*8字节内部存储器(RAM),解决了我们对可反复擦写的Flash闪速存储器空间大小与中断源的不够问题的担心。

2.2.2显示模块选择方案和论证

方案一:

采用LED数码管显示,显示较为清楚,但是由于设计要求时钟功能比较重要,因此用如用LED进行显示会使得硬件电路较为复杂,且在软件实现上也较难,为实现功能带来了一定的困难。

方案二:

采用LCD,电路比较简单,且在软件设计上也相对简单,具有低功耗功能,能够满足设计最优的要求。

因此,在设计中我采用的显示模块是LCD显示。

2.2.3时钟信号的选择方案和论证

方案一:

直接采用单片机定时计数器提供的秒信号,使用程序实现年、月、日、周、时、分、秒计数。

采用此种方案可减少芯片的使用,节约成本,实现的时间误差较小,但程序设计较为复杂。

方案二:

采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,256位的RAM作为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA。

且硬件电路连接较为简单,程序设计容易实现。

2.3电路设计最终方案决定

综上各方案所述,对此次数字时钟的方案选定为:

采用AT89C52作为主控制系统;并由其定时计数器提供时钟;LCD作为显示电路,来实现功能。

第三章系统的硬件设计与实现

3.1数字钟电路设计框图

图(3-1)电路设计框图

3.2系统硬件概述

该电路是由AT89C52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路也由AT89C52单片机提供,减少芯片的使用,节约成本,它可以对年、月、日、周、日、时、分、秒进行计时,具有闰年补偿功能。

时间显示部份采用液晶LM016L(LCD)。

3.3硬件电路结构的设计

3.3.1单片机主控制模块的设计

此次单片机数字时钟的设计采用AT89C52为主控制芯片,并由其定时器提供时钟,利用LCD进行时间按显示。

下图为用Proteus软件画的原理图:

图(3-2)仿真电路图

3.3.2显示模块的设计

如图(3-4)所示,该设计采用液晶显示装置即把时钟信号以及温度信号同时显示在液晶显示器上,不仅结构简单清新可见,而且省电也容易控制。

数据的传输采用P0口进行控制,其引脚VSS接地,VEE接VCC,RS和RW、E是显示器的控制端分别由单片机的引脚P1.0、P1.1、P1.3进行控制。

而VDD是作为液晶显示器的灰度调节引脚,接一变阻器来改变其显示的清晰度。

图(3-3)LM016L液晶显示器

3.3.3电路原理及其说明

1主控制芯片AT89C52的原理及说明

AT89C52是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的只读程序存储器(PEROM)和蔼可亲256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C52单片机适合于许多较为复杂控制应用场合。

图(3-4)AT89C52引脚

2主要性能参数:

与MCS-51产品指令和引脚完全兼容

8k字节可重擦写Flash闪速存储器

1000次擦写周期

全静态操作:

0Hz—24MHz

三级加密程序存储器

256×8字节内部RAM

32个可编程I/O口线

3个16位定时/计数器

8个中断源

可编程串行UART通道

低功耗空闲和掉电模式

3引脚功能

Vcc(40):

电源电压GND(20):

接地

P0口(32-39):

P0口是一个8位双向I/O接口,也即地址/数据总线复用口。

作为输出口用时,每位吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。

在访问外部数据存储器时,这组口线分时转换地址(低8位)和数据总线复用。

P1口(1-8):

P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路,对端口写“1”通过内部的上拉电阻把端口拉到高电平时,此时可作输入口。

作为输入品使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。

与AT89C51不同之处是,P1.0和P1.1还可以分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX)。

P2口(21-28):

P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路,对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平时,此时可作输入口。

作为输入品使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。

在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。

在访问8位地址的外部数据存储器时,P2口输出P2锁存器的内容。

P3口(10-17):

P3是一组带有内部上拉电阻的8位双向I/O口,P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路,对端口P3写“1”时,它们被内部上拉电阻拉高并可作为输入端口,此时,被外部拉低的P3口将用上拉电阻输出电流。

P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如下表所示:

端口引脚

第二功能

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(外部数据存储器读通道)

表3-1P3口的第二功能

RST(9):

复位信号输入端。

当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

ALE/PROG(30):

地址锁存有效信号输出端。

当访问片外程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节,一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的,要注意的是:

每当访问外部数据存储器时将跳过一个ALE脉冲。

PSEN(29):

程序存储允许输出端。

是片外程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个周期两次PSEN有效,即输出两个脉冲。

在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

EA/VPP(31):

外部访问允许。

欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地),需注意的是:

如果加密位LB1被编程,复位时内部会锁EA端状态。

如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。

Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。

XTAL1(19):

振荡器反相放大器的及内部时钟发生器的输入端。

XTAL1(18):

振荡器反相放大器的输出端。

通过XTAL1、XTAL2外接晶振后,即可构成自激振荡器,驱动内部时钟发生器向主机提供时钟信号。

4特殊功能寄存器

在AT89C52片内存储器中,80H-FFH共128个单元为特殊功能寄存器(SFR),其中包括B寄存器、累加器、程序状态寄存器(PSW)、定时/计数器控制、中断优级控制寄存器(IP)、P3口锁存寄存器、中断允许控制寄存器(IE)、串行口控制寄存器等。

它们可运用来设置片内电路的运行方式,记录电路的运行状态,MCS-51单片机对特殊功能寄存器采取与片内RAM统一编址的方法,可按字节地址直接寻址。

在已有的基础上AT89C52与AT89C51相比还提供了两个定时/计数器。

定时/计数器2的控制和状态位位于T2CON与T2MOD,该功能的数在自动装载的情况下可装入到寄存器中,提高了效率。

3.3.4LCD原理说明

在实际应用中,用户很少直接设计LCD显示器驱动接口,一般是直接使用专用的LCD显示驱动器和LCD显示模块。

其中,LCD显示模块LCM(Liquid Crystal Display Module)是把LCD显示器、背景光源、线路板和驱动集成电路等部件构成一个整体,作为一个独立的部件使用,具有功能较强、易于控制、接口简单等优点,在单片机系统中应用较多。

其内部结构如图2-8所示。

LCD显示模块只留一个接口与外部通信。

显示模块通过这个接口接收显示命令和数据,并按指令和数据的要求进行显示。

外部电路通过这个接口读出显示模块的工作状态和显示数据。

LCD显示模块一般带有内部显示RAM和字符发生器,只要输入ASCII码就可以进行显示。

LCD显示模块按功能显示可分为:

LCD段式显示模块、LCD字符型显示模块、LCD图形显示块三类。

液晶显示器因其功耗低、重量轻而成为便携式应用中的主流显示技术。

这里所用的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等。

液晶显示有点振式和字符式两种,在这里采用字符式液晶显示器1602来实现显示电路的功能。

图(3-4)LCD显示电路

由于1602液晶显示器是本身带有驱动模块的液晶屏,它只有并口线和一些控制线,与单片机的连接有两种不同的方法,直接访问方式和间接访问方式。

直接访问方式就是微处理器把液晶显示模块当作存储器或I/O设备直接挂在总线上,模块8位数据总线与微处理器的数据总线相连,用读操作 或写操作 信号与地址信号共同产生控制信号。

3.3.5开关模块说明

校时电路主要靠键盘来控制。

键盘是一组按键的集合。

共有四个按键,分别是:

改变时间、增加、减少、清零。

它是嵌入式计算机系统中不可缺少的外围电路。

是实现人机对话的纽带,借助键盘可以向计算机输入程序、置数、逻辑操作以及写入程序和程序检测等。

第四章系统的软件设计

4.1程序流程框图

图(4-1)主程序流程

4.2LCD的初始化与及显示程序

1LCD的初始化

voidini()/*LCD的初始化函数

{

rw=0;

en=0;

P1=0xff;

writeCG();

write_order(0x38);/*端口写入

write_order(0x0c);/*端口写入

write_order(0x06);/*端口写入

write_order(0x01);/*端口写入

}

2LCD的显示程序

voidopen()/*定义一个LCD显示函数

{

ucharnum;/*定义一个无符号的字符变量num

write_order(0x80+0x10);/*调用write_order函数

for(num=0;opens[num]!

='\0';num++)/*循环打开

{

write_date(opens[num]);

delay(20);

}

for(num=0;num<16;num++)/*对端口0x1c写入

{

write_order(0x1c);

delay(200);

}

for(num=0;num<5;num++)/*对端口0x18写入{

write_order(0x18);

delay(200);

}

for(num=0;num<4;num++)/*对端口0x18写入

{

write_order(0x1c);

delay(200);

}

for(num=0;num<3;num++)/*对端口0x18写入

{

write_order(0x18);

delay(200);

}

for(num=0;num<2;num++)/*对端口0x1c写入

{

write_order(0x1c);

delay(200);

}

for(num=0;num<1;num++)/*对端口0x18写入

{

write_order(0x18);

delay(100);

}

write_order(0x80+0x53);

for(num=0;opens1[num]!

='\0';num++)/*循环延时写入数据

{write_date(opens1[num]);

delay(500);}

}

附录

主程序:

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitlcdrs=P3^5;

sbitlcden=P3^4;

sbitdula=P2^6;

sbitwela=P2^7;

sbits0=P1^0;

sbits1=P1^1;

sbits2=P1^2;

sbits3=P1^3;

ucharcodetable1[]="2008-08-28Wen";

ucharcodetable2[]="21:

31:

30";

ucharnum,t0;

charsec,minute,hour,day,week,month;

uintyear;

voiddelay(ucharz)

{

ucharx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

//写入指令子函数

voidwrite_order(ucharorder)

{

lcdrs=0;

P0=order;

delay

(2);

lcden=1;

delay

(2);

lcden=0;

}

//写入数据子函数

voidwrite_data(uchardata1)

{

lcdrs=1;

P0=data1;

delay

(2);

lcden=1;

delay

(2);

lcden=0;

}

//初始化子函数

voidinit()

{

sec=0;

minute=0;

hour=0;

week=0;

day=1;

month=1;

year=2008;

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

wela=0;

dula=0;

lcden=0;

write_order(0x38);//设置显示模式

write_order(0x0c);//开显示开光标,光标闪烁

write_order(0x01);//显示清屏

write_order(0x06);//光标显示效果

write_order(0x80);//定义第一行写入数据的地址

for(num=0;num<14;num++)

{

write_data(table1[num]);

delay

(2);

}

write_order(0x80+0x43);//定义第一行写入数据的地址

for(num=0;num<8;num++)

{

write_data(table2[num]);

delay

(2);

}

}

voidchange(ucharaddr,uchardata1)//改变时分秒天月的子函数

{

ucharx,y;

x=data1/10;

y=data1%10;

write_order(0x80+addr);

delay

(1);

write_data(0x30+x);

delay

(1);

write_data(0x30+y);

delay

(1);

}

voidyearchange(ucharaddr,uintyear)//改变年的子函数

{

ucharx,y,z,w;

x=year/1000;

y=year%1000/100;

z=year%100/10;

w=year%10;

write_order(0x80+addr);

delay

(1);

write_data(0x30+x);

delay

(1);

write_data(0x30+y);

delay

(1);

write_data(0x30+z);

delay

(1);

write_data(0x30+w);

delay

(1);

}

voidweekchange(ucharz)//改变周数的子函数

{

switch(z)

{

case0:

{

write_order(0x80+0x0b);

delay

(1);

write_data('M');

delay

(1);

write_data('o');

delay

(1);

write_data('n');

delay

(1);

}

break;

case1:

{

write_order(0x80+0x0b);

delay

(1);

write_data('T');

delay

(1);

write_data('u');

delay

(1);

write_data('e');

delay

(1);

}

break;

case2:

{

write_order(0x80+0x0b);

delay

(1);

write_data('W');

delay

(1);

write_data('e');

delay

(1);

write_data('n');

delay

(1);

}

break;

case3:

{

write_order(0x80+0x0b);

delay

(1);

write_data('T');

delay

(1);

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

当前位置:首页 > 自然科学

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

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