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

上传人:b****4 文档编号:5040306 上传时间:2022-12-12 格式:DOCX 页数:15 大小:140.04KB
下载 相关 举报
基于单片机的电子时钟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位LED数码管显示.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子时钟6位LED数码管显示.docx(15页珍藏版)》请在冰豆网上搜索。

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

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

 

数码管显示电子时钟设计

一.功能要求

1.数字电子时钟最主要是LED数码管显示功能,以24小时为一个周期,显示时间时、分、秒。

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

.方案论证

1.数字时钟方案

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

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

方案一:

本方案采用Dallas公司的专用时钟芯片DS12887A该芯片内部采用石英晶体振荡器,其芯片精度不大于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、BC构成键盘电路。

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

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

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

3.系统硬件电路的设计

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

单片机

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

图1硬件电路方框图

1.单片机模块设计

1.1芯片分析

AT89C51单片机引脚图如下:

U1

12-

Pl.t

P3.4/TD

PIS

P3JSHT1

PIT

P3J/RT

Pl_23

COi

再DV

31d

通D3z

36DO

3*D$z

33DSz

32肌

21RS#

22ffiWz

27

21

25

3

ID

11

12

O

H

15

16

17

39

图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已被归入特殊功能寄存器之列。

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

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

 

±-士±-7亍一

21

±±±嗤兰蚩±嗚

U

POO^Dn

fUMD!

帀希财

R5T

PD4AD4.

PDSkDE

P2IMWPZVMpza^iQ023^11

MUE

毗比惶

win

?

2£All

PZTAI6

PMK=CD

*1.1

P^.lfDCD

9]Z

fl3

pjjwiifr

ill1

#l£

P3E/F1

PSJ&rifl-

PI?

pjjnnr

3T

1.3按键模块

键。

UHCH

下图为按键模块电路原理图,

图3数码显示电路

A为复位键,B为时钟调控键,C为分钟调控

按键模块电路原理图

 

4.系统程序的设计

软件设计分析

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

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

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

图5系统总体流程图

5.调试及性能分析

电子时钟主要的设计要求是能够实现时钟的一般功能,以及包括时间的调整功能,这个

基于单片机的电子时钟基本上实现了上述功能,能够通过时间调整电路对时间进行调整以及

复位。

下述为18:

30:

30的仿真图:

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

检查无误后插上AT89S51

并烧写一简易的程序,观察电路是否能协同工作。

最后烧写工作程序,根据显示现象调试程

序直至成功。

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

00:

00,时钟开始走时。

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

由于对C语言知识的薄弱,所以在编译过

程中总是有很多语法上的错误,但是在和同学一起讨论研究后,程序是编写出来了,但结合到硬件调试中又出现各种问题。

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

经过检查及修改,

终于完成了所做的设计,不容易啊。

6.控制源程序清单

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

/*七段共阴管显示定义*/ucharcodedispcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,

0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF};

/*定义并初始化变量*/ucharseconde=0;ucharminite=O;

ucharhour=12;ucharmstcnt=O;

sbitP1_0=P1A0;

sbitP1_仁P1A1;

sbitP1_2=P“2;

/*函数声明*/

voiddelay(uchark);voidtime_pro();//voiddisplay();//

//second

调整定义

//minite

调整定义

//hour

调整定义

//延时子程序

时间处理子程序

显示子程序

//键盘扫描子程序

voidkeyscan();

*************************

/*延时子程序*/

************************

voiddelay(uchark)

{

ucharj;

while((k--)!

=0)

{

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

{;}

}

}

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

/*时间处理子程序*/

]************************》

voidtime_pro(void)

{

if(seconde==60){seconde=0;

minite++;

if(minite==60)

{minite=O;

hour++;

if(hour==24)

{hour=0;}

//

//

//

秒钟设为60进制

分钟设为60进制

时钟设为24进制

 

 

}

*************************

I*显示子程序*/

*************************

voiddisplay(void)

P2=0xfe;

P0=dispcode[hour/10];//

delay(4);

P2=0xfd;

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

delay(4);

P2=0xfb;

P0=dispcode[minite/1O];//

delay(4);

P2=0xf7;

P0=(dispcode[minite%10])|0X80;//

delay(4);

P2=0xef;

P0=dispcode[seconde/10];//

delay(4);

P2=0xdf;

P0=dispcode[seconde%10];//

delay(4);

}

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

/*键盘扫描子程序*/

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

voidkeyscan(void)

{

if(P1_O==O)//

{

delay(30);

if(P1_0==0)

{

seconde++;

if(seconde==60)

{seconde=0;}

}

}

if(P1_1==0)//

{

显示小时的十位

显示小时的个位

显示分的十位

显示分的个位

显示秒的十位

显示秒的个位

按键1秒的调整

按键2分的调整

 

delay(30);

if(P1_1==O)

{

minite++;

if(minite==60)

{minite=O;}

}

}

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

{

delay(30);

if(P1_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;II注意点。

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

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

}

**********************

I*主函数*/

**********************

voidmain(void)

 

TL0=0xb0;

EA=1;

ET0=1;

TR0=1;

while

(1){

keyscan();//按键扫描

time_pro();//时间处理

display();//显示时间

}

}

附录.元器件清单

序号

元件名称

规格型号/参数

数量(个)

备注

1

单片机

AT89S52

1

2

显示驱动三极管

A1013

6

3

电容

30pF

2

4

电容

22H

1

5

按键

BUTTON

3

6

排阻

RESPACK-8/10K

1

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

当前位置:首页 > 求职职场 > 简历

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

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