基于单片机的数字电子钟的设计Word文档下载推荐.docx

上传人:b****3 文档编号:8276745 上传时间:2023-05-10 格式:DOCX 页数:23 大小:631.37KB
下载 相关 举报
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第1页
第1页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第2页
第2页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第3页
第3页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第4页
第4页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第5页
第5页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第6页
第6页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第7页
第7页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第8页
第8页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第9页
第9页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第10页
第10页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第11页
第11页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第12页
第12页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第13页
第13页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第14页
第14页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第15页
第15页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第16页
第16页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第17页
第17页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第18页
第18页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第19页
第19页 / 共23页
基于单片机的数字电子钟的设计Word文档下载推荐.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的数字电子钟的设计Word文档下载推荐.docx

《基于单片机的数字电子钟的设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字电子钟的设计Word文档下载推荐.docx(23页珍藏版)》请在冰点文库上搜索。

基于单片机的数字电子钟的设计Word文档下载推荐.docx

对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以以数码管为显示器的时钟比指针式的时钟表现出了很大的优势。

数码管显示的时间简单明了而且读数快、时间准确显示到秒。

而机械式的依赖于晶体震荡器,可能会导致误差。

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

基本特性:

1、8031CPU与MCS-51兼容·

全静态工作:

0Hz-24KHz

2、4K字节可编程FLASH存储器(寿命:

1000写/擦循环)

3、三级程序存储器保密锁定·

128*8位内部RAM

4、32条可编程I/O线·

两个16位定时器/计数器

5、6个中断源、可编程串行通道、低功耗的闲置和掉电模式、片内振荡器和时钟电路

本文通过对一个能实现按键开关可调整时、分、秒,具有加密功能、定时报警的24小时制的时间系统的设计学习,详细介绍了51单片机应用中的定时中断原理、数码管显示原理、动态扫描显示原理等,进一步学习、应用单片机C语言系统的实现了各种功能。

从而使自身明白使用单片机汇编语言和C语言之间的效率、整体性问题。

系统由AT89C51、独立式按键、二极管、LED数码管、蜂鸣器等部分构成,能实现24小时制时、分、秒的时钟显示,能实现时钟简单的加密功能。

同时也可进行时、分、秒的校准、定时报警和LED二极管流水灯显示。

2总体方案设计

设计中采用AT89C51芯片及LED显示器,一些独立式按键构成一个简单的数字电子钟。

设计中是采用单片机的内部定时器进行定时,结构框图如下所示。

单片机数字钟硬件系统的总体设计框图

3系统硬件设计

该数字电子钟有单片机最小系统、键盘系统、LED显示电路模块、USB电源模块组成。

总的来说,分为输入部分与输出部分,以下做具体的设计和分析。

3.1单片机最小系统

单片机的最小系统是由电源、复位、晶振、/EA=1组成,下面介绍一下每一个组成部分。

1、电源引脚

Vcc电源端,GND接地端,工作电压为5V,另有AT89LV51工作电压则是2.7-6V,引脚功能一样。

2、外接晶体引脚

 

晶振连接的内部、外部方式图

XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。

内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。

晶振的频率可以在1MHz-24MHz内选择。

电容取30PF左右。

系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。

AT89单片机内部有一个用于构成振荡器的高增益反相放大器。

引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。

这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。

外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。

对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。

因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为22μF。

在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可靠地工作。

3、复位RST

在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。

复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。

当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序。

复位是由外部的复位电路来实现的。

片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。

复位电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是按钮复位电路。

4、输入输出引脚

(1)P0端口[P0.0-P0.7]P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。

作为输出口时能驱动8个TTL。

对内部Flash程序存储器编程时,接收指令字节;

校验程序时输出指令字节,要求外接上拉电阻。

在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,访问期间内部的上拉电阻起作用。

(2)P1端口[P1.0-P1.7]P1是一个带有内部上拉电阻的8位双向I/0端口。

输出时可驱动4个TTL。

