AT89C51单片机LED数字倒计时器课程设计论文.docx

上传人:b****6 文档编号:13824465 上传时间:2023-06-17 格式:DOCX 页数:21 大小:333.10KB
下载 相关 举报
AT89C51单片机LED数字倒计时器课程设计论文.docx_第1页
第1页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第2页
第2页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第3页
第3页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第4页
第4页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第5页
第5页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第6页
第6页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第7页
第7页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第8页
第8页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第9页
第9页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第10页
第10页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第11页
第11页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第12页
第12页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第13页
第13页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第14页
第14页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第15页
第15页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第16页
第16页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第17页
第17页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第18页
第18页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第19页
第19页 / 共21页
AT89C51单片机LED数字倒计时器课程设计论文.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

AT89C51单片机LED数字倒计时器课程设计论文.docx

《AT89C51单片机LED数字倒计时器课程设计论文.docx》由会员分享,可在线阅读,更多相关《AT89C51单片机LED数字倒计时器课程设计论文.docx(21页珍藏版)》请在冰点文库上搜索。

AT89C51单片机LED数字倒计时器课程设计论文.docx

AT89C51单片机LED数字倒计时器课程设计论文

 

课题:

AT89C51单片机LED数字倒计时器

专业:

班级:

学号:

姓名:

指导教师:

设计日期:

成绩:

重庆大学城市科技学院电气学院

目录

一、设计目的作用1

二、设计要求1

三、设计的具体实现1

1、设计原理1

(1)系统设计方案1

(2)功能模块2

(3)工作原理:

2

2、系统设计2

(1)显示模块2

(2)晶振模块3

(3)复位电路:

3

(4)按键模块:

4

(5)报警模块:

5

3、系统实现6

(1)实物图6

(2)分析6

四、总结6

五、附录8

附录1:

8

附录2:

9

附录3:

9

六、参考文献16

LED数字倒计时器设计报告

一、设计目的作用

1、掌握51单片机最小系统的设计;

2、掌握按键电路设计、LED数码管的使用;

3、掌握C51的编程方式。

二、设计要求

基于AT89C51单片机的LED数字倒计时器主要具有如下功能,具体要求如下:

1、LED数码管显示倒计时时间。

2、倒计时过程中能设置多个闹钟,当倒计时值倒计到设定值时会发出2s的报警声音。

(K1设置小时,K2设置分钟,K3设置秒钟,K4完成退出)

3、通过按键可以对倒计时设定处置。

倒计时初值范围在24:

00:

00~00:

00:

60之间,设置成功后复位初始值为成功设定值。

三、设计的具体实现

1、设计原理

(1)系统设计方案:

基于AT89C51单片机的数码管显示模块显示的倒计时器。

主要是以单片机来控制,用按键来设定倒计时初始时刻的值,数码管作为显示模块来显示剩余的时间。

此电路对于倒计时器中的LED数码管示器来说,采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。

 

图1LED数字倒计时器设计框图

(2)功能模块:

倒计时器的总体包括显示电路,按键电路,复位电路,晶振电路和报警电路等五个模块。

显示模块显示计数与灭灯,复位模块控制电路完成计数的直接清零,暂停/连续技术,用按键模块来设定倒计时初始时刻的值,报警模块实现定时时间到报警等功能。

(3)工作原理:

以AT89C51单片机为核心控制器,P0口接LED数码显示模块,P1口接按键,通过按键输入来控制显示器的显示。

在上电时LED显示器开始显示时间,在按键电路中设置了七个按键,通过检测第5个按键开始倒计时,通过检测第1,2,3个按键按下的次数来实现小时,分和秒的调时的加减,检测第4个按键实现闹钟的定时,检测6,7个按键按下的次数来实现闹钟的小时和分钟的调时的加减,再由LED显示器显示时,分,秒的改变。

2、系统设计

(1)显示模块

显示电路采用了3个二为一体的LED数码管,单片机I/O的应用最典型的是通过I/O口与7段LED数码管构成显示电路。

图2数码管显示电路

(2)晶振模块

单片机的晶振电路,即时钟电路。

单片机的工作流程,就是在系统时钟的作用下,一条一条地执行存储器中的程序。

单片机的时钟电路由外接的一只晶振和两只起振电容,以及单片机内部的时钟电路组成,晶振的频率越高,单片机处理数据的速度越快,系统功耗也会相应增加,稳定性也会下降。

采用11.0592MHz 晶振,电容选22pF或30pF均可。

图3晶振模块原理图

(3)复位电路:

