Protues电子钟设计报告.docx

上传人:b****6 文档编号:8898414 上传时间:2023-05-15 格式:DOCX 页数:12 大小:83.71KB
下载 相关 举报
Protues电子钟设计报告.docx_第1页
第1页 / 共12页
Protues电子钟设计报告.docx_第2页
第2页 / 共12页
Protues电子钟设计报告.docx_第3页
第3页 / 共12页
Protues电子钟设计报告.docx_第4页
第4页 / 共12页
Protues电子钟设计报告.docx_第5页
第5页 / 共12页
Protues电子钟设计报告.docx_第6页
第6页 / 共12页
Protues电子钟设计报告.docx_第7页
第7页 / 共12页
Protues电子钟设计报告.docx_第8页
第8页 / 共12页
Protues电子钟设计报告.docx_第9页
第9页 / 共12页
Protues电子钟设计报告.docx_第10页
第10页 / 共12页
Protues电子钟设计报告.docx_第11页
第11页 / 共12页
Protues电子钟设计报告.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Protues电子钟设计报告.docx

《Protues电子钟设计报告.docx》由会员分享,可在线阅读,更多相关《Protues电子钟设计报告.docx(12页珍藏版)》请在冰点文库上搜索。

Protues电子钟设计报告.docx

Protues电子钟设计报告

Protues电子钟设计报告

 

学院机电学院

姓名吕志军

班级电信三班

 

1.任务目的

通过电字钟的设计与制作,前所学的单片机内部定时器资源、I/O端口、键盘和显示接口等知识融会贯通,锻炼独立设计、制作和调试应用系统的能力,深入领会单片机应用系统的硬件设计、模块化程序设计及软件调试方法等,并掌握单片机应用系统的开发过程。

2.设计要求

实现功能:

1.八位数码管显示电子钟的时间(时钟,分钟,秒钟)。

2.具备调节时间的功能3.每到一小时的时候,蜂鸣器响一分钟。

3.系统方案选择

1)单片机选型

选用2块Mcs-51系列主流芯片AT89C51,内部带有4KB的FlashROM,无须外扩程序存储器。

由于电子钟没有大量运算和暂存数据,片内128B的RAM可以满足设计要求,无须外扩片外RAM。

本设计我是用两块单片机共同控制实现功能的,第一块控制电子钟。

第二块控制蜂鸣器播放音乐一分钟,里面有三首歌可以选择。

八位数码管。

一个蜂鸣器。

4个开关。

2)计时方案

采用芯片AT89C51内部时钟计时,具备显示时、分、秒。

虽然计时不是很准确,但是容易操作,适合我们初学单片机的同学们。

蜂鸣器响一分钟也是采用芯片AT89C51控制的。

内存三首音乐,可以选择播放。

3)软件控制

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

该方案节省硬件成本,且能够使读者对所学知识进行综合运用,因此本系统设计采用这一方案。

4)显示方案

利用P1、P2口分别对八段数码管进行位显示和位选择。

这里采用动态显示方案。

5)按键选择功能

第一块单片机的P0.0是对八位数码管显示的时分秒位选,P0.1是分别对时分秒进行加加的,P0.2是分别对时分秒进行减减的。

第二块单片机的P2.0是选择播放那首音乐的。

4.硬件设计

硬件设计电路如图1.0所示,八位数码管分别接在第一块单片机的P1、P2口,蜂鸣器接在第二块单片机的P1.0口上。

第一块单片机的P0口接了控制时分秒的按键,并接上上拉电阻,以驱动八位数码管。

第二块单片机的P2.0口接上选择音乐的按钮。

但第一块单片机每到一小时,P0.3口就会给个脉冲给第二块单片机的P3.2口,引起第二块单片机外部中断,进而播放一分钟音乐。

图1.0电子钟硬件设计电路

5.软件设计

(1)第一块单片机的主程序函数main:

完成系统初始化,包括时钟、闹钟初始参数基础是标致的设定;I/O端口、定时/计数器初始化的设定;更新显示时间,循环扫描按键,根据按键分别进行闹钟和时钟的设置管理。

定时器T0是实现每秒的计算,定时器T1是控制八位数码管的显示时间。

6.各模块流程图设计

Main

P0口按键初始化

定时器、中断初始化

调用子函数conv();开始计数

定时器T1每到1ms中断一次

时钟显示时、分、秒初始值。

定时器T0每到50ms中断一次

中断20次为1s,数码管显示1s

sec每到60,分加1。

min每到

60,小时加1.hour到24变为0

Yes

是否到一小时?

蜂鸣器响一分钟

NO

是否P0_0键按下?

Yes

去抖动,查按键按几下。

1下修改

小时,2下修改分钟3下

修改秒,4下退出

Yes

Yes

P0_1被按下?

被修改的数值加1

NO

P0_2被按下?

被修改的数值减1

NO

被修改的闪烁,等待按键按下

