基于单片机AT89C51控制的键控流水灯 - 课程设计报告

更新时间:2023-03-13 07:04:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

宁波技师学院

课 程 设 计 报 告

论文题目 键控流水灯

摘 要:单片机是一种集成电路芯片,采用超大规模技术,把具有数

据处理能力的微处理器、随机存取数据存储器、只读程序存储器、输入输出电路、可能还包括定时计数器、串口通信口、显示驱动电路,脉宽调制电路、模拟多路转换器及A/D转换器等电路集成到一块芯片上,构成一个最小而完善的计算机系统。这些电路在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务。

键控流水灯设计通过编写代码实现16个LED灯5种流水灯显示方式。在设计中主要采用AT89C51这款芯片作为控制主体,用按钮来切换流水灯的发光方式来显示流水灯的发光模式。系统通过P1口外接16个发光二极管,P3口接2个按键,一个按键进行方式选择,数码管显示方式编号;用一个键来控制流水灯流动的速度。数码管接在AT89C51的P0和P2口上,而流水灯的发光二极管经过电阻接在P1口上。设计中辅以简单的设备和必要的电路,设计了一款流水灯,最终达到预期的目的。

目录

概 述 ........................................................................................................ 错误!未定义书签。

1引言 ....................................................................................................... 错误!未定义书签。 2课题综述 ................................................................................................................. 错误!未定义书签。

1.1课题来源与意义 ............................................................................................. 错误!未定义书签。 1.2面临的问题 ..................................................................................................... 错误!未定义书签。

3 系统设计 ............................................................................................... 错误!未定义书签。

3.1总体设计 ......................................................................................................... 错误!未定义书签。 3.2模块设计 ........................................................................................................................................... 5 3.3硬件设计 ........................................................................................................................................... 9

4代码编写 ................................................................................................................................. 9

5系统调试 ............................................................................................................................... 16

6系统运行结果与分析 ........................................................................................................... 16 7电路个人分工及组员分工 ................................................................................................... 16

结 论 ....................................................................................................................................... 17 参考文献 .................................................................................................................................. 18 附录 .......................................................................................................................................... 19

1 引言

单片机控制系统能够取代以前利用复杂电子线路或者数字电路构成的控制系统,可以软件控制来实现,并能够实现智能化。现在的单片机的控制范畴无所不在,例如通信产品、家用电器、智能仪器仪表、过程控制和专用控制装置等等,单片机的应用领域越来越广泛。

2 课题综述 2.1课题来源与意义

随着经济的发展、科技的突飞猛进,芯片业得到了迅速的发展,是单片机技术在各种民用和工业控制等领域得到更广泛的应用。单片机凭借其低成本、高性能的不可代替优势已经成为了微电脑 控制的主力军。学习单片机的有效方法是将理论与实践并重,因此通过对单片机可控流水灯的设计和研究,鼓励学生在熟悉基本原理的前提下,与实际应用相联系,提出自己的方案,来完善设计,使得他们更好的掌握单片机的应用。

2.2面临的问题

本次课程设计的要求是对16个LED灯设计5种流水灯显示方式,用一个按键进行方式选择,并用一个数码管显示方式编号;用一个键来控制流水灯流动的速度,并用一个数码管显示方式编号。

所要解决的问题有流水灯显示方式的设计,LED灯的驱动问题,七段显示数码管的驱动问题以及系统对外界按钮的相应问题。下面将对各个问题展开论述。

3 系统设计 3.1总体设计

实现这个课题我们使用AT89C51作为控制主体,使用十六个共阳极发光二极管作为LED显示流水灯,两个七段显示数码管来显示流水灯显示方式,外接两个按钮,其中用一个按键进行方式选择,并用一个数码管显示方式编号;用一个键来控制流水灯流动的速度,并用一个数码管显示方式编号。外接一个晶振来提供外接时钟脉冲。

单片机课程设计

- 2 - 模块图如下:

流程图如下:

3.2模块设计 3.2.1主体控制模块

