基于单片机的电子时钟6位LED数码管显示.docx

上传人:b****2 文档编号:150378 上传时间:2023-04-28 格式:DOCX 页数:15 大小:262.90KB
下载 相关 举报
基于单片机的电子时钟6位LED数码管显示.docx_第1页
第1页 / 共15页
基于单片机的电子时钟6位LED数码管显示.docx_第2页
第2页 / 共15页
基于单片机的电子时钟6位LED数码管显示.docx_第3页
第3页 / 共15页
基于单片机的电子时钟6位LED数码管显示.docx_第4页
第4页 / 共15页
基于单片机的电子时钟6位LED数码管显示.docx_第5页
第5页 / 共15页
基于单片机的电子时钟6位LED数码管显示.docx_第6页
第6页 / 共15页
基于单片机的电子时钟6位LED数码管显示.docx_第7页
第7页 / 共15页
基于单片机的电子时钟6位LED数码管显示.docx_第8页
第8页 / 共15页
基于单片机的电子时钟6位LED数码管显示.docx_第9页
第9页 / 共15页
基于单片机的电子时钟6位LED数码管显示.docx_第10页
第10页 / 共15页
基于单片机的电子时钟6位LED数码管显示.docx_第11页
第11页 / 共15页
基于单片机的电子时钟6位LED数码管显示.docx_第12页
第12页 / 共15页
基于单片机的电子时钟6位LED数码管显示.docx_第13页
第13页 / 共15页
基于单片机的电子时钟6位LED数码管显示.docx_第14页
第14页 / 共15页
基于单片机的电子时钟6位LED数码管显示.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的电子时钟6位LED数码管显示.docx

《基于单片机的电子时钟6位LED数码管显示.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子时钟6位LED数码管显示.docx(15页珍藏版)》请在冰点文库上搜索。

基于单片机的电子时钟6位LED数码管显示.docx

基于单片机的电子时钟6位LED数码管显示

数码管显示电子时钟设计

一•功能要求

1•数字电子时钟最主要是LED数码管显示功能,以24小时为一个周期,显示时

间时、分、秒。

2.具有校时功能,可以对时、进行单独校对,使其校正到标准时间。

二•方案论证

1.数字时钟方案

数字时钟是本设计的最主要的部分。

根据需要,可利用两种方案实现。

方案一:

本方案采用Dallas公司的专用时钟芯片DS12887AO该芯片部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。

为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片部包含锂电池。

当电网电压不足或突然掉电时,系统自动转换到部锂电池供电系统。

而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。

方案二:

本方案完全用软件实现数字时钟。

原理为:

在单片机部存储器设三个字节分别存放时钟的时、分、秒信息。

利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。

该方案具有硬件电路简单的特点。

但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。

而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。

基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。

2.数码管显示方案

方案一:

静态显示。

所谓靜态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。

该方式每一位都需要一个8位输出口控制。

静态显示时较小的电流能获得较高的亮度,且字符不闪烁。

但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。

方案二:

动态显示。

所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。

利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。

显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。

调整参数可以实现较高稳定度的显示。

动态显示节省了I/O口,降低了能耗。

从节省I/O口和降低能耗出发,本设计采用方案二。

3.计时方案

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

该方案节省硬件成本,且能使读者在定时/计数器的使用、中断及程序设计方面得到锻炼与提高,对单片机的指令系统能有更深入的了解,从而对学好单片机技术这门课程起到一定的作用。

4.控制方案

AT89S51的P0口和P2口外接由八个LED数码管(LED8〜LED1)构成的显示器,用P0口作LED的段码输出口,P2口作八个LED数码管的位控输出线,P1口外接四个按键A、B、C构成键盘电路。

AT89S51是一种低功耗,高性能的CMOS8位微型计算机。

它带有8KFlash可编程和擦除的只读存储器(EPROM),该器件采用ATMEL的高密度非易失性存储器技术制造,与工业上标准的80C51和80C52的指令系统及引脚兼容,片Flash集成在一个芯片上,可用与解决复杂的问题,且成本较低。

简易电子钟的功能不复杂,采用其现有的I/O便可完成,所以本设计中采用此的设计方案。

三•系统硬件电路的设计

根据以上的电子时钟的设计要求可以分为以下的几个硬件电路模块:

单片机模块、数码显示模块与按键模块,模块之间的关系图如下面得方框电路图1所示

图1硬件电路方框图

1.单片机模块设计

1.1芯片分析

AT89C51单片机引脚图如下:

图2AT89C51引脚图

MCS-51单片机是标准的40引脚双列直插式集成电路芯片,其各引脚功能如下:

VCC:

+5V电源。

VSS:

接地。