7.电子钟程序:

#include

#defineucharunsignedchar

UcharcodeSEG7[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,

0x6f,0x00};//数码管的字形码

ucharACT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数码管的位选码

uchardeda=0,sec=0,min=0,hour=0;//时间的相关变量定义

ucharcnt=0,k,n=0,m,t;

voidkey(void);

sbitP0_0=P0^0;//选择要调教的时、分、秒

sbitP0_1=P0^1;//对时、分、秒进行加1

sbitP0_2=P0^2;//对时、分、秒进行减1

sbitP0_3=P0^3;//控制蜂鸣器响

voiddelay(time)//延时函数

{for(;time>0;time--);}

voidinit(void)//定时器T0、T1的初始化

{TMOD=0x01;

TH0=-48880/256;//T0定时初值约为50ms

TL0=-48880%256;

ET0=1;

TR0=1;

TH1=-1000/256;//T1定时初值约为1ms

TL1=-1000%256;

ET1=1;

TR1=1;

EA=1;}

voidtime0(void)interrupt1//定时器T0工作方式1

{TH0=-48880/256;

TL0=-48880%256;

deda++;}

voidconv(void)//计算时、分、秒的子函数

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

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

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

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

voidkey(void)//按键检测,调时、分、秒的子函数

{P0_0=1;

P0_1=1;

P0_2=1;

if(n++>0)n=0;delay(80);

if(P0_0==0){k++;if(k>3){k=0;}delay(50);}

switch(k)//实现时、分、秒加1或减1

{case0:

TR0=1;break;

case1:

TR0=0;if(P0_1==0){while(P0_1==0){;};hour++;delay(10);};

if(P0_2==0){while(P0_2==0){;};hour--;delay(10);}break;

case2:

TR0=0;if(P0_1==0){min++;delay(10);};

if(P0_2==0){while(P0_2==0){;};min--;delay(10);}break;

case3:

TR0=0;if(P0_1==0){while(P0_1==0){;};sec++;delay(10);}

if(P0_2==0){while(P0_2==0){;};sec--;delay(10);}break;

default:

break;}

}

voidtime1(void)interrupt3//定时器T1中断,显示时、分、秒的子函数

{TH1=-1000/256;

TL1=-1000%256;

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

if(n==0&&cnt==6&&k==1)cnt=0;

if(n==0&&cnt==3&&k==2)cnt=5;

if(n==0&&cnt==0&&k==3)cnt=2;

switch(cnt)//对数码管扫描显示

{case0:

P2=ACT[0];P1=SEG7[sec%10];delay(10);break;

case1:

P2=ACT[1];P1=SEG7[sec/10];delay(10);break;

case2:

P2=ACT[2];P1=0x40;delay(10);break;

case3:

P2=ACT[3];P1=SEG7[min%10];delay(10);break;

case4:

P2=ACT[4];P1=SEG7[min/10];delay(10);break;

case5:

P2=ACT[5];P1=0x40;delay(10);break;

case6:

P2=ACT[6];P1=SEG7[hour%10];delay(10);break;

case7:

P2=ACT[7];P1=SEG7[hour/10];delay(10);break;

default:

break;}

}

voidmain(void)//main主函数开始

{P0=0xff;

init();

while

(1)

{conv();

key();

}

}

8.收获体会

作为是电子信息工程技术专业的学生,设计是我们将来必需的技能,这次课程设计恰恰给我们提供了一个应用自己所学知识的机会,从到图书馆查找资料到对protues的设计对protues的仿真再到最后电子时钟的成型,都对我所学的知识进行了检验。

设计思路是最重要的,只要你的设计思路是成功的,那你的设计已经成功了一半。

因此应该在设计前做好充分的准备,像查找详细的资料,为我们设计的成功打下坚实的基础。

制作过程是一个考验人耐心的过程,不能有丝毫的急躁,马虎,对电路的调试要一步一步来,不能急躁,要求我们有一个比较正确的调试方法。

这又要我们要灵活处理,在不影响试验的前提下可以加快进度。

要熟练地掌握课本上的知识,这样才能对试验中出现的问题进行分析解决。

留给我印象最深的是要设计一个成功的电路,必须要有耐心,要有坚韧的毅力。

在整个电路的设计过程中,花费时间最多的是如何实现蜂鸣器响一分钟音乐,因为数字音乐我从来都没接触过,而且去图书馆找资料,也很难找到这方面的信息。

设计过程中,我深刻的体会到在设计过程中,需要反复实践,其过程很可能相当烦琐,有时花很长时间设计出来的电路还是需要重做。

总体来说,这次实习我受益匪浅。

在摸索该如何设计实用电路使之实现所需功能的过程中培养了我的设计思维,增加了实际操作能力。

在让我体会到了设计电路的艰辛的同时,更让我体会到成功的喜悦。

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

当前位置:首页 > 初中教育 > 语文

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

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