数码管电子时钟.docx

上传人:b****3 文档编号:5484722 上传时间:2022-12-17 格式:DOCX 页数:17 大小:424.84KB
下载 相关 举报
数码管电子时钟.docx_第1页
第1页 / 共17页
数码管电子时钟.docx_第2页
第2页 / 共17页
数码管电子时钟.docx_第3页
第3页 / 共17页
数码管电子时钟.docx_第4页
第4页 / 共17页
数码管电子时钟.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

数码管电子时钟.docx

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

数码管电子时钟.docx

数码管电子时钟

目录

第一章概述1

1.1课题的要求1

1.2课题的目的及意义1

第二章系统总体方案设计2

2.1总体设计框图2

2.1功能键电路设计框图2

第三章系统硬件设计3

3.1单片机的选择3

3.2时钟电路设计3

3.3LED显示电路设计3

3.4蜂鸣器电路设计5

3.5晶振电路和上电复位5

第四章软件设计及调试6

4.1具体程序设计分析6

4.2主程序6

4.3时钟程序7

4.4按键扫描程序7

第五章系统仿真与使用说明8

5.1系统仿真8

5.2使用说明9

总结与体会10

参考文献11

附录A系统原理图12

附录B程序代码13

第一章概述

1.1简介

1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。

现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。

从而达到计时的功能,是人民日常生活不可缺少的工具。

现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。

1.2课题设计的要求

本课题要求以单片机为核心设计一个电子时钟,要求开机时显示00:

00:

00的时间开始计时,能对分、时、秒进行调节,具有复位功能。

1.3课题设计的目的及意义

课题设计的目的:

1)掌握用51单片机控制LED数码管显示字符的方法和驱动方法。

2)掌握用单片机进行显示系统开发的方法。

3)掌握单片机软件、硬件调试技术。

课题设计的意义:

通过该课程的学习使我们对计算机控制系统有一个全面的了解、掌握常规控制算法的使用方法、掌握简单微型计算机应用系统软硬的设计方法,进一步锻炼同学们在微型计算机应用方面的实际工作能力。

第二章系统总体方案设计

2.1电路设计框图

2.2功能键电路

第三章系统硬件设计

3.1单片机的选择

采用STC89C52RC单片机作为硬件核心,该单片机指令代码完全兼容传统的8051单片机。

STC89C52RC的工作电压为5.5-3.4V,

工作频率范围0-80MHz,程序存储器flash容量为8KB,随机存储器RAM空间为512字节,完全满足设计电子时钟的要求。

3.2时钟电路设计

74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。

74LS245还具有双向三态功能,既可以输出,也可以输入数据。

当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。

当片选端/CE低电平有效时,DIR=“0”,信号由B向A传输;(接收)

DIR=“1”,信号由A向B传输;(发送)当CE为高电平时,A、B均为高阻态。

由于P2口始终输出地址的高8位,接口时74LS245的三态控制端1G和2G接地,P2口与驱动器输入线对应相连。

P0口与74LS245输入端相连,E端接地,保证数据线畅通。

8051的/RD和/PSEN相与后接DIR,使得RD且PSEN有效时,74LS245输入(P0.1←D1),其它时间处于输出(P0.1→D1)

图3.174LS245芯片

3.3LED显示电路设计

将数个二极管按一定的规律进行组合,就可以得到LED显示器。

它由发光二极管构成显示字段,每段由一个或几个发同种颜色的发光二极管构成。

如图1-1所示,将a~g,dp表示是的8个发光二极管的某一端连接到一起,而另一端作为控制信号的输入端,当正极引脚连接到一起时,就行成图(b)所示的共阳极数码管;反之,当负极引脚连接到一起时,形成图(a)所示的共阴极数码管。

图3.2数码管接法

共阴极数码管:

当公共连接点接地(低电平),而控制某段输入信号为高电平时,该段就会被点亮;共阳极数码管则与之相反。

图3.3数码管显示

图3.4驱动电路

3.4蜂鸣器电路设计

图3.5蜂鸣器电路图

每按一次功能键蜂鸣器都会发出一次响声(P23为低电平时蜂鸣器接通)。

3.5晶振电路和上电复位

图3.6晶振电路

图3.7上电复位电路

第四章软件设计与调试

4.1具体程序设计分析

本设计要求显示的时间为时、分、秒,并且都用两位数码管来实现显示。

因此,具体设计程序时,应尽可能多用一些子程序与数据暂存寄存器单元。

