毕业设计论文基于PROTEUS的多功能数字电子钟的设计.docx

上传人:b****4 文档编号:5515818 上传时间:2022-12-18 格式:DOCX 页数:16 大小:146.40KB
下载 相关 举报
毕业设计论文基于PROTEUS的多功能数字电子钟的设计.docx_第1页
第1页 / 共16页
毕业设计论文基于PROTEUS的多功能数字电子钟的设计.docx_第2页
第2页 / 共16页
毕业设计论文基于PROTEUS的多功能数字电子钟的设计.docx_第3页
第3页 / 共16页
毕业设计论文基于PROTEUS的多功能数字电子钟的设计.docx_第4页
第4页 / 共16页
毕业设计论文基于PROTEUS的多功能数字电子钟的设计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

毕业设计论文基于PROTEUS的多功能数字电子钟的设计.docx

《毕业设计论文基于PROTEUS的多功能数字电子钟的设计.docx》由会员分享,可在线阅读,更多相关《毕业设计论文基于PROTEUS的多功能数字电子钟的设计.docx(16页珍藏版)》请在冰豆网上搜索。

毕业设计论文基于PROTEUS的多功能数字电子钟的设计.docx

毕业设计论文基于PROTEUS的多功能数字电子钟的设计

毕业设计(论文)-基于PROTEUS的多功能数字电子钟的设计

 

自动化专业综合设计报告

 

设计题目:

基于PROTEUS的多功能数字电子钟的设计

所在实验室:

指导教师:

学生姓名

班级学号

撰写时间:

成绩评定:

 

1、设计目的

利用单片机STC89C52,液晶显示器等实现时间的显示以及闹钟等功能的数字电子钟,数字电子钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,节省了电能。

因此得到了广泛的使用。

数字钟是一种典型的数字电路,包括了组合逻辑电路和时序电路。

通过设计加深对学习了的单片机和PROTEUS的认识。

2、设计内容

(1)用PROTEUS画出原理图,并完成下列任务:

(2)用6只LED数码管输出显示时、分和秒。

(3)可通过按键设置闹钟功能,且停闹无须手工操作。

(4)可通过按键设置分校时。

(5)写出详细的设计报告。

(6)给出电路的原理图、源程序,仿真实现。

3、设计步骤

1系统主要功能

电子钟的主要功能有:

整点报时;四只LED数码管显示当前时分;并且具有闹钟功能。

2系统的硬件构成及功能

电脑钟的原理框图如图1所示。

它由以下几个部件组成:

单片机89C2051、电源、时分显示部件。

时分显示采用动态扫描,以降低对单片机端口数的要求,同时也降低系统的功耗。

时分显示模块以及显示驱动都通过89C2051的I/O口控制。

电源部分:

电源部分有二部分组成。

一部分是由220V的市电通过变压、整流稳压来得到+5V电压,维持系统的正常工作。

图1电子钟系统原理框图

2.1AT89C2051单片机及其引脚说明

AT89C2051单片机是51系列单片机的一个成员,是8051单片机的简化版。

内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与IntelMCS-51系列单片机的指令和输出管脚相兼容。

由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。

AT89C2051是一个有20个引脚的芯片,引脚配置如图3所示。

与8051相比,AT89C2051减少了两个对外端口(即P0、P2口),使它最大可能地减少了对外引脚下,因而芯片尺寸有所减小。

图2AT89C2051引脚配置

AT89C2051芯片的20个引脚功能为:

VCC电源电压。

GND接地。

RST复位输入。

当RST变为高电平并保持2个机器周期时,所有I/O引脚复位至“1”。

XTAL1反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2来自反向振荡放大器的输出。

P1口8位双向I/O口。

引脚P1.2~P1.7提供内部上拉,当作为输入并被外部下拉为低电平时,它们将输出电流,这是因内部上拉的缘故。

P1.0和P1.1需要外部上拉,可用作片内精确模拟比较器的正向输入(AIN0)和反向输入(AIN1),P1口输出缓冲器能接收20mA电流,并能直接驱动LED显示器;P1口引脚写入“1”后,可用作输入。

在闪速编程与编程校验期间,P1口也可接收编码数据。

P3口引脚P3.0~P3.5与P3.7为7个带内部上拉的双向I/0引脚。

P3.6在内部已与片内比较器输出相连,不能作为通用I/O引脚访问。

P3口的输出缓冲器能接收20mA的灌电流;P3口写入“1”后,内部上拉,可用输入。

P3口也可用作特殊功能口,其功能见表1。

P3口同时也可为闪速存储器编程和编程校验接收控制信号。

2.2时分显示部件

由于系统要显示的内容较简单,显示量不多,所以选用数码管既方便又经济。

LED有共阴极和共阳极两种。

如图7所示。

二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入+5V的电压。

一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)a~g,另一个小数点为dp发光二极管。

当在某段发光二极管施加一定的正向电压时,该段笔划即亮;不加电压则暗。

为了保护各段LED不被损坏,需外加限流电阻。

图3LED数码管结构原理图