端口置1时,内部上拉电阻将端口拉到高电平,作输入用。

(3)P2端口[P2.0-P2.7]P2是一个带有内部上拉电阻的8位双向I/0端口。

对内部Flash程序存储器编程时,接收高8位地址和控制信息。

(4)P3端口[P3.0-P3.7]P2是一个带有内部上拉电阻的8位双向I/0端口。

3.2输入部分

3.2.1电源模块

采用普通的USB线连接微型计算机作为系统电源,虽然功率上可以满足稍大于系统需要,但同样不需要更换电源,并且比直流稳压电源更轻便,可随时使用、调试系统。

3.2.2按键模块

采用独立式键盘。

独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。

但当所需按键数量多,会占用过多的I/O口线。

3.3输出部分

3.3.1显示模块

采用LED共阴极数码管。

共阴数码管在应用时将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。

当某一字段的阳极为低电平时,相应字段就不亮。

动态显示驱动。

通过单片机对数码管位选通COM端电路的控制,只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。

通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。

动态显示可以大幅度地降低硬件成本和电源的功耗,因为某一时刻只有一个数码管工作,也就是所谓的分时显示,故显示所需要的硬件电路可分时复用。

动态显示方式,可以避免静态显示的问题。

但设计上如果处理不当,易造成亮度低,闪烁问题。

因此合理的设计既应保证驱动电路易实现,又要保证显示后的数据稳定,无闪烁。

动态显示采用多路复用技术的动态扫描显示方式,当扫描刷新频率(发光二极管的停闪频率)为50Hz,发光二极管导通时间≥1ms时,显示亮度较好,无闪烁感。

3.3.2LED灯显示模块

1、LED数码显示器

通常用的七段数码显示器的内部有8个发光二极管,其中7个发光二极管组成了数字“8”,剩下一个发光二极管就是这位数字所带的小数点。

数码管结构图如图2所示

LED数码管结构引脚图

各段码位的对应关系

段码位

D7

D6

D5

D4

D3

D2

D1

D0

显示段

dp

g

f

e

d

c

b

a

2、集成器件74LS138

74LS138为3线-8线译码器,本设计中74LS138做为对数码管位选通COM端电路的控制,将需要显示的数码管的选通控制打开。

74LS138引脚图

4系统软件设计

该数字电子钟用到了单片机的定时器的功能,此外用到了中断功能,在数字的显示是采用查表功能。

由于电子钟需要可以进行调节,因此,需要在单片机的P口加上按键。

软件的可以分为定时器模块,按键模块,显示模块等,具体的流程图和程序见附录。

4.1主程序流程图

4.2子程序流程图

定时器子程序流程图

5系统调试与仿真

单片机应用系统的调试包括硬件和软件两部分,但是他们并不能完全分开。

一般的方法是排除明显的硬件故障,再进行综合调试,排除可能的软/硬件故障。

本系统已符合设计课程基本要求,按24小时制分别显示“时时-分分-秒秒”,有2个“-”动态显示,时间会按实际时间以秒为最少单位变化;

可使用按键开关可实现时、分调整。

除了满足这些基本要求外,本系统还做了一些创新:

(1)通过1功能按键KEY1开关可使系统具有加密功能。

加密前后可通过观察LED二极管的显示方式来判断。

当LED做流水灯显示方式时,为加密前的状态;

当只有LED灯中的LED2(由P0.1口控制亮灭)时,代表已对系统进行加密。

(2)通过功能按键开关KEY1进入可进入时间校准系统。

KEY2控制秒的校准,KEY3控制分的校准,KEY4控制时的校准。

每次一有校准按键按下时,系统会发出不同的声响,以提示用户目前正在校准的是时、分、秒的哪一种。

校准完成后仍然是通过功能按键KEY1返回时钟显示。

(3)通过更改主程序中定时器的定时初值,可实现不同样式的数字钟显示方式。

5.1系统硬件误差分析

本次设计的单片机电子钟系统中,其时间误差主要来源包括晶体频率误差,定时器溢出误差,延迟误差。