本程序设计中,在主程序之外,可以设置时间值显示子程序,按键情况扫描子程序,蜂鸣器子程序,50ms定时中断子程序以及1ms延时子程序等多个小型的子程序。

4.2主程序

一般而言,编写一个能运行在操作系统上的程序,都需要一个主函数。

主函数意味着建立一个独立进程,且该进程成为了程序的入口,对其它各函数(在某些OOP语言里称作方法,比如Java)进行调用,当然其它被调用函数也可以再去调用更多函数.......这样整个程序的运行轨迹就像一种栈,有时我们称之为调用栈。

主函数既是程序的入口,又是程序的出口,通常我们还可以指定一个exitcode再退出,以表明程序最后的结果是什么样的。

由于主函数肩负着入口和出口的重任,所以最好不要把太多的细节方面的逻辑直接放在主函数内,这样不利于维护和扩展。

主函数应该尽量简洁,图4.1主函数

具体的实现细节应该封装到被调用的子函数里面去。

此系统的主函数只包含初始化函数init(),时钟函数conv()和按键扫描函数keyscan()。

 

4.3时钟程序

图4.2时钟函数

4.4按键扫描程序

SECOND、MINUTE、HOUR3个键分别对秒、分、时加1,OFF/ON键关闭或开启调时功能;SESET是复位键。

第五章系统仿真与使用说明

5.1系统仿真

本设计是在Proteus环境下进行仿真的,仿真所用到的器件有:

单片机AT89C51,蜂鸣器,6位数码管,一些电阻,电容,三极管,电解电容等。

仿真结果如下:

开机时,时间显示为00.00.00。

图5.1初始时刻时间

RESET每按一次便复位一次,仿真如下:

图5.2复位前时间

图5.3复位后时间

SECOND、MINUTE、HOUR3个键每按一次分别对秒、分、时加1,秒、分变为59后再加1变为0,时变为23后再按HOUR键变为0;当按键次数为双数时不可以对时钟进行调整。

5.2使用说明

系统由单片机最小系统、74LS245芯片、显示电路、复位电路、时钟电路、按键等组成。

本电路是由STC89C52RC单片机为控制核心,具有与8051系列单片机完全兼容,程序加密等功能,8KB字节可编程闪存,工作电压范围为2.7~6V,全静态工作频率为0~24MHZ;时间调整按钮为四个,可以调节分、时、秒和暂停;复位电路是10K电阻构成的上电自动复位。

将编好的程序输入单片机,用计时器T0计时,每50ms计时一次20次为1s,时钟的显示是24小时显示,即显示00时至23时;分钟的显示是60分,即显示00分到59分,当满59分要没第60分钟时,显示内容为00,而同时使时钟显示值加1;秒钟的显示是60秒,即显示00秒到59秒,当满59秒要没第60秒钟时,显示内容为00,而同时使分钟显示值加1。

要实现几个时间显示值的按键可调,就应该在程序中置有对应的查询指令,以便在有相关的按键动作时,系统及时做出反应。

另外,由于有三个时间显示内容需要分别调整,在查询及响应这三个按键动作的顺序方面,程序设计中也应有相应的设置。

SECOND、MINUTE、HOUR3个键分别对秒、分、时加1,OFF/ON键关闭或开启调时功能;SESET是复位键。

总结与体会

本次的课程设计题目是电子时钟,这个课题有一定的发挥性,如果有兴趣以及能力的同学,是可以同时实现很多实际生活中可能会用到的功能,但是对于我来说,我只能尽自己的努力做到最好。

这次设计主要用到了STC89C52单片机、按键和蜂鸣器。

在焊接电路板的时候,想到之前也做过需要焊电路板的电工实习,因为马虎和不认真,焊错了很多地方,导致后续工作很难展开,所以这次特别的认真的和小心,进过多次确认后,才动手开始焊。

中途遇到板子上一个10K的电阻没有提供,于是在老师的确认下,我们更换为2K的进行替代。

在写程序的过程中很多都用的是模块函数在用到C语言的时候比较低级的错误还是会有的。

例如在if语句中俩句的时候没有加{}导致程序无法编译。

C语言还需要加强学习。

在写长程序的时候在后面加上必要的标注是很重要的。

如果不加等写完后就很难读懂自己写的程序。

在电路设计的时候总要先用仿真,仿真成功之后才实际调试硬件实物的。

但是最后的成品却不一定与仿真时完全一样,因为,在实际调试中有着各种各样的条件制约着。