RST:

复位信号。

当输入的复位信号延续两个机器周期以上的髙电平时即为有效,用完成单片机的复位初始化操作。

XTAL1和XTAL2:

外接晶体引线端。

当使用芯片部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。

P0口:

P0口为一个8位漏极开路双向I/O口,当作输出口使用时,必须接上拉电阻才能有高电平输出;当作输入口使用时,必须先向电路中的锁存器写入"1”,使FET截止,以避免锁存器为"0”状态时对引脚读入的干扰。

P1口:

P1口是一个部提供上拉电阻的8位双向I/O口,它不再需要多路转接电路MUX;因此它作为输出口使用时,无需再外接上拉电阻,当作为输入口使用时,同样也需先向其锁存器写"1”,使输出驱动电路的FET截止。

P2口:

P2口电路比P1口电路多了一个多路转接电路MUX,这又正好与P0口一样。

P2口可以作为通用的I/O口使用,这时多路转接电路开关倒向锁丰存器Q端。

P3口:

P3口待点在于,为适应引脚信号第二功能的需要,增加了第二功能控制逻辑。

当作为I/O口使用时,第二功能信号引线应保持高电平,与非门开通,以维持从锁存器到输出端数据输出通路的畅通。

当输出第二功能信号时,该位应应置“1”,使与非门对第二功能信号的输出是畅通的,从而实现第二功能信号的输出。

MCS-51单片机共有4个双向的8位并行I/O端口(Port),分别记作P0-P3,共有32根口线,各口的每一位均由锁存器、输出驱动器和输入缓冲器所组成。

实际上P0-P3已被归入特殊功能寄存器之列。

这四个口除了按字节寻址以外,还可以按位寻址。

由于它们在结构上有一些差异,故各口的性质和功能有一些差异。

P0口是双向8位三态I/O口,此口为地址总线(低8位)及数据总线分时复用口,可驱动8个LS型TTL负载。

P1口是8位准双向I/O口,可驱动4个LS型负载。

P2口是8位准双向I/O口,与地址总线(高8位)复用,可驱动4个LS型TTL负载。

P3口是8位准双向I/O口,是双功能复用口,可驱动4个LS型TTL负载。

P1口、P2口、P3口各I/O口线片均有固定的上拉电阻,当这3个准双向I/O口做输入口使用时,要向该口先写“1”,另外准双向I/O口无高阻的“浮空”状态,故称为双向三态I/O口。

时钟电路用于产生MCS-51单片机工作时所必需的时钟信号。

MCS-51单片机本身就是一个复杂的同步时序电路,为保证同步工作方式的实现,MCS-51单片机应在唯一的时钟信号控制下,严格地按时序执行进行工作,而时序所研究的是指令执行中各个信号的关系。

在执行指令时,CPU首先要到程序存储器中取出需要执行的指令操作码,然后译码,并由时序电路产生一系列控制信号去完成指令所规定的操作。

CPU发出的时序信号有两类,一类用于片对各个功能部件的控制,这列信号很多。

另一类用于片外存储器或I/O端口的控制,这部分时序对于分析、设计硬件接口电路至关重要。

这也是单片机应用系统设计者普遍关心的问题。

1.2数码显示模块设计

系统采用动态显示方式,用P0口来控制LED数码管的段控线,而用P2口来控制其位控线。

动态显示通常都是采用动态扫描的方法进行显示,即循环点亮每一个数码管,这样虽然在任何时刻都只有一位数码管被点亮,但由于人眼存在视觉残留效应,只要每位数码管间隔时间足够短,就可以给人以同时显示的感觉。

图3数码显示电路

1.3按键模块

下图为按键模块电路原理图,A为复位键,B为时钟调控键,C为分钟调控

键。

图4按键模块电路原理图

4.系统程序的设计

软件设计分析

显示的效果为动态显示,利用CPU控制数码管显示的选通和停止,通过定时器中断不断扫描,从而实现数据的动态显示。

在编程上,首先进行了初始化,定义程序的的入口地址以及中断的入口地址,在主程序开始定义了一组固定单元用来储存计数的时.分.秒,在显示初值之后,进入主循环。

在主程序中,对不同的按键进行扫描,实现秒表,时间调整,复位清零等功能,系统总流程图如下图5:

图5系统总体流程图

5.调试及性能分析

6.

电子时钟主要的设计要能够实现时钟的一般功能,以及包括时间的调整功能,这个基于单片机的电子时钟基本上实现了上述功能,能够通过时间调整电路对时间进行调整以及复位。

下述为18:

30:

30的仿真图:

首先确保各器件的完好性,其次检测各芯片的电源线和地线是否接触良好,然后焊接器件,接好电源用万用表检测各电源端、地端的状态是否正常。