系统上电时提供复位信号,直至系统电源稳定后撤销复位信号。

为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分,合工程中引起的抖动而影响复位。

如图所示,复位键接于AT89C51芯片的人RST接口,用于控制倒数计时器的复位操作。

计时器运行时按下复位键,计时器停止计数,或计数完成后按复位键进入下一轮计数工作。

图4复位电路图

(4)按键模块:

在上电时LED显示器开始显示时间,在按键电路中设置了七个按键,通过检测第5个按键开始倒计时,通过检测第1,2,3个按键按下的次数来实现小时,分和秒的调时的加减,检测第4个按键实现闹钟的定时,检测6,7个按键按下的次数来实现闹钟的小时和分钟的调时的加减,再由LED显示器显示时,分,秒的改变。

图5按键模块原理图

(5)报警模块:

报警模块实现定时时间到报警等功能。

图6复位及报警模块原理图

3、系统实现

(1)实物图

(2)分析

设计结果为:

三个LED显示器以小时、分钟、秒数逐一递减,即呈现倒计时现象,最终设计成功。

在整个实物焊接及接线过程中,必然出现众多问题,如:

焊接错误导致元件无法使用、接线错误导致最终结果不出现、排线错误导致LED显示不完全等等,这需要我们不断的检测和实验,需要我们耐心的寻找问题所在,从而解决问题,整个过程中,忙碌但快乐,繁琐却充实。

四、总结

在做本次课程设计的过程中,我们充分掌握了各模块电路的工作原理。

从课题入手到中间过程的修改设置、到使用Proteus8Professional电路仿真测试,再到最后的实物电路焊接。

每个过程都是小组的三个成员共同完成的,,并使用KeiluVision4编写了全部的驱动程序,在编写程序的过程中我们遇到很多的问题,翻阅了很多资料,也向老师请教了很多,最终写出了程序,画出了电路图,完成了本次课程设计。

在整个仿真过程中,免不了各种问题的频频出现,比如:

程序编写出现错误导致电路仿真错误、保存程序的路径方式错误导致电路无法导入程序、导入程序之后却又无法进行加载仿真等等。

在实物电路焊接时,由于操作不熟悉,导致焊锡融化与电路板相连。

这次课程设计让我受益匪浅,无论从知识上还是其他的各个方面。

上理论课时从来没有见过真正的单片机,只是从理论的角度去理解枯燥乏味的书面知识,但在实践过程中真真切切的尝试了单片机及其系统的仿真和应用,能够理论联系实际的学习,开阔了眼界,提高了单片机知识的理解和水平。

除此之外,我还体会团结的重要性及力量之强大,设计过程让我们处理事情更加有条理,思路更清晰明了,发现、提出、分析、解决问题和实践能力的提高都将受益于我以后的工作、学习和生活中。

五、附录

附录1:

元件清单

元件名称

型号

数量

单片机最小开发板

STC89C52

1

电阻

10K

1

按键

5

数码管2位一体

共阳

3

集成块

74LS245

三极管

9015

1

蜂鸣器

1

电阻

1K

2

电阻

100Ω

1

电阻

2.7K

4

电阻

330Ω

8

集成块

74LS07

1

AC/DC(5V/1A)电源

1

单排插针40

2

双排插针40

2

9X15cm万用板(3连孔)

1

杜邦线

30

附录2:

完整的连接图

附录3:

程序编程

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

/*七段共阴和显示定义*/

//此表为LDE的字模,共阳数码管0-9

ucharcodedispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码控制

/*定义并初始化变量*/

ucharseconde=15;//秒

ucharminite=0;//分

ucharhour=0;//时

ucharmstcnt=0;//定时器计数,定时50ms,mstcnt满20,秒加1

ucharshi=0;//闹铃功能

ucharfen=0;

ucharbjcs;//报警次数

ucharc;

sbitP10=P1^0;//second调整定义

sbitP11=P1^1;//minite调整定义

sbitP12=P1^2;//hour调整定义

sbitP15=P1^5;//整点报时

sbitP13=P1^3;//闹铃功能,调整时间

sbitP16=P1^6;//调整时

sbitP17=P1^7;//调整分

sbitP14=P1^4;//关闭闹铃

/*延时子程序*/

voiddelay(uintk)

{

ucharj;

while((k--)!

=0)

{

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

{;}

}

}

/*时间处理子程序*/

voidtime(void)

{

if(seconde==59)

{

seconde=0;

minite++;

if(minite==59)

{

minite=0;

hour++;

if(hour==24)

{

hour=0;

}

}

}

}