而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。

所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。

比如,在仿真的时候,仿真软件的数码管是共阳极的,但是我却没有注意到,实物上数码管是共阴极的,所以导致第一次调试的时候,无论如何数码管也不显示任何数值,在同学们的讨论以及帮助下,最后才发现原来问题出在这里。

最后,我们还是要在每一次课设中熟悉它的原理以后,才能少走些弯路成功的完成作品。

从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高。

这就是我在这次课程设计中的最大收获。

 

参考文献

[1]《单片机原理及应用》王迎旭主编机械工业出版社2012年

[2]《51系列单片机应用与实践教程》周向红编北航出版社2008年

[5]《智能化集成温度传感器原理与应用》沙占友编机械工业出版社2002年

[6]《微型计算机原理与接口技术》吴秀清编中国科学技术出版社2001年

[7]《微型计算机接口技术及应用》刘乐善编华中理工大学出版社2000年

[8]《单片机实用技术问答》谢宜仁主编人民邮电出版社2002年

 

附录A系统原理图

 

附录B程序清单

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetab[]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

ucharcodetab1[]=

{0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

ucharcodeACT[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

uchardeda,sec,min,hour;

ucharcnt,num;

sbitbeep=P2^3;//蜂鸣器

sbits1=P3^0;//秒加1键

sbits2=P3^1;//分加1键

sbits3=P3^2;//时加1键

sbits4=P3^3;//暂停键

sbits5=P3^4;//复位键

sbitP0_7=P0^7;

voiddelay(uintz)//延时zms程序

{

uintm,n;

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

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

}

voiddic()//蜂鸣器发声函数

{

beep=0;

delay(0);

beep=1;

}

voidinit()//初始化函数

{

TMOD=0x11;

TH0=-(50000/256);

TL0=-(50000%256);

ET0=1;

TR0=1;

TH1=-(1000/256);

TL1=-(1000%256);

ET1=1;

TR1=1;

EA=1;

}

voidtime0()interrupt1//定时器方式1

{

TH0=-(50000/256);

TL0=-(50000%256);

deda++;

}

voidtime1()interrupt3//段选、位选函数

{

TH1=-(1000/256);

TL1=-(1000%256);

if(++cnt>5)cnt=0;

switch(cnt)

{

case0:

P1=ACT[7];P0=tab[sec%10];delay(5);break;

case1:

P1=ACT[6];P0=tab[sec/10];delay(5);break;

case2:

P1=ACT[5];if(deda>10)P0=tab1[min%10];

elseP0=tab[min%10];delay(5);delay(5);break;

case3:

P1=ACT[4];P0=tab[min/10];delay(5);break;

case4:

P1=ACT[3];P0=tab1[hour%10];delay(5);break;

case5:

P1=ACT[2];P0=tab[hour/10];delay(5);break;

default:

break;

}

}

voidconv()//时钟函数

{

if(deda>=20){deda=0;sec++;}

if(sec>=60){sec=0;min++;}

if(min>=60){min=0;hour++;}

if(hour>=24){hour=0;}

}

voidkeyscan()//按键扫描函数

{

if(s1==0)

{

while(!

s1);

dic();

if(++sec>59)sec=0;

}

if(s2==0)

{

while(!

s2);

dic();

if(++min>59)min=0;

}

if(s3==0)

{

while(!

s3);

dic();

if(++hour>23)hour=0;

}

if(s4==0)

{

while(!

s4);

dic();

num++;

TR0=0;

if(num>1){num=0;TR0=1;}

}

if(s5==0)

{

while(!

s5);

dic();

sec=0;min=0;hour=0;

}

}

voidmain()//主函数

{

init();

while

(1)

{

conv();

keyscan();

}

}

 

项目

评价

及格

设计方案合理性与创造性(10%)

开发板焊接及其调试完成情况*(10%)

硬件设计或软件编程完成情况(20%)

硬件测试或软件调试结果*(10%)

设计说明书质量(20%)

答辩情况(10%)

完成任务情况(10%)

独立工作能力(10%)

出勤情况(10%)

综合评分

电气信息学院课程设计评分表

指导教师签名:

________________

日期:

________________

注:

表中标*号项目是硬件制作或软件编程类课题必填内容;

此表装订在课程设计说明书的最后一页。

课程设计说明书装订顺序:

封面、任务书、目录、正文、评分表、附件(非16K大小的图纸及程序清单)

 

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

当前位置:首页 > 考试认证 > 其它考试

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

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