晶体频率产生震荡,容易产生走时误差;

定时器溢出的时间误差,本应这一秒溢出,但却在下一秒溢出,造成走时误差;

延迟时间过长或过短,都会造成与基准时间产生偏差,造成走时误差。

6.3软件调试与仿真

软件程序的调试一般可以将重点放在分模块调试上,统调是最后一环。

本次课题,Keil软件下载到单片机中来调试程序,通过各个模块程序的单步或跟踪调试,使程序逐渐趋于正确,最后统调程序。

仿真部分采用protus7.5professional软件,此软件功能强大且操作较为简单,可以很容易的实现系统的仿真。

结果见附录。

7结束语

通过此次课程设计,本次课程从基本方案的制定,再到硬件电路的设计,软件程序的编辑和调试,最后取得的成功。

在此过程中,进一步学习、掌握单片机应用系统的有关知识,加深了解单片机的工作原理。

初步掌握单片机应用系统的设计、制作、调试的方法。

提高动手实践能力。

通过这次对数字时钟的设计,让我系统的了解和学会应用单片机C语言来对所需实现的功能进行编程。

在仿真阶段,温习了了KeilC51集成环境和PROTEUS7.5仿真软件的使用。

此过程中我还发现到修改完善程序的重要性。

当时编完一个程后感觉是正确的。

就是这样还要仔细检查自己的程序。

考虑到各种可能发生的情况。

经过这次课程设计培养了我们的设计能力以及全面的考虑问题能力。

学习的过程是痛苦的但是收获成功的喜悦更是让人激动的。

相信通过这次课程设计它对我以后的学习及工作都会产生积极的影响。

采用AT89C51设计的多功能数字电子钟,不仅计时精度高,编程简单,显示效果稳定可靠,同时硬件接口简单,具有较大的实用价值。

参考文献

[1]张毅刚,彭喜元.单片机原理及接口技术.北京:

人民邮电出版社,2008.

[2]唐俊瞿.Altium.Designer应用实例教程.冶金工业出版社,2004.

[3]李朝青.单片机原理及接口技术.北京航空航天大学出版社,2005.

[4]马忠梅等.单片机的C语言应用程序设计(第4版),2007.

[5]彭伟.单片机C语言程序设计实训100例.电子工业出版社,2009.

[6]崔凤波.《数字电子技术》[M].大连:

大连理工大学出版社,2007.

[7]戴仙金.《51单片机及其C语言程序开发实例》[M].北京:

清华大学出版社,2008

[8]谭浩强.《C语言程序设计》[M].北京:

清华大学出版社.2007.

[9]赵建领.《51系列单片机开发宝典》[M].北京:

电子工业出版社,2007.

[10]田立,马鸣鹤.《51系列单片机开发实例》[M].北京:

中国电力出版社,2009.

[11]杨将新,李华军等.单片机程序设计及应用从基础到实践.北京:

电子工业出版社,2006.

[12]尹勇,王洪成.单片机开发环境uVision2使用指南及USB固件编程与调试.北京:

北京航空航天大学出半社,2004.

附录A系统原理图

使用Altium.Designer软件设计出的电路原理如下所示:

附录B系统仿真图

1、使用PROTUES软件,去掉设计中的附加功能,最简单的数字计时的电路图如下:

2、用PROTUES软件,根据上述数字电子钟的原理图,得到的仿真图,如下所示:

附录C系统源程序

/***********************Copyright(c)

**Filename:

ShuZiZhong.c

**LastmodifiedDate:

20101220

**Createdby:

赵红星

**Descriptions:

单片机数字钟

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

#include<

reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

#defineCYCLE1000/*定时1ms*/

unsignedchari,j,k,ID;

/*ID为case的次数K为LED灯控制。

*/

unsignedchartemp;

unsignedcharb,c;

ucharhour=0,min=0,sec=0;

/*定义秒时分初始值*/

uchara[6];

/*定数码管显示缓冲*/

uintt=0;

