当前位置:文档之家› 基于单片机AT89C51控制的键控流水灯的设计—课程设计报告

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

课程设计报告论文题目键控流水灯专业班级 ___学生姓名指导教师 _____摘要:单片机是一种集成电路芯片,采用超大规模技术,把具有数据处理能力的微处理器、随机存取数据存储器、只读程序存储器、输入输出电路、可能还包括定时计数器、串口通信口、显示驱动电路,脉宽调制电路、模拟多路转换器及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<reg51.h>#define smg1 P0#define lsd1 P1#define smg2 P2unsigned int i=1,u=7,j,n,c,k,h=7,s=1;unsigned char sj=20;unsigned char js;code unsigned c hara[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};code unsigned char b[]={0xf9,0xa4,0xb0,0x99,0x92};code unsigned c har 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){{wnen1=0;wnlsd3();sjms3();}}else if(i==4) {if(wnen1){wnen1=0;wnlsd4();sjms4();}}else if(i==5) {if(wnen1){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灯以两个灯亮的形式开始跳两个灯显示。

相关主题