检查无误后插上AT89S51并烧写一简易的程序,观察电路是否能协同工作。

最后烧写工作程序,根据显示现象调试程序直至成功。

上电运行时,数码管开始显示00:

00:

00,时钟开始走时。

程序的编写和调试是一个比较复杂的过程。

由于对C语言知识的薄弱,所以在编译过程中总是有很多语法上的错误,但是在和同学一起讨论研究后,程序是编写出来了,但结合到硬件调试中又出现各种问题。

在调试过程中出现了很多问題,在第一次把程序烧到单片机里,通电运行时,虽然控制时、分、秒的按钮能够对数码管显示进行调整,但是数码管全亮,不能通过按键变化显示,更改程序中的问题,但是调时设置又没有用了。

经过检查及修改,终于完成了所做的设计,不容易啊。

7.控制源程序清单

#include〈reg51・h>#include〈3bsacc.h>

#defineucharunsignedcharitdefineuintunsignedint

/*七段共阴管显示定义*/

ucharcodedispcodeE]=(0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x0710x7F10x6F,

0xBF,0x86,0xCB,OxCF,OxEF,OxED.OxFD,0x87tOxFF.OxDF};

/*定义并初始化变量权

ucharseconde=0;

ucharminite^O;

ucharhour=12;

ucharmstcnt二0;

sbitPl_0二P「0;sbitpii=pri;

sbitPl2二P「2;

/*函数声明*/

voiddelay(uchark);//延时子程序

voidtime_pro();//时间处理子程序

voiddisplay():

//显示子程序

voidkeyscan();

〃键盘扫描子程序

/*****************************/

/*延时子程序*/

/♦***************************/voiddelay(uchark)

{

ucharj;while((k--)!

=0)

{

for(j=0;j<125;j++)

{;}

}

}

/**************************/

/*时间处理子程序*/

/♦**********************♦*♦/voidtimepro(void)

//秒钟设为60进制

〃分钟设为60进制

〃时钟设为24进制

{

if(seconde—60)

{seconde=0;

minite++;

if(minite==60)

{minite二0;

hour++;

if(hour==24)

{hour二0;}

/*****************************/

/*显示子程序*/

/*****************************/

voiddisplay(void)

{

P2二Oxfe;

P0=dispcode[hour/10]:

delay(4);

P2二Oxfd;

P0=(dispcode[(hour%10)])10X80;

delay(4);

P2二Oxfb;

PO=dispcode[minite/10]:

delay(4);

//显示小时的十位

//显示小时的个位

//显示分的十位

P2二0xf7;

P0=(dispcode[minite%10])I0X80;delay(4);

P2=0xef;

PO=dispcode[seconde/10]:

delay(4);

P2二Oxdf;

PO=dispcode[seconde%10]:

delay(4);

}

/*******************************/

/*键盘扫描子程序*/

/**************************♦****/

//显示分的个位

//显示秒的十位

//显示秒的个位

voidkeyscan(void)

if(Pl0=0)

〃按键1秒的调整

delay(30);

if(Pl0=0)

}

if(Pll==0)

seconde++;

if(seconde=60)

{seconde=0;}

//按键2分的调整

 

delay(30);

if(Pl_l=0)

{

minite++;

if(minite==60)

{minite二0;}

}

}

if(Pl_2==0)//按键3小时的调整

{

delay(30):

if(Pl_2=0)

{

hour'++;

if(hour==24)

{hour=0;}

}

}

}

voidtimerO(void)interrupt1using0//定时器0方式1,50ms中断一次

{

TH0=0x3c;

TMOD=0x11;

mstcnt++;

if(mstcnt==20)

{

seconde++;

mstcnt=0;//注意点。

对计数单元的清零十分的重要,本次调试中就是

}//因为忽略了这一点,给我早成了很大的被动。

}

/♦♦♦Me**********************/

/*主函数*/

/♦♦♦Me**********************/

voidnuiin(void)

(Pl=0xff;//初始化pl口,全设为1

TMOD=0x11;//time0为定时器,方式1

TH0二0x3c;//预置计数初值

TL0=0xb0;

EA=1;

ETO二1;

TRO二1;

while

(1)

keyscan();//按键扫描

timepro();〃时间处理display();〃显示时间

}

}

附录•元器件清单

序号

元件名称

规格型号/参数

数量(个)

备注

1

单片机

AT89S52

1

2

显示驱动三极管

A1013

6

3

电容

30pF

2

4

电容

22nF

1

5

按键

BUTTON

3

6

排阻

RESPACK-8/10K

1

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

当前位置:首页 > 人文社科

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

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