芯片AT89C51是核心,P0、P1、P2、P3口均可以作为I/O口使用。两个数码管经过电阻接在AT89C51的P0和P2口上,P1口外接16个发光二极管,P3口接2个按键,一个按键进行方式选择,数码管显示方式编号;用一个键来控制流水灯流动的速度,数码管显示方式编号。

单片机课程设计

图3-3主体控制模块图

3.2.2按键控制模块、

按键控制模块采用独立式按键接口设计。独立式按键是每一个按键占用一根I/O端线。特点:各个按键相互独立,电路配置灵活;按键数量较多时,I/O端线耗费较多,电路复杂;软件结构简单

图3-4按钮控制模块图

3.2.3时钟模块

时钟电路用于产生单片机工作时所需的时钟信号,在芯片的外部通过18脚、19脚接晶体振荡器和微调电容,形成反馈电路,构成一个稳定的自激振荡器。电路中的C1、C2取30Pf左右,二晶体振荡器的频率范围通常是1.2-12MHZ,晶体振荡器的频率越高,振荡频率越高。

图3-5时钟模块图

3.2.4 显示模块

显示模块主体是八段显示数码管。共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起。通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出各种数字或字符。

图3-4显示模块图

3.2.5流水灯模块

发光二极管就是LED,是一种由磷化镓等半导体材料制成的、能直接将电能转换成光能的发光显示器件。当其内部有一定电流通过时,就是发光。发光二极管具有功耗低、体积小、可靠性高、寿命长和相应快等优点。

流水灯模块采用16个LED发光二极管,通过代码的编写,实现五种流水移动,其中电阻的作用是保护二极管,向它提供较小的电流,防止二极管因为电流过大而烧毁。

设计中,发光二极管是共阳极接法的,我们只需要将其初值不断的左移就会看到LED轮流的被点亮,也就实现了流水灯的功能。

图3-5流水灯模块图

3.3硬件设计

图3-6 键控流水灯图

4 代码编写

#include #define smg1 P0 #define lsd1 P1 #define smg2 P2 unsigned int i=1,u=7,j,n,c,k,h=7,s=1; unsigned char sj=20; unsigned char js; code unsigned char a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; code unsigned char b[]={0xf9,0xa4,0xb0,0x99,0x92}; code unsigned char d[]={0xf9,0xa4,0xb0,0x99,0x92};

bit wnen1=0; bit anj=0; sbit aj1=P3^0; sbit aj2=P3^1; void wnlsd1(void); void wnlsd2(void); void wnlsd3(void); void wnlsd4(void); void wnlsd5(void); void sjms1(void); void sjms2(void); void sjms3(void); void sjms4(void); void sjms5(void); void msms1(void); void msms2(void); void msms3(void); void msms4(void); void msms5(void); void zd1(void); void zd2(void); void csh(void); void sjkz(void); void ddh(void); main() { csh(); while(1) { if(anj) { anj=0; sjkz(); ddh(); } if(i==1) { if (wnen1) { wnen1=0; wnlsd1(); sjms1(); }

} else if(i==2) { if(wnen1) { wnen1=0; wnlsd2(); sjms2(); }

}

else if(i==3) { if(wnen1) { wnen1=0; wnlsd3(); sjms3(); } } else if(i==4) { if(wnen1) { wnen1=0; wnlsd4(); sjms4(); } } else if(i==5) { if(wnen1) { wnen1=0; wnlsd5(); sjms5(); } }

if(s==1) {

msms1(); } else if(s==2) { msms2(); } else if(s==3) { msms3(); } else if(s==4) { msms4(); } else if(s==5) { msms5(); } } }

void csh(void) { TMOD=1; TH0=0x3c; TL0=0xb0; TH1=0xec; TL1=0x78; EA=1; ET0=1; TR0=1; ET1=1; TR1=1; js=sj; }

void zd1(void) interrupt 1 { TH0=0x3c; TL0=0xb0; js=js-4; if(js==0) { wnen1=1; js=sj; }

}

void zd2(void) interrupt 3 { TH1=0xec; TL1=0xb0; anj=1; }

void sjkz(void) { if(aj1==0) { while(!aj1); sj=sj-4; if(sj==0) { sj=20; } js=sj; s=s+1; if(s>5) { s=1; } } }