众所周知,LED显示数码管通常由硬件7段译码集成电路,完成从数字到显示码的译码驱动。

本系统采用软件译码,以减小体积,降低成本和功耗,软件译码的另一优势还在于比硬件译码有更大的灵活性。

所谓软件译码,即由单片机软件完成从数字到显示码的转换。

从LED数码管结构原理可知,为了显示字符,要为LED显示数码管提供显示段码,组成一个“8”字形字符的7段,再加上1个小数点位,共计8段,因此提供给LED数码管的显示段码为1个字节。

各段码位与显示段的对应关系如表1。

表1各段码位的对应关系

段码位

D7

D6

D5

D4

D3

D2

D1

D0

显示段

dp

g

f

e

d

c

b

a

需说明的是当用数据口连接LED数码管a~dp引脚时,不同的连接方法,各段码位与显示段有不同的对应关系。

通常数据口的D0位与a段连接,D1位与b段连接,……D7位与dp段连接,如表1所示,表2为用于LED数码管显示的十六进制数和空白字符与P的显示段码。

表2LED显示段码

字型

共阳极段码

共阴极段码

字型

共阳极段码

共阴极段码

0

C0H

3FH

9

90H

6FH

1

F9H

06H

A

88H

77H

2

A4H

5BH

B

83H

7CH

3

BOH

4FH

C

C6H

39H

4

99H

66H

D

A1H

5EH

5

92H

6DH

E

86H

79H

6

82H

7DH

F

84H

71H

7

F8H

07H

空白

FFH

00H

8

80H

7FH

P

8CH

73H

注:

(1)本表所列各字符的显示段码均为小数点不亮的情况。

(2)“空白”字符即没有任何显示。

根据AT89C2051单片机灌电流能力强,拉电流能力弱的特点,我们选用共阳数码管。

将AT89C2051的P1.0~P1.7分别与共阳数码管的a~g及dp相连,高电平的位对应的LED数码管的段暗,低电平的位对应的LED数码管的段亮,这样,当P0口输出不同的段码,就可以控制数码管显示不同的字符。

例如:

当P0口输出的段码为11000000,数码管显示的字符为0。

数码管显示器有二种工作方式,即静态显示方式和动态扫描显示方式。

为节省端口及降低功耗,本系统采用动态扫描显示方式。

动态扫描显示方式需解决多位LED数码管的“段控”和“位控”问题,本电路的“段控”(即要显示的段码的控制)通过P1口实现;而每一位的公共端,即LED数码管的“位控”,则由P3口控制。

这种连接方式由于多位字段线连在一起,因此,要想显示不同的内容,必然要采取轮流显示的方式,即在某一瞬间,只让其中的某一位的字位线处于选通状态,其它各位的字位线处于断开状态,同时字段线上输出这一位相应要显示字符的字段码。

在这一瞬时,只有这一位在显示,其他几位则暗。

在本系统中,字位线的选通与否是通过PNP三极管的导通与截止来控制,即三极管处于“开关”状态。

系统的时分显示部件由4只7段共阳LED数码管构成,前两只用于时的显示,后两只用于分的显示。

值得一提的是,在设计中需要实现时与分之间的两个闪烁点,为此,将第三只LED数码管倒置摆放,这样就形成了两个很自然的闪烁点。

与此同时,为了能使两点显示能够形象的表示时钟“秒”的变化,设计时,将两个点由P1.7单独控制,每隔一秒使P1.7发送一个正脉冲,从而实现了两个点的闪烁显示,闪烁周期为一秒。

3系统的软件构成及功能

本系统的软件系统主要可分为主程序和定时器中断程序两大模块。

在程序过程中,加入了抗干扰措施。

下面对部分模块作介绍。

3.1系统主程序设计

主程序的功能是完成系统的初始化,程序流程如图4所示。

3.2中断程序设计

中断程序(如图5所示)完成时间计数,时间调整,误差消除等功能。

中断采用AT89C2051内部T0中断实现,当时间到达125ms×8,即1分钟时,分种数增加1,到达1小时,则小时数增加1,并将分、时的个位、十位放入显示缓冲器。

当分别到达60min、24h时,则对它们清零,以便重新计数。

图4系统主程序流程图

图5定时中断程序

4、硬件图

1、硬件图

2、程序运行时显示

5、软件程序

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitF=P3^6;

sbitkey1=P3^2;//定时调时按钮

sbitkey2=P3^3;//加1按钮

sbitkey0=P3^0;//复位按钮

uintb,i=0,a,m=18,f=18,s=8,xs[6],jia,wei=0,z,ding[6],ds=9,df=0,dm=20;

unsignedcharcodeSelect[]={0x01,0x02,0x04,0x08,0x10,0x20};

ucharcodetable[]={0xc0,0xF9,0xA4,0xB0,0x99,//0-4

0x92,0x82,0xF8,0x80,0x90,//5-9

0x88,0x83,0xC6,0xA1,0x86,//A,b,C,d,E

0x8E,0xFF,0x0C,0x89,0x7F,0xBF};//F,空格,P,H,.,-

voiddelay(uintt);

