基于8255扩展的多模式跑马灯设计_毕业设计论文.doc_第1页
基于8255扩展的多模式跑马灯设计_毕业设计论文.doc_第2页
基于8255扩展的多模式跑马灯设计_毕业设计论文.doc_第3页
基于8255扩展的多模式跑马灯设计_毕业设计论文.doc_第4页
基于8255扩展的多模式跑马灯设计_毕业设计论文.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于8255扩展的多模式跑马灯设计一、设计目的为了进一步巩固学习的理论知识,增强学生对所学知识的实际应用能力和运用所学的知识解决实际问题的能力,开始为期两周的课程设计。通过设计使学生在巩固所学知识的基础之上具有初步的单片机系统设计与应用能力。1、通过本设计,使学生综合运用单片机技术原理与应用、dsp原理与应用c语言程序设计以及数字电路、模拟电路等课程的内容,为以后从事电子产品设计、软件编程、系统控制等工作奠定一定的基础。2、学会使用keil c和proteus等软件,用c语言或汇编语言编写一个较完整的实用程序,并仿真运行,保证设计的正确性。3、了解单片机接口应用开发的全过程:分析需求、设计原理图、选用元器件、布线、编程、调试、撰写报告等。二、设计内容与要求内容:用8155或8255扩展io实现16个led的跑马灯,提供多种跑马灯运行模式。要求:1、掌握原理图画法,在proteus平台上用单片机完成所选题目的原理图设计。2、在keil c平台上使用c语言编程实现编程,并调试通过。3、在proteus平台上利用设计好的原理图和调试好的程序完成整个仿真。4、按设计报告要求完成课程设计报告。三、系统总体设计3.1、问题分析本次课程设计的题目是单片机课程设计,根据我们所学的单片机知识和本次课设的内容要求,我们知道虽然在80c52系列单片机中,有四个8位i/o端口,但真正能够提供给用户使用的只有p1口,因为p0口和p2口通常需要用来传送外部存储器的地址和数据,p3口也需要使用它的第二功能。因此,单片机提供给用户的i/o接口线并不多,对于复杂的一些的应用系统都应该进行i/o口的扩展。而本次课设又要求跑马灯有多种运行模式,而这些操作模式可以完全由8255的控制寄存器的控制字决定。利用8255的控制字模式来定义8255输出口的个数,驱动所需的led灯的个数,从而实现课设的目的。3.2、方案提出本次课程设计的内容是用8155或8255扩展i/o实现16个led的跑马灯,并且要提供多种跑马灯运行模式。基于这一设计内容和上面的问题分析,我提出利用at89c52驱动扩展8255数据输出口来实现16个led跑马灯的显示,并且利用at89c52的外围按键电路(设置三个按按键,其中一个按键用于控制16只led灯模式的输出,另两个用于控制16只led灯速度的输出。)实现16个led的不同运行模式。3.3、设计思路根据以上方案,at89c52的p2.5-p2.7三个接口接按键电路,不论加速、减速还是运行模式都是由单片机内部的程序控制;p0口接7段共阳数码管,用来显示跑马灯的9种不同运行模式;p0口接8255的输入口d0-d7;8255的pa、pb口外接16个led,通过程序控制这两个端口的电平高低,将16个led的正极接+5v电源,负极接pa和pb口,即pa和pb口的相应端口为高电平时,led的两端都为高电平,所以led不亮,当led的相应端口为低电平时就能被点亮。再通过程序循环让各个led以不同的方式被点亮来达到跑马的效果,并且其中要有一定的延时,延时时间要大于人眼视觉暂留时间,否则人眼看上去每个灯都是亮的也就没有跑马效果。3.4、系统总体框图8255at89c5216个led显示阵列复位电路7段共阳数码管键盘左边六部分电路均需+5v电压,在此没画电源部分图1 系统总体框图四、系统硬件设计4.1、整体电路设计4.1.1、电路设计及功能本设计采用at89c52驱动可编程接口芯片8255的扩展来实现led的多种显示模式。让at89c52芯片的p0口与8255芯片的三态双向数据总线d0-d7连接,实现数据传送。当cpu 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。8255的地址选择线a1、a0分别与at89c52的p2.1和p2.0连接,通过定义不同的地址来选择8255芯片的pa口或pb口工作。读写命令线分别与单片机的读写命令线相连,片选线和复位线直接接地。同时16个led灯的左侧8个从左到右依次与pa7-pa0口相连,右侧8个从左到右也依次与pb7-pb0口相连,通过k1按键可以选择不同的运行模式,通过k2、k3按键可以选择不同的速度,本次设计实现了9种跑马灯的运行模式。4.1.2、硬件原理框图 rstat89c52 p2口p1口 pa口 8255 pb口resetcsp0p7d0d7复位电路按键电路7段共阳数码管.led地图2 硬件原理框图4.1.3、电路原理图图3 电路原理图4.2、单元电路设计4.2.1、单片机最小系统1、方案设计与论证单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路、电源电路。本设计没有用到晶振电路。无论用户使用哪种类型的单片机,总要涉及到单片机复位电路的设计。而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。2、复位电路设计无论是在单片机刚开始接上电源时,还是运行过程中发生故障时都需要复位。复位电路用于将单片机内部各状态恢复到一个确定的初始值,并从这个状态开始工作。单片机的复位条件:必须使其rst引脚上持续出现两个(或以上)机器周期的高电平。单片机的复位形式:上电复位、按键复位。上电复位电路中,利用电容充电来实现复位。在电源接通瞬间,rst引脚上的电位是高电平,电源接通后对电容进行快速充电,随着充电的进行,rst引脚上的电位也会逐渐下降为低电平。只要保证rst引脚上高电平出现的时间大于两个机器周期,便可以实现正常复位。按键复位电路中,当按键没有按下时,电路同上电复位电路。如在单片机运行过程中,按下复位键k4,已经充好电的电容会快速通过200电阻的回路放电,从而使得rst引脚上的电位快速变为高电平,此高电平会维持到按键释放,从而满足单片机复位的条件实现按键复位。本设计采用按键复位。图4 复位电路图3、芯片简介at89c52是一个低电压,高性能cmos 8位单片机,片内含8k bytes的可反复擦写的flash只读程序存储器和256 bytes的随机存取数据存储器(ram),器件采用atmel公司的高密度、非易失性存储技术生产,兼容标准mcs-51指令系统,片内置通用8位中央处理器和flash存储单元,功能强大的at89c52单片机可为您提供许多较复杂系统控制应用场合。at89c52有40个引脚,32个外部双向输入/输出(i/o)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,at89c52可以按照常规方法进行编程,但不可以在线编程(s系列的才支持在线编程)。图5 at89c52引脚排列图4.2.2、按键电路设计1、方案设计与论证按键电路主要向at89c52单片机发送动作信息来控制整个系统。k1是选择模式键,k2可以对跑马灯的速度进行加速,k3可以对跑马灯的速度进行减速。整个系统可以实现对跑马灯模式的多层控制,可以进行加减速。模式、加速、减速分别接p2.5、p2.6、p2.7口,再通过按键接地。当按键按下时向单片机发送低电平信号,当单片机采集到低电平信号时,启动中断进而转向处理相应的中断处理程序,实现预期的功能。基于本设计要求选择的按键是不带锁存的,向单片机发开关信号,即低电平信号。图6 按键电路图4.2.3、显示电路设计1、led显示部分显示部分用16个发光二极管分别接在pa和pb口,通过程序控制pa和pb的16个端口按照一定的方式依次为低电平以点亮相应端口的led。图7 led显示电路图2、数码管显示部分选取共阳极数码管,它有7段每段都有一个引脚,通过单片机的i/o口向其写低电平并用电阻限流就可以点亮相应的段,通过0-9十进制编出相应的数码显示数字编码。本设计数码管显示的模式共9种,相应模式由数码管显示出来,每当模式按钮按下时,相应的模式加一 ,数码管显示相应模式。共阳数码管简介:图8 数码管引脚图表1 常用字符的八段显示码图9 数码显示电路图4.2.4、i/o扩展本设计采用8255进行i/o口扩展。8255的地址选择线a1、a0分别与at89c52的p2.1和p2.0连接,当a1a0=00时,选择pa口工作,当a1a0=01时,选择pb口工作。读写命令线分别与单片机的读写命令线相连,片选线和复位线直接接地。8255芯片简介如下:8255是intel公司生产的可编程并行i/o接口芯片,有3个8位并行i/o口。具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。同时必须具有与外设连接的接口a、b、c口。8255引脚功能:reset:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有i/o口均被置成输入方式。cs:芯片选择信号线,当这个输入引脚为低电平时,即/cs=0时,表示芯片被选中,允许8255与cpu进行通讯;/cs=1时,8255无法与cpu做数据传输。rd:读信号线,当这个输入引脚为低跳变沿时,即/rd产生一个低脉冲且/cs=0时,允许8255通过数据总线向cpu发送数据或状态信息,即cpu从8255读取信息或数据。wr:写入信号,当这个输入引脚为低跳变沿时,即/wr产生一个低脉冲且/cs=0时,允许cpu将数据或控制字写入8255。d0d7:三态双向数据总线,8255与cpu数据传送的通道,当cpu 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。8255具有3个相互独立的输入/输出通道端口,用+5v单电源供电,能在以下三种方式下工作:方式0基本输入输出方式;方式1选通输入/出方式;方式2双向选通输入/输出方式。pa0pa7:端口a输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。工作于三种方式中的任何一种。pb0pb7:端口b输入输出线,一个8位的i/o锁存器,一个8位的输入输出缓冲器。 不能工作于方式二。pc0pc7:端口c输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。端口c可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口a和端口b配合使用,可作为控制信号输出或状态信号输入端口。不能工作于方式一或二。a1、a0:地址选择线,用来选择8255的pa口、pb口、pc口和控制寄存器。当a1=0、a0=0时,pa口被选择;当a1=0、a0=1时,pb口被选择;当a1=1、a0=0时,pc口被选择;当a1=1、a0=1时,控制寄存器被选择。五、系统软件设计5.1、程序流程图程序设计思路:主程序中默认执行0模式跑马灯。在中断服务程序中,首先读取按键状态,然后延时10ms,再次读取按键状态。把两次获得的按键状态比较,如果不同,就表示是抖动,退出中断;否则,就去判断是哪个按键按下。如果是k1,就执行下一个跑马模式;如果是k2,就执行跑马加速;如果是k3,就执行跑马减速。图10 主程序流程图图11 中断子程序流程图5.2、算法1、程序的开始,先包含相应函数的头文件名,再定义8255控制字、pa口、pb口以及各个参数和及各个位等。2、编译三个函数,分别是void delay()函数、void led_display()函数和void keyprocess()函数,它们依次是延时函数、led显示函数和按键处理函数。3、主函数中,开中断,启动定时器,设置8255的pa、pb口为输出口,并且用while(1)函数进行按键的判断和处理。4、延时函数中,使用while()和for(;)构成的嵌套函数来达到延时的目的。5、led显示函数中,让pa口显示高八位,pb口显示低八位,再使用开关函数执行led不同的跑马模式。如果led滚动方向是逻辑“1”,那么led从右向左循环亮灯,如果led滚动方向是逻辑“0”,那么led从左向右循环亮灯。6、按键处理函数中,如果检测到k1按下,那么led的滚动方向dirtect和移动位数mb_count重新设置为初始值,led的滚动模式加1,并在数码管上显示相应的模式号。如果检测到k2按下,那么在相应的模式上led的滚动速度加1,如果检测到k3按下,那么在相应的模式上led的滚动速度减1。程序中各个参数之间都一一对应,根据要求相互呼应。通过控制这些参数的量值来实现硬件仿真中多种跑马灯的运行模式。5.3、编程技巧设计中,将pa口设置为显示高八位led灯,pb口设置为显示低八位led灯,要注意两组初始值并不相同,多个函数和参数组合使用,实现跑马灯的多种运行方式。5.4、源程序清单(见附录一)六、仿真过程综述用keil c将程序编写好之后,先编译程序,检查程序有无错误。如果有错误就要改正,直到没有错误,最后编译、链接生成.hex文件,再用proteus画好硬件电路图,将刚生成的.hex文件添加到at89c52中,点击运行按钮进行仿真调试,在调试过程当中通过调试的结果完善程序。仿真过程中,打开仿真开关,系统工作在默认的0模式,跑马速度也是默认的,当不断地按下按钮k1时,系统的跑马模式在08模式中更换;当不断地按下按钮k2时,16只led灯的跑马速度会在当前运行模式下不断地增加,直到达到最大跑马速度;当不断地按下按钮k3时,16只led灯的跑马速度会在当前运行模式下不断地减小,直到达到最小跑马速度。图12 仿真结果图七、调试过程中的主要难点及解决思路和办法刚开始调试时,我发现数码管显示不正常,led灯没有跑马的运行方式,按键部分k1、k2和k3都不起作用。后来经过仔细检查源程序和同学们的讲解,我找到了问题的原因所在。因为我在主函数main()中对at89c52的p0、p1、p2和p3端口都赋了初值0xff,才导致这四个端口处都是高电平,从而导致电路工作不正常。把这一句代码删掉后,再进行仿真,这时电路的各个部分工作都正常了,但是美中不足的是16只led灯的显示方式看起来不连贯,然后我又根据源程序更改了8255的pa、pb端口与16只led灯的连接顺序,直到16只led灯的显示方式看起来循环连续。八、课设结果及分析、收获、体会和建议8.1、结果及分析打开仿真开关,系统工作在默认的0模式,如果dirtect=1,ledflag=1,那么执行语句led_display(0xfffemb_count),16只led灯从左向右依次全亮;这时如果mb_count=15,那么dirtect=!0=1,ledflag=!1=0,同时mb_count重新变为初始值0,然后再执行第一个嵌套语句的else中的语句led_display(0x7fffmb_count),16只led灯第一个不亮,后15个同时全亮,接着从左向右led灯依次全灭,在这一过程中,由于人眼视觉暂留原因,看不到16只led灯立即全灭接着第一个灯不亮,后15个同时全亮的过程;这时如果mb_count=15,那么dirtect=!1=0,ledflag=0不变,同时mb_count也变为0,然后执行第二个嵌套语句的else中的语句led_display(0xfffemb_count),16只led灯前15个同时全亮,最后一个不亮,接着从右向左led灯依次全灭,这样就完成了一轮循环,然后按上述顺序再进行第二轮、第三轮循环。8.1、收获体会为期两周的单片机课程设计已经接近尾声,回顾这两周的课程设计,我感觉自己收获颇丰。首先,我对单片机以及c语言的认识和理解水平又上升了一个台阶,并且加深了我对软硬件结合的认识;其次,本次课设将我们平时学到的理论知识真正应用到了实际应用中去,实现了学与用相结合这一宗旨;最后,本次课设涉及到了对两个软件keil c和proteus的学习,现在我已经基本熟悉了这两个仿真软件的相关知识和操作方法。总之,从本次课设中我所收获到的知识,虽然目前看来没有用武之地,但是它为我们将来从事电子产品设计、软件编程等工作必会奠定良好的基础。万事开头难,在刚开始课程设计的时候,大家都有点茫然而且都有无从下手的感觉。首先是题目的选择,在没有决定题目之前,查找资料是毫无目的的,基本是查查这个资料,待会又查查另一个,这大大的浪费时间。最后,经过老师的指导以及自己查阅相关的资料,逐渐有了自己的设计想法,终于定下了题目,并且制定出了系统的结构框图。此次课程设计,关键的是整个课设过程。回顾起此次课程设计,至今我仍然感慨颇多。在这段时间里,从理论到实践,可以说得是苦多于甜,但是我们从中可以学到很多很多的东西,同时,不仅可以巩固我们以前所学过的专业知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计,我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从实践中得出结论,才能真正掌握所学的知识,从而提高自己的实际动手能力和独立思考能力。这次课程设计不仅锻炼了我们的动手能力,更开阔了我们的思维境界,使我们的知识更丰富,同时也增加了我们对所学专业的兴趣。在这次课程设计的过程中我也遇到了诸多的问题,可以说是困难重重,但是通过对设计的认真分析以及与同学们的讨论,我找到了其中的出错点,将其一一改正,最终这些问题都得到了解决。 希望学院平时多给我们出一些小设计课题,我认为像这样自己做一个设计对理论知识的学习和掌握还是很有帮助的,当我们遇到不懂的问题的时候,还可以得到老师的细心指点,这样才能够更全面的认识和掌握某一方面的知识。九、致谢单片机课程设计为我们提供了一个展现自己的舞台,一次难得的锻炼理论和实践相结合能力的机会。因此,在这里我应该感谢的人很多,首先,感谢实验室的各位指导老师们,谢谢您们的悉心指导,特别是我们的指导老师李贺老师的细心指导,其次,感谢各位同学对我的耐心帮助。所有的这些,都将激励我在将来的学习中积极进取,用优良的表现来回报老师和同学对我的关心和帮助。十、参考文献1 徐爱钧,彭秀华.keil c52 v7.0单片机高级语言编程与vision2应用实践(第二版).北京:电子工业出版社,20082 李学礼.基于proteus的8051单片机实例教程(第二版).北京:电子工业出版社,20083 谭浩强.c程序设计(第三版).北京:清华大学出版社,20064 胡汉才.单片机原理及其接口技术(第三版).北京:清华大学出版社,20105 阎石.数字电子技术基础(第五版).北京:高等教育出版社,20066 谢自美.电子线路设计与实验.武汉:华中科技大学出版社,20067 百度搜索引擎.网址:/view/2251929.htm8 百度搜索引擎.网址:/view/1684872.htm附录一:/*名称:16个led不同模式的跑马灯;*作者:黄启孟*单位:通信与电子信息工程学院-通信专业*说明:单击模式按键可在08个模式中选择,加速和减速按键可调整led*滚动显示的速度。*/#include #include #include #define uchar unsigned char#define uint unsigned int#define pa xbyte0xfcff/*定义pa端口*/#define pb xbyte0xfdff/*定义pb端口*/#define ctl xbyte0xffff/*定义8255控制字*/sbit a0=p20;/*定义8255端口地址引脚a0*/sbit a1=p21;/*定义8255端口地址引脚a1*/uchar modeno;/*模式编号*/uint speed;uint tcount=0;uchar idx;/*速度取值索引*/uchar mb_count=0;/*移动位数*/bit dirtect=1; ledflag=1;/*滚动方向*/*段码表*/uchar code dsy_code=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/*调速表*/uint code stable=0,1,3,5,7,9,15,30,50,100,200,230,280,300,350;/*延时函数*/void delay(uint x) uchar i; while(x-)for(i=0;i8);/*显示高8位*/*定时器*/void t0_int() interrupt 1if(+tcountspeed) return ;tcount=0;switch(modeno)case 0: if(dirtect) if(ledflag)led_display(0xfffemb_count); else if(ledflag)led_display(0x7fffmb_count); elseled_display(0xfffemb_count);mb_count=(mb_count+1)%16;/*确保16只led循环显示*/break;case 2:if(dirtect)led_display(0xaaaamb_count);if(mb_count=15) dirtect=!dirtect;mb_count=(mb_count+1)%16;/*确保16只led循环显示*/break;case 3:if(dirtect)led_display(0x000fmb_count);if(mb_count=15) dirtect=!dirtect;mb_count=(mb_count+1)%16;/*确保16只led循环显示*/break;case 4:if(dirtect)led_display(0x003fmb_count);if(mb_count=15) dirtect=!dirtect;mb_count=(mb_count+1)%16;/*确保16只led循环显示*/break;case 5:if(dirte

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论