void ddh(void) { if(aj2==0) { while(!aj2); i=i+1; if(i>5) { i=1; } } }

void wnlsd1(void) { lsd1=a[n]; n++; if(n>7)

{ n=0; } }

void wnlsd2(void) { lsd1=a[n]; n=n+2; if(n>7) { n=0; } }

void wnlsd3(void) { lsd1=a[u]; u=u-2; if(u==-1) { u=7; } }

void wnlsd4(void) { lsd1=a[c]; c=c+4; if(c>7) { c=0; } }

void wnlsd5(void) { lsd1=a[h]; h--; if(h==-1) { h=7; } }

void sjms1(void) {

smg1=b[0]; }

void sjms2(void) {

smg1=b[1]; }

void sjms3(void) { smg1=b[2]; }

void sjms4(void) { smg1=b[3]; }

void sjms5(void) { smg1=b[4]; }

void msms1(void) { smg2=d[0]; }

void msms2(void) { smg2=d[1]; }

void msms3(void) { smg2=d[2]; }

void msms4(void) { smg2=d[3]; }

void msms5(void) { smg2=d[4];

5 系统调试

通过对编写好的代码用keil进行编译后,由于对软件不是很熟悉导致编好的代码一直找不到目标,然后请同学帮忙后,很快就编写成功了

6 系统运行结果与分析

通过接线端子口接通提供电源后,再通过稳压电路将12V交流电压转换成5V直流电压,数码管和led灯能正常显示,数码管显示1,led灯以两个灯亮的形式开始右移,当显示完毕后,按下第一个键,数码管显示2,led灯以两个灯亮的形式开始跳两个灯显示。类似的,能够显示5种方式。另外一个键控制led的显示的速度,通电就数码管就显示1,按下第二个键,数码管显示2,led灯加速运行,类似的5种速度。由于电路上少加了一组可以控制按下按钮后数码管的显示数字乱跳的电路,在制作的时候也没有想到,还有在画PCB的时候将数码管的管脚接错了,使得打印在PCB板上的数码管上的线路接错了,检查维修好后,整体就有点不整洁,使整个电路整体观上显的不足之处。

7电路个人分工及组员分工图

负责项目 原理图 设计 PCB图 制作 实物图 制作 程序 设计 电路板 打孔 电路板 腐蚀 组员

结 论

通过这次的课程设计,让我学习到了很多知识以及认识到了很多问题。同时我意识到了一个很重要的问题,那就是课程设计之前的准备工作也是很重要的,包括提前预习设计的题目,上网和去图书馆查阅资料。我也清楚的知道了,资料也是那么重要,否则在一个新颖的题目面前,你将无从下手。通过准备工作,这样可以保正在设计的时候,有了充足的准备,使得自己不会在真正要开始课程设计的时候,对着题目发呆,没有什么进展。因此,我们觉得这个也是对待学习的一种好的态度,以后在学习中,也要一直以这种好的态度对待。

除此之外,让我发现这次的键控流水灯设计,对于我们以前的学习如数码管显示、led灯等的知识,不仅是一次很好的运用,而且让我再次花心思去复习了以前学习的知识点,运用之初相互结合知识点,使得知识点可以联系起来,对我的学习有了很大的好处。

在程序设计的过程中,也遇到了好多的问题,刚开始在代码调试的时候,一直会存在错误,也有过很失望的时候,在通过老师的帮助后,经过很多次的修改以后,终于把程序代码改好。但是在代码烧入芯片中,以及数码管的显示等问题上面,我们还是花费了好多时间,但是还是没有头绪。最终还是在老师同学的帮助下,以及帮我们把代码进行了修改,才得以完成了键控流水灯基本功能。

总的来说,这次设计获益胜多。因为本次课程设计是一个团队的合作,所以,不仅使得我们团结合作,学习到了知识,还让我们更加的学会沟通。不仅培养了实践能力,还培养了设计思维,同时也锻炼了动手实际操作能力,在摸索该如何

本文来源:https://www.bwwdw.com/article/3u8x.html

Top