voidchange();

voidfuwei();

voidmain()

{

TMOD=0x01;//设定初值

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

IT0=1;

IT1=1;

EA=1;

ET0=1;

EX0=1;

EX1=1;

TR0=1;

F=1;

while

(1)

{

if(key0==0)

fuwei();

i++;

if(i==6)

{

i=0;

P2=0x00;

}

P2=Select[5-i];//选择哪个显示

if(wei>3)

P1=table[ding[5-i]];

else

P1=table[xs[5-i]];

delay(12);

if(wei!

=0)

change();

if(s==ds&&f==df)//闹钟

{

if((m-dm)<=30)

F=!

F;

}

if(f==0&&m==0)//整点报时

{

F=!

F;

delay(100);

F=1;

}

}

}

voidyan()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

b++;

z++;

if(z==10)

z=0;

if(b==20)

{

if(m<59)

{

m++;

}

elseif(f<59)

{

f++;

m=0;

}

elseif(s<12)

{

s++;

f=0;

m=0;

}

else

{

s=0;

f=0;

m=0;

}

b=0;

}

if(wei<4)

{

if(z<=6)

{

if(wei==1)

{

xs[5]=16;

xs[4]=16;

}

if(wei==2)

{

xs[3]=16;

xs[2]=16;

}

if(wei==3)

{

xs[1]=16;

xs[0]=16;

}

}

else

{

xs[5]=m%10;

xs[4]=m/10;

xs[3]=f%10;

xs[2]=f/10;

xs[1]=s%10;

xs[0]=s/10;

}

}

if(wei>3)

{

if(z<=6)

{

if(wei==4)

{

ding[5]=16;

ding[4]=16;

}

if(wei==5)

{

ding[3]=16;

ding[2]=16;

}

if(wei==6)

{

ding[1]=16;

ding[0]=16;

}

}

else

{

ding[5]=dm%10;

ding[4]=dm/10;

ding[3]=df%10;

ding[2]=df/10;

ding[1]=ds%10;

ding[0]=ds/10;

}

}

}

voidjiaa()interrupt0

{

delay(100);

if(key1==0)

jia=1;

}

voidweii()interrupt2

{

delay(10);

if(key2==0)

{

if(wei==6)

wei=0;

else

wei++;

}

}

voidchange()

{

if(wei==3)

{

if(jia==1)

{

if(s==12)

s=0;

else

s++;

jia=0;

}

}

if(wei==2)

{

if(jia==1)

{

if(f==60)

f=0;

else

f++;

jia=0;

}

}

if(wei==1)

{

if(jia==1)

{

m=0;

jia=0;

}

}

if(wei==6)

{

if(jia==1)

{

if(ds==12)

ds=0;

else

ds++;

jia=0;

}

}

if(wei==5)

{

if(jia==1)

{

if(df==60)

df=0;

else

df++;

jia=0;

}

}

if(wei==4)

{

if(jia==1)

{

if(dm==60)

dm=0;

else

dm++;

jia=0;

}

}

}

voidfuwei()//复位程序

{

s=0;

f=0;

m=0;

}

voiddelay(uintt)

{

uinti;

for(i=0;i<100;i++)

for(;t>0;t--);

}

6、仿真结果

1、软件调试是在仿真图上进行,这样会比较方便,可以及时发现错误,分析错误,以便于修改,直至结果正确,然后再下载程序,看是否符合要求,程序的调试,是需要极大的耐心和毅力的,同时,要有心细严谨的态度去调试,直至程序无误,可以生成可下载.hex文件。

2、当仿真实验正在运行时,按下“调时”按钮时,会发生外部中断,可以进行时间的调整和定时的设定。

按两下调时按钮,可进行“分”的的调整,按三下,可进行“时”的调整;按四下可进行定时的“秒”的调整,按五下可进行定时的“分”的调整,按六下可进行定“时”的时调整;再按一下正常显示时间。

3、当仿真实验正在运行时,当时间到整点时,可以进行整点报时。

4、当仿真实验正在运行时,按下“复位”按钮,电子钟的所有LED数码管会复位清零。

数字钟从00:

00:

00开始重新运行。

7、心得体会

通过本次单片机综合设计实验,让我对AT89C51单片机有了进一步的认识。

了解并能够使用Keil2,和Proteus软件进行C语言程序的编写和绘制电子原理图,同时进行实验仿真。

此次设计数字钟是为了了解数字钟的原理,加深对我们所学知识的了解和认识、以及知识迁移的能力。

巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力。

在学习的过程中,及时认识到自己与他人的差距,积极学习相关知识,把所学的知识与实践结合起来。

我们要把自己所学的知识用到实践中去,从而实现我们大学生的个人能力。

8、如何扩展、深入

本次的单片机综合设计,主要是实现了用C51控制数字时钟,还可以利用8279键盘显示接口电路。

使用8279可实现对键盘/显示器的自动扫描,以减轻CPU负担,其具有显示稳定、程序简单、不会出现误动作等特点。

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

当前位置:首页 > 工作范文 > 演讲主持

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

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