/*显示子程序*/

voiddisplay(void)

{

if(P13==1)

{

P2=0x04;

P0=dispcode[seconde%10];//秒个位

delay

(1);

P2=0x08;

P0=dispcode[seconde/10];//秒十位

delay

(1);

//P2=0XFB;

//P0=dispcode[10];//间隔符

//delay

(1);

//

P2=0X10;

P0=dispcode[minite%10];//分个位

delay

(1);

P2=0X20;

P0=dispcode[minite/10];//分十位

delay

(1);

//

//P2=0Xdf;

//P0=dispcode[10];//间隔符

//delay

(1);

P2=0X40;

P0=dispcode[hour%10];//时个位

delay

(1);

P2=0X80;

P0=dispcode[hour/10];//时十位

delay

(1);

}

}

/*键盘扫描子程序*///设置倒计时时间

voidkeyscan(void)

{

if(P10==0)//秒位的调整

{

delay(30);

if(P10==0)

{

seconde++;

if(seconde==59)

{

seconde=0;

}

}

delay(250);

}

if(P11==0)//分位的调整

{

delay(30);

if(P11==0)

{

minite++;

if(minite==59)

{

minite=0;

}

}

delay(250);

}

if(P12==0)//时位的调整

{

delay(30);

if(P12==0)

{

hour++;

if(hour==24)

{

hour=0;

}

}

delay(250);

}

}

/*倒计时*/

voidjian(void)

{

if(P14==0)

{

P14=0;

{

if(c==20)

{

c=0;

seconde--;

if(seconde>59)

{

seconde=59;

minite--;

if(minite>59)

{

minite=59;

hour--;

if(hour>23)

{

hour=0;

minite=0;

seconde=0;

}}}}}}}

/*定时闹钟*/

voiddingshi(void)

{

if(P13==0)//按信P13不松,显示闹铃设置界面,分别按住P16、P17设置闹铃时间

{

P2=0Xfb;

P0=dispcode[seconde%10];//秒个位

delay

(1);

P2=0Xf7;

P0=dispcode[seconde/10];//秒十位

delay

(1);

P2=0Xef;

P0=dispcode[fen%10];//分个位

delay

(1);

P2=0Xdf;

P0=dispcode[fen/10];//分个位

delay

(1);

P2=0Xbf;

P0=dispcode[shi%10];//时个位

delay

(1);

P2=0Xd7f;

P0=dispcode[shi/10];//时十位

delay

(1);

}

if(P16==0)//设定时

{

delay(30);

if(P16==0)

{

shi++;

if(shi==24)

{

shi=0;

}

}

delay(250);

}

if(P17==0)//设定分

{

delay(30);

if(P17==0)

{

fen++;

if(fen==60)

{

fen=0;

}

}

delay(250);

}

if((hour==shi)&(minite==fen)&(seconde==0))//闹铃时间到,报警十次

{

for(bjcs=0;bjcs<2;bjcs++)

{

P15=0;

delay(10);

jian();

P15=1;

//delay(500);

}

}

}

/*整点报警*/

voidzhengdian(void)

{

if((seconde==0)&(minite==0))//整点报时

{

P15=0;

delay(10);

jian();

P15=1;

}

}

/*主函数*/

voidmain(void)

{

P0=0xff;

TMOD=0X11;//time0为定时器,方式1

TH0=0X3C;//预置计数初值,50ms

TL0=0XB0;

EA=1;//总中断开

ET0=1;//允许定时器0中断

TR0=1;//开启定时器0

while

(1)

{

keyscan();//按键扫描

dingshi();//定时闹钟

zhengdian();//整点报时

jian();

display();//显示时间

}

}

voidtimer0(void)interrupt1//定时器0方式1,50ms中断一次

{

TH0=0X3C;//手动加载计数脉冲次数

TL0=0XB0;

c++;

//mstcnt++;//用于计算时间,每隔50ms加1

//if(mstcnt==20)//mstcnt满20即为一秒

//{

//seconde++;//秒加1

//time();//时间处理

//mstcnt=0;//对计数单元的清零,重新开始计数

//}}

六、参考文献

[1]·李群芳,肖看,张士军·单片微型计算机与接口技术·电子工业出版社·第四版

[2]·钟富昭等·8051单片机典型模块设计与应用[M]·人民邮电出版社·2007

[3]·陈海宴·51单片机原理及应用[M]·北京航空航天大学出版社·2010

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

当前位置:首页 > 高中教育 > 数学

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

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