您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > PROTEUS--跑马灯--单片机课程设计
微型计算机技术课程设计报告专业:通信工程班级:xxxxxxxxx姓名:XXX学号:xxxxxxx指导教师:XX时间:xxx通信与电子信息工程学院28255扩展一、课设目的、内容;1.目的:为了进一步巩固学习的理论知识,增强学生对所学知识的实际应用能力和运用所学的知识解决实际问题的能力,开始为期两周的课程设计。通过设计使学生在巩固所学知识的基础之上具有初步的单片机系统设计与应用能力。(1).通过本设计,使学生综合运用《微型计算机技术》、《C语言程序设计》以及《数字电路》、《模拟电路》等课程的内容,为以后从事电子产品设计、软件编程、系统控制等工作奠定一定的基础。(2).学会使用KEILC和PROTEUS等软件,用C语言或汇编语言编写一个较完整的实用程序,并仿真运行,保证设计的正确性。(3).了解单片机接口应用开发的全过程:分析需求、设计原理图、选用元器件、布线、编程、调试、撰写报告等。2.内容:8155或8255扩展用8155或8255扩展IO实现16个LED的跑马灯,提供多种跑马灯运行模式二、问题分析、方案的提出、设计思路及原因;本次课程设计的题目是8255的扩展,利用AT89C52驱动扩展8255数据输出口来实现16个LED跑马灯的显示。但是在80C52系列单片机中,有四个8位I/O端口,但真正能够提供给用户使用的只有P1口,因为P0口和P2口通常需要用来传送外部存储器的地址和数据,P3口也需要使用它的第二功能。因此,单片机提供给用户的I/O接口线并不多,对于复杂的一些的应用系统都应该进行I/O口的扩展。8255具有24个可编程设置的I/O口,即使3组8位的I/O口为PA口,PB口和PC口.而8255又有多种运行模式,而这些操作模式完全由控制寄存器的控制字决定。利用8255的控制字模式来定义8255输出口的个数,驱动所需的LED灯的个数,实现课题目的。在仿真实验中,两个按键分别控制跑马灯的顺序显示、跳跃显示两种运行方式,顺序显示分别是一个、两个、四个、八个LED灯依次亮。跳跃显示分别是一个、两个、四个LED灯跳跃显示3三、电路设计及功能说明,硬件原理框图及电路图(包括接口芯片简介);本次设计采用AT89C52芯片驱动可编程接口芯片8255的扩展来实现LED灯的多种显示方式。让AT89C52芯片的P0口与8255芯片的三态双向数据总线D0~D7连接,实现数据传送。当CPU执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。8255的地址选择线A1、A0分别与AT89C52的P2.7和P2.6连接,通过定义不同的地址来定义8255芯片PA口和PB口的工作方式。读写命令线分别与单片机的读写命令线相连,片选线直接接地,复位线RESET接单片机的P2.5。同时PA口与8个LED灯顺序连接。PB口与8个LED灯逆序连接,通过按键控制可以选择不同的运行模式,实现多种跑马灯的运行模式。硬件原理框图P1口AT89C52P0口D0~D7PA口PB口“顺”“逆”模式选择开关…………82554电路图5接口芯片简介(1)AT89C52AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。主要功能特性:·兼容MCS51指令系统·8k可反复擦写(1000次)FlashROM·32个双向I/O口·256x8bit内部RAM·3个16位可编程定时/计数器中断·时钟频率0-24MHz·2个串行中断·可编程UART串行通道·2个外部中断源·共6个中断源·2个读写中断口线·3级加密位·低功耗空闲和掉电模式·软件设置睡眠和唤醒功能6(2)8255芯片8255特性(1)一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口.(2)具有24个可编程设置的I/O口,即使3组8位的I/O口为PA口,PB口和PC口.它们又可分为两组12位的I/O口,A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3).A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O3种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.8255引脚功能RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。CS:芯片选择信号线,当这个输入引脚为低电平时,即/CS=0时,表示芯片被选中,允许8255与CPU进行通讯;/CS=1时,8255无法与CPU做数据传输RD:读信号线,当这个输入引脚为低电平时,即/RD=0且/CS=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。WR:写入信号,当这个输入引脚为低电平时,即/WR=0且/CS=0时,允许CPU将数据或控制字写入8255。D0~D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。PA0~PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。PB0~PB7:端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。7PC0~PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。'A0,A1:地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器.当A0=0,A1=0时,PA口被选择;当A0=0,A1=1时,PB口被选择;当A0=1,A1=0时,PC口被选择;当A0=1.A1=1时,控制寄存器被选择.四、软件部分的程序流程图,算法和使用的编程技巧;1.程序流程图开始设置初值启动定时计数器开中断有键按下?根据键值运行不同模式跑马灯LED灯灭结束处理结束82.算法编译两个函数,分别是voiddisplay()函数和voiddelay()函数,前者是LED显示函数,后者是延时函数。程序的开始,先定义各个参数、各口的地址以及各个位。主函数中,定义y1、y2分别为PA口PB口的相应地址,控制各个LED灯的亮灭;m为显示函数voiddisplay()中for循环的个数,控制LED灯亮灭循环;k1、k2分别为PA口PB口地址转移的个数,控制PA口PB口地址转移的方式;t为延迟的参数,顺、跳两模式定义不同的k值和m值。然后定义CPU的各个状态,使其正常工作。在顺序显示中,先进入while(1)循环,循环中两判断条件if(P1==0xfd),令k1=1,实现顺显示,和if(P1==0xfb),令k2=2实现跳显示。根据条件进入相应模式,各有一个LED灯亮、两个LED灯亮、四个LED灯亮、八个LED灯亮,和一个LED灯、两个LED灯、四个LED灯间隔亮显示函数voiddisplay()中,两个for循环分别控制PA口PB口LED灯的循环模式,其中n为for循环的次数。先定义PA口PB口的首地址outdata1、outdata2进入循环,函数_cror_和_crol_控制他们地址不同的转移方式,k为其中的转移的个数。t为延迟函数的参数,控制亮灭延迟的时间。延迟函数voiddelay()中,t为延迟的参数,控制程序中所需的延迟时间。程序中各个参数之间都一一对应,根据要求相互呼应。通过控制这些参数的量值来实现硬件仿真中多种跑马灯的运行模式。3.编程技巧设计中,我将与PA相连的LED灯顺序排列,与PB相连的逆序排列,要注意两组初始值并不相同,明确参数间的关系,多个参数组合使用,实现跑马灯的多种运行方式。五、源程序清单,对关键的语句(段)要给出简洁的注释;#includereg52.h#includeintrins.h#includeabsacc.h9#defineucharunsignedchar#defineuintunsignedint#definePAXBYTE[0x3fff]#definePBXBYTE[0x7fff]#defineCTLXBYTE[0xffff]sbitreset=P2^5;voiddelay(uintt)//延时函数{for(;t0;t--){TH0=(65536-1000)/256;TL0=(65536-1000)%256;TR0=1;while(TF0==0);TF0=0;}TR0=0;}voiddisplay(uintk,uintn,uintt,uchary1,uchary2)//循环显示函数{uinti;for(i=0;in;i++){PA=y1;delay(t);y1=_crol_(y1,k);//左循环}PA=0xff;for(i=0;in;i++)10{PB=y2;delay(t);y2=_cror_(y2,k);//右循环}PB=0xff;}voidmain(){uchary1,y2;uintm,k1=1,k2=1,t;EA=1;ET0=1;TMOD=0x01;reset=1;_nop_();reset=0;CTL=0x80;//写8255控制字,设置PA,PB,为输出口PA=0xff;PB=0xff;while(1){if(P1!=0xfd)k1=1;if(P1==0xfd)//依次显示{t=300;switch(k1){case1:m=8;y1=0xfe;y2=0x7f;display(k1,m,t,y1,y2);break;//依次亮一11盏LEDcase2:m=4;y1=0xfc;y2=0x3f;display(k1,m,t,y1,y2);break;//依次亮两盏LEDcase4:m=2;y1=0xf0;y2=0x0f;display(k1,m,t,y1,y2);break;//依次亮四盏LEDcase8:m=1;y1=0x00;y2=0x00;display(k1,m,t,y1,y2);break;//依次亮八盏LEDdefault:break;}if(k1==8)k1=1;elsek1=k1*2;}if(P1!=0xfb)k2=2;if(P1==0xfb)//跳跃显示{t=500;switch(k2){case2:m=4;y1=0xfe;y2=0x7f;display(k2,m,t,y1,y2);break;//隔一盏,亮一盏case4:m=2;y1=0xfc;y2=0x3f;display(k2,m,t,y1,y2);break;//隔两盏,亮两盏case8:m=1;y1=0xf0;y2=0x0f;display(k2,m,t,y1,y2);break;//隔四盏,亮四盏default:break;}if(k2==8)k2=2;elsek2=k2*2;}12}}六、仿真过程综述;仿真开始。打开仿真开关,进入运行状态,闭合图中“顺”开关,16个LED灯就会遵循一个LED灯亮、两个LED灯亮、四个LE
本文标题:PROTEUS--跑马灯--单片机课程设计
链接地址:https://www.777doc.com/doc-1903446 .html