《基于单片机彩灯设计报告.docx》由会员分享,可在线阅读,更多相关《基于单片机彩灯设计报告.docx(8页珍藏版)》请在第壹文秘上搜索。
1、西安文理学院机械电子工程系课程设计任务书学生姓名焦银娟专业班级电子信息工程学号指导教师刘密歌职称副教授教研室电子信息工程课程一单片机原理及应用题目基于单片机的彩灯设计任务与要求1 .用三个按键开关K1,K2,K3组成一个独立式键盘,其中Kl控制八个彩灯从左向右依次循环点亮,K2控制八个彩灯从右向左依次循环点亮,K3控制八个彩灯技-定的时间间隔闪烁点亮。2 .给出硬件实现电路及软件程序3 .论文要求思路清晰,结构合理,语言流畅,书写格式符合要求。开始日期2023.12.19完成日期2023.12.302023年12月18日一:课程设计题目基于单片机的彩灯设计二:课程设计任务与要求:利用89C51
2、单片机设计彩灯,用三个按键开关K1,K2,K3组成一个独立式键盘,其中Kl控制八个彩灯从左向右依次循环点亮,K2控制八个彩灯从右向左依次循环点亮,K3控制八个彩灯按一定的时间间隔闪烁点亮。三:设计过程:1 .设计原理:此次课程设计题目是基于单片机的彩灯设计,由课程设计的要求和任务,我采用的C语言编程,系统由AT89C51、LED发光二极管、按键,可以实现彩灯的不同类型显示切换。其硬件电路主要有主控制器,LED显示电路,复位电路,晶振电路。系统程序的设计包括主程序的设计,中断效劳程序等等。此程序直接在KeiI软件编译程序,利用ProteUS进行仿真调试,方便修改程序。2.1 芯片介绍:AT89C
3、51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM-FalShProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活
4、性高且价廉的方案。2.2 主要特性: 与MCS-5兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保存时间:10年.全静态工作:0Hz-24Hz 三级程序存储器锁定 128*8位内部RAM 32可编程I/O线 两个16位定时器/计数器 5个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路AT89C51引脚路VCC:供电电压。GND:接地。PO:PO口为一个8位漏级开路双向I/O口Pl口:Pl口是一个内部提供上拉电阻的8位双向I/O口,P2:P2口为一个内部上拉电阻的8位双向I/O口,P3:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流
5、。P3口也可作为AT89C51的一些特殊功能口,P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。 返回主程序PSEN:夕卜部程序存储器的选通信号。XTALI:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。3.硬件系统框图与说明:实验总体电路构造方案比拟简单,主要包括键盘控制电路用脉冲按键开关对电路进行控制)和显示电路(单片机控制发光二极管的显示)。图Ll实验方案图按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。AT89C52单片机是美国ATMEL公司生产的低电压、高性能CMoS8位单片机,具有丰富的内
6、部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.255.5OV的电压工作范围和024MHZ工作频率,使用AT89C52单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。3.2 硬件电路设计实验电路可划分为两个组成局部,一者为显示电路局部,主要是由8个相同的发光二极管组成,用来显示流水灯的不同显示形态,另一局部即控制电路局部,主要由脉冲按键开关组成,用以控制流水灯的不同显示状态。首先介绍显示电路局部,电路原
7、理图如下列图所示:(1) Kl控制八个彩灯从左向右依次循环点亮(2) K2控制八个彩灯从右向左依次循环点亮(3) K3控制八个彩灯按一定的时间间隔闪烁点亮。我们所选用的数码管是共阴极的,置1时导通,所以将单片机的P0.0P0.7连接8个发光二级管,P2.0P2.2分别连接KI、K2、K3三个按键开关。从上图中可以看出,如果要让接在P0.0口的LEDI亮起来,那么只要把P0.0口的电平变为低电平就可以了;相反,如果要接在P0.0口的LEDl熄灭,就要把POo口的电平变为高电平;同理,接在P0.1P0.7口的其他7个LED的点亮和熄灭的方法同LEDh因此,要实现流水灯功能,我们只要将发光二极管LE
8、DlLED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否那么我们就看不到流水效果了。3.3 软件主要模块流程图与说明:#include#defineuintunsignedint#defineucharunsignedcharuintm_led;uinta;Uinti;uintled;voiddelay(uintz)uintx,y;for(x=100;x0;x-)for(y=z;y0;y-);voidinit()TMOD=OxOI;ETO=1;EA=1:TRO=
9、1;m_led=O;a=O;i=0;led=O;voidmain()init();P2=Oxff;while(l)switch(P2)CaSeOxfe:m_led=1;led=1;break;caseOxfd:med=2;led=128;break;caseOxfb:med=3;led=0;break;voidtimer()interrupt1TH0=(65536-50000)256;TLO=(65536-50000)%256;a+;if(a=20)EA=O;switch(mjed)case 1:PO=-led;led*=2;if(led0x80)led-1:break;case 2:PO=-
10、led;led/=2;if(led1)led=128;break;case 3:led=-led;PO=led;break;default:led=O;PO=-led;a=O;EA=I;四:心得体会通过本次设计实验,使我对这学期学所学51系列的单片机从理论知识到实践硬件的应用以及C语言知识的回忆,更加熟悉了89C51单片机的每一个拐角的输出和各项功能,而且对硬件电路的布线以及焊接能力有了很大的进步。本次的课程设计,使关于51系列单片机的,正是我们刚刚学到的51单片机,在平时课程的学习中,我们仅限于理论知识的讲解,即使知识是很扎实的,实际应用并不是这样的。开始时我也觉得自己的理论知识己经够了,但
11、当我拿到课题时,在脑海里想的是非常好的,但真正编成和控制时,理论和实际结合不到一起,甚至于51芯片的使用我都感觉很迷茫,还是经过搜集大量资料才将理论与实际结合到一起了。本次课程设计我主要负责编程,这次不仅锻炼了我C语言的知识,更加我们正在学习的51的定时与中断结合在一起,进行了实际的操作,让我的知识掌握得更加牢固。本次的实际经验之后,让我对单片机定时赋初值有了更新的认识,对程序的循环顺序、结构类型都有了非常深刻的认识,对真正硬件的连接也有了认识,不再将自己的知识局限于自己狭隘的空间中。这次课程设计终于圆满的完成了,我从理论和硬件以及实践上懂得了很多,也明白了一个团队的合作精神可以让我们战胜所有
12、的困难。2:通过这次课程设计一一秒表/时钟计时器,使我又重新开始学习C语言,因为C语言是大一学的,至从学完就再也没用过,所以开始很陌生,我又找了有关资料来了解,才有了一点眉目。刚开始以为可以用汇编很容易就写出来,因为我们正在学习汇编语言,以为学的很明白了,但是用汇编时才发现原来都不怎么熟练,编了一会程序发现只有一种感觉一一举步维艰啊!还是放弃汇编选择C语言吧!对于单片机,我们课本学习的是8OC51,但是这次做课程设计用的是89C51,这样不仅使我们掌握了80C51,而且对89C51也有了一定的了解了,在课堂上学习的都理论的,跟实际永远有一定的差距,不实践就不会发现问题。通过这次课程设计使我把课
13、堂上学习的东西都用到了实践中,例如:定时/计数器的应用与中断。学习的时候不怎么理解,但是在实践中应用了以后就自然了解了。这次课程设计使我受益匪浅,而且都是实际的东西。3:这次课程设计,我们做的是秒表/时钟计时器,最终我们选择的是用C语言编程,但原来学的也只是能看懂别人写好的程序而己,通过这次课程设计,更加熟练了C语言的程序设计思路。这次课程设计我主要负责焊接电路板,焊接过程中最困难的地方就是数码管的焊接,因为数码管的管脚和89C51的管脚是不对应的,而且要防止接线的交叉,所以最后确定了布线最合理的方案,如硬件电路图所示。我们这次设计的出现的最大问题是电路当中的复位电路,开始电路在PrOteUS
14、上仿真时都是可以正常复位的,但实际的电路中复位按键后的电阻的参数不合理,导致了RST上有电压,复位电路无效,所以最后我们去掉了那个电阻,此时复位电路才有效,所以理论和实际永远有差距,不实践永远发现不了问题。在焊接前我们没有想到给数码管用插槽固定,而是直接焊在了电路板上,这造成了后面的很多麻烦,我们方案中用的是共阴极的数码管,焊接第一个数码管时没有注意型号,等焊接到一半时才发现焊上的是共阳极的,所以不得不解焊重新焊接,这也是一个教训,以后焊接器件时能用上插槽的尽量用插槽,这在器件出了问题时很方便更换。最后焊接完成后在试验的过程中,刚一接通电源后的上电电压烧坏了LED显示器显示秒十位的C脚,这也是
15、这次课程设计的遗憾,以后在硬件的实验时还要多小心,防止造成不必要的损失。4:通过本次秒表/时钟计时器的设计实验,使我对这学期学所学51系列的单片机从理论知识到实践硬件的应用以及C语言知识的回忆,更加熟悉了89C5I单片机的每一个拐角的输出和各项功能,而且对硬件电路的布线以及焊接能力有了很大的进步。在这次试验中,我主要负责的是硬件电路的布线和焊接以及硬件测试。由于本次试验电路比拟简单,所以我们按照电路图布线后就马上开始焊接。焊好一个数码管检测后才发现我们把共阴极的数码管焊接成共阳级的了,很不容易才解焊下来,有了这次教训后,我们在焊接其他元器件的时候都提前检测好才开始焊接。第一次焊接完成后我们上电后发现实现了根本功能,可是不能复位,经过我们的讨论和反复试验,我们发现软件仿真和硬件实现并不是完全一致的,我们按照课本上焊接后终于完全实现了秒表/时钟计时器的功能。快要验收时我们发现数码管的一个二极管坏了,这才让我们意识到没有焊接插针的缺陷,以后一实验时一定要尽可能让原件可以取下