uintflag=0;

bitfla;

unsignedcharcount;

sbitKEY1=P3^0;

sbitKEY2=P3^1;

sbitKEY3=P3^2;

sbitKEY4=P3^3;

sbitLED2=P1^0;

sbitBEEP=P0^7;

voidModifytime();

/*时间调整模块*/

voidAdjust();

voidscan();

/*扫描数码模块*/

voidTime_BEEP();

voiddelay10ms(void)/*软件10ms定时*/

{unsignedchari,j;

for(i=20;

i>

0;

i--)

for(j=248;

j>

j--);

/*2us*248*20=9920软件延时*/

}

voiddely250(void)

for(i=2;

i--)/*248*2us*2=1ms软件延时*/

}

/*Mian函数*/

voidmain()

{TCON=0x01;

/*TIMER0工作在方式1*/

TMOD=0x01;

TH0=(65536-CYCLE)/256;

/*设定T0每隔1000us(1ms)中断一次*/TL0=(65536-CYCLE)%256;

TR0=1;

IE=0x82;

Modifytime();

while

(1)

{if(flag==100)

{

{temp=0xfe;

P1=temp;

delay10ms()

for(k=0;

k<

8;

k++)

{b=temp<

<

k;

c=temp>

>

(8-k);

P1=b|c;

delay10ms();

}

{b=temp>

c=temp<

}}

}

if(flag==1000)/*判断1秒钟到否*/

{sec++;

/*秒加一*/

flag=0;

while((min==0)&

(sec==0))

{if(flag==100)

{

{BEEP=0;

BEEP=1;

}}

if(flag==600)break;

while(KEY1==0)

{while

(1)

{

if(KEY1==0)

if(KEY1==0)

{ID++;

if(ID==2)

ID=0;

while(KEY1==0);

switch(ID)

{case0:

Adjust();

break;

case1:

LED2=0;

if(flag==1000)/*判断1秒钟到否*/

/*秒加一*/

while((min==0)&

(sec==0))

{{BEEP=0;

if(flag==600)break;

}}break;

}}

/*时间调整模块*/

voidModifytime()

{uchartemp;

temp=sec;

/*uchartemp=sec;

sec%=60;

min+=temp/60;

/*求余*/

temp=min;

min%=60;

hour=(hour+temp/60)%24;

a[0]=(sec%10);

/*调整过的时间送到显示缓冲中*/

a[1]=(sec/10);

/*对于秒计数单元中的数据要把它十位数和个数分开,方法仍采用对10整除和对10求余。

*/

a[2]=(min%10);

/*对于分计数单元中的数据要把它十位数和个数分开,方法仍采用对10整除和对10求余。

a[3]=(min/10);

a[4]=(hour%10);

/*对于时计数单元中的数据要把它十位数和个数分开,方法仍采用对10整除和对10求余。

a[5]=(hour/10);

/*扫描数码模块*/

voidscan()/*扫描6个数码管子程序*/

{staticucharx;

x++;

if(x>

5)x=0;

/*6个数码管都扫描过了则重新开始*/

P0=x|(a[x]<

3);

/*选中需要扫描的数码管并送数据*/

/*中断模块*/

voidTimer0Int()interrupt1using2

{t++;

if(t==100)

{flag=100;

elseif(t==200)

{flag=200;

elseif(t==600)

{flag=600;

elseif(t==1000)

{flag=1000;

t=0;

else

scan();

TL0=(65536-CYCLE)%256;

/*键盘控制模块*/

voidAdjust()

{while

(1)

{if(KEY2==0)

{for(i=40;

i--)/*248*2us*5=2480=2.5ms软件延时*/

if(KEY2==0)

{

sec++;

for(count=200;

count>

count--)

BEEP=~BEEP;

dely250();

if(sec==60)

{sec=0;

while(KEY2==0);

if(KEY3==0)

{for(i=16;

/*248*2us*40=20ms软件延时*/

min++;

co

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

当前位置:首页 > 小学教育 > 语文

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

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