收藏 分销(赏)

可以调控的跑马灯.doc

上传人:天**** 文档编号:4310427 上传时间:2024-09-05 格式:DOC 页数:13 大小:411.01KB 下载积分:8 金币
下载 相关 举报
可以调控的跑马灯.doc_第1页
第1页 / 共13页
可以调控的跑马灯.doc_第2页
第2页 / 共13页


点击查看更多>>
资源描述
专业: 电子信息工程 学号: 0414110102 Hebei Normal University of Science & Technology 单片机原理及应用课程设计 ( 2013 年至2014学年度第 2 学期) 题 目: 可以调控的走马灯 学 生 姓 名: 院(系、部): 机电工程学院 指 导 教 师: 设 计 时 间: 2014.6.9—2014.6.13 可以调控的走马灯 摘 要:单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快,而51单片机是各单片机中最为典型和最有代表性的一种。本课程设计是基于MCS51系列单片机所设计的,用AT89S52芯片控制跑马灯(流水灯),整个系统有8种跑马灯模式可以选择,K1是选择模式键,并将相应的模式在LED七段数码管中显示出来,K2可以对跑马灯的速度进行加速,K3可以对跑马灯的速度进行减速。整个系统可以实现对跑马灯模式的多层控制,还可以进行加减速。 关键词:MCS51、跑马灯、加减速、七段数码管 一、概论 1.1 单片机基础知识 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲,一块芯片就成了一台计算机。 单片机具有体积小、功能强、应用面广等优点,目前正以前所未见的速度取代着传统电子线路构成的经典系统,蚕食着传统数字电路与模拟电路固有的领地。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机了解计算机原理与结构的最佳选择。 现在,这种单片机的使用领域已十分广泛。彩电、冰箱、空调、录像机、VCD、遥控器、游戏机、电饭煲等无处不见单片机的影子,单片机早已深深地融入我们每个人的生活之中。 单片机能大大地提高这些产品的智能性,易用性及节能性等主要性能指标,给我们的生活带来舒适和方便的同时,在工农业生产上也极大地提高了生产效率和产品质量。单片机按用途大体上可分为两类,一种是通用型单片机,另一种是专用型单片机。 MCS-51单片机是美国INTEL公司于1980年推出的产品,与MCS- 48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS-51系列或其兼容的单片机仍是应用的主流产品,各高校及专业学校的培训教材仍与MSC-51单片机作为代表进行理论基础学习。MCS-51系列单片机主要包括8031、8051和8751等通用产品。 1.2 单片机的发展趋势 单片机现在可以说是百花齐放,百家争鸣的时期,世界上各大芯片制造公司都推出了自己的单片机,从8位、16位到32位,数不胜数,应有尽有,有与主流C51系列兼容的,也有不兼容的,但它们各具特色,互成互补,为单片机的应用提供了广阔的天地。现在常规的单片机普遍都是将中央处理器(CPU)、随机存取数据存储(RAM)、只读程序存储器(ROM)、并行和串行通信接口,中断系统、定时电路、时钟电路集成在一块单一的芯片上,增强型的单片机集成了如A/D转换器、PMW(脉宽调制电路)、WDT(看门狗)、有些单片机将LCD(液晶)驱动电路都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。甚至单片机厂商还可以根据用户的要求量身定做,制造出具有自己特色的单片机芯片。 此外,现在的产品普遍要求体积小、重量轻,这就要求单片机除了功能强和功耗低外,还要求其体积要小。现在的许多单片机都具有多种封装形式,其中SMD(表面封装)越来越受欢迎,使得由单片机构成的系统正朝微型化方向发展。现在虽然单片机的品种繁多,各具特色,但仍以89C51为核心的单片机占主流。 1.3课程设计的目的 (1)训练学生正确地应用单片微机,培养解决工业控制、工业检测等领域具体问题的初步能力。 (2)让学生通过所做课题,熟悉单片微机应用系统开发、研制的过程,软硬件设计的工作方法、工作内容、工作步骤。 (3)对学生进行基本技能训练,例如组成系统、编程、调试、查阅资料、绘图、编写说明书等;使学生理论联系实际,提高动手能力和分析问题、解决问题的能力。 1.4仪器设备 PC机、万用表、电烙铁等。 1.5课程设计的内容 (1)设计并绘制硬件电路图; (2)购买电子元器件并按电路图焊接到电路板上; (3)编写程序并将调试好的程序固化到单片机中。 1.6本设计的题目与要求 (1)题目:可以调控的跑马灯 (2)要求:用AT89S52芯片控制跑马灯(流水灯),整个系统有8种跑马灯模式可以选择,K1是选择模式键,同时将相应的模式在LED七段数码管中显示出来,K2可以对跑马灯的速度进行加速,K3可以对跑马灯的速度进行减速。整个系统可以实现对跑马灯模式的多层控制,还有加减速。 二、总体设计 2.1 框图设计 框图设计是为了能够从整体上把握系统的各个大的模块以及各个模块之间的联系。同时罗列出需要主要使用到的各个器件,以方面系统开发中器件的选取。通过框图设计,让设计者从整体上把握系统的开发。本系统设计的框图如下图2-1所示。 89S52 按键模块 发光二极管 LED 图2-1系统结构框图 2.2电路原理图 本系统由89S52芯片、LED七段数码管、发光二极管、轻触开关等组成,电路原理图如图2-2所示; 图2-2系统电路原理图 2.3系统材料清单 2.3.1、AT89C51芯片 (1)89C51是一种带4K字节闪烁可编程可擦除只读存储器( FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器。89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 (2)主要特性:与MCS-51 兼容;4K字节可编程闪烁存储器;寿命:1000写/擦循环;数据保留时间:10年;全静态工作:0Hz-24MHz;三级程序存储器锁定;128×8位内部RAM;32可编程I/O线;两个16位定时器/计数器;5个中断源;可编程串行通道;低功耗的闲置和掉电模式;片内振荡器和时钟电路。 (3)结构特点:8位CPU;片内振荡器和时钟电路;32根I/O线;外部存贮器寻址范围ROM、RAM64K;2个16位的定时器/计数器;5个中断源,两个中断优先级;全双工串行口;布尔处理器; 2.3.2、共阳极数码显示管 发光二极管显示管简称LED,具有结构简单、价格低廉、使用方便、耗电少、与单片机接口容易等特点,在单片机应用系统使用非常普遍。 LED数码显示器由七段条形的发光二极管组成“ 8 ”字形显示字段,用一只圆形的发光二极管做小数点。LED数码显示器中,通常将各段发光二极管的阴极或阳极连在一起做公共端,这样可以使驱动电路简单。共阳极数码管是指发光二极管的阳极都与正极接在一起,引脚接输出端,故低电平有效。 要使LED数码管显示数字,只要点亮相应字段的发光二极管即可。如要显示“1”,点亮b、c段;要显示“0”,点亮a、b、c、d、e、f段。不难看出,对于共阳极数码管,点亮字段则用低电平“0”来表示,所以低电平有效。这样我们就可以把要显示的数字与一串二进制代码对应起来,即对LED数码显示器实现编码。由于这种编码是与显示器结构相对应的,因此分为共阴显示码和共阳显示码两种。不考虑小数点的编码只有七位,常称为七段显示码;如果对小数点也进行编码,则称为八段显示码。如表2-3所示: 表2-3常用字符的八段显示码 2.3.3、发光二极管 它是半导体二极管的一种,可以把电能转化成光能;常简写为LED。发光二极管与普通二极管一样是由一个PN结组成,所以具有单向导电性。常用的发光二极管是发红光、绿光或黄光的二极管。它广泛应用于各种电子电路、家电、仪表等设备中、作电源指示或电平指示。 2.4 主流程图 初始化 模式按键是否按下 第一种模式显示 当前模式显示 下一种模式显示 图 2-4 主流程图 2.5软件设计 本课程设计是采用80C51单片机设计的可以调控的跑马灯,通过keil进行c语言编程,通过proteus进行软件硬件仿真。本设计成果,主要通过按键开关对跑马灯进行控制,包括跑马灯模式的选择、跑马灯模式的显示、跑马灯速度变化控制。 2.5.1、C语言编程 #include <reg51.h> #define uchar unsigned char #define uint unsigned int uchar ModeNo;//模式编号 uint Speed; uchar tCout=0; uchar Idx; //速度取值索引 uchar mb_Count=0;//移动位数 bit Direct =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;i<120; i++) ; } //检测按键 uchar GetKey() { uchar k; if(P2==0xFF) return 0; Delay(10); switch (P2) { case 0xFE: k=1;break; case 0xFD: k=2;break; case 0xFB: k=3;break; default: k=0; } while (P2 != 0xFF);//等待释放按键 return k; } //----------------------------------------------------------------------- // 16只LED显示 //----------------------------------------------------------------------- void Led_Demo(uint Led16) { P1=(uchar)(Led16&0x00FF);//显示低8位 P0=(uchar)(Led16>>8); //显示高8位 } //----------------------------------------------------------------------- //定时器2 //----------------------------------------------------------------------- void T0_INT() interrupt 1 { if (++tCout<Speed) return; tCout=0; switch (ModeNo) { case 0:Led_Demo(0x0001<<mb_Count);break; case 1: Led_Demo(0x8000>>mb_Count);break; case 2: if (Direct) Led_Demo(0x000F<<mb_Count); else Led_Demo(0xF000>>mb_Count); if(mb_Count==15) Direct=!Direct;break; case 3:if (Direct) Led_Demo(~0x000F<<mb_Count); else Led_Demo(~(0xF000>>mb_Count)); if(mb_Count==15) Direct=!Direct;break; case 4:if (Direct) Led_Demo(0x003F<<mb_Count); else Led_Demo(0xFC00>>mb_Count); if(mb_Count==15) Direct=!Direct;break; case 5:if (Direct) Led_Demo(0x0001<<mb_Count); else Led_Demo(0x8000>>mb_Count); if(mb_Count==15) Direct=!Direct;break; case 6:if (Direct) Led_Demo(~(0x0001<<mb_Count)); else Led_Demo(~(0x8000>>mb_Count)); if(mb_Count==15) Direct=!Direct;break; case 7:if (Direct) Led_Demo(0xFFFF<<mb_Count); else Led_Demo(0x7FFF>>mb_Count); if(mb_Count==15) Direct=!Direct;break } mb_Count=(mb_Count + 1) % 16; } //--------------------------------------------------------------------- //键盘按键处理 //--------------------------------------------------------------------- void KeyProcess(uchar Key) { switch (Key) { case 1://重设模式 Direct=1;mb_Count=0; ModeNo=(ModeNo+1)%8; P3=DSY_CODE[ModeNo]; break; case 2://加速 if(Idx>1) Speed=sTable[--Idx];break; case 3: //减速 if(Idx<15) Speed=sTable[++Idx]; } } //-------------------------------------------------------------------- //主程序 //-------------------------------------------------------------------- void main() { uchar Key; P0=P1=P2=P3=0xFF; ModeNo=0; Idx=4; Speed=sTable[Idx]; P3=DSY_CODE[ModeNo]; IE=0x82; TMOD=0x00; TR0=1; while(1) { Key=GetKey(); if(Key!=0) KeyProcess(Key); } } 2.5.2软件硬件仿真 软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。 软硬件联调是指把调试无误的软件程序烧制进单片机芯片内部,通上电源后,检查硬件工作是否有预期的效果,如果没有则需要检测软件是否在实现功能上有欠缺。若有错误,通过改写软件来调试,直至达到预期效果,则设计圆满成功。本设计通过protues进行软件硬件仿真,设计的原理图如图2-5所示; 图2-5设计的原理图 系统运行后的示意图如图2-6所示 图2-6系统运行示意图 三、 结束语 (1)体会:为期一个星期的课程设计终于落下了帷幕。万事开头难。在刚开始课程设计的时候,大家都有点茫然而且无从下手的感觉。首先是题目的选择,在没有决定题目之前,查找资料毫无目的,基本是查查这个资料,待会又搜索另一个。这大大的浪费来我我的时间。最后,但经过老师的指导及自己查阅相关的资料,逐渐有了自己的设计想法,制定出了系统的结构框图。终于定下了题目。定下了题目之后,做起来就比较有目的。在指导老师的提示下,我们在网上查到了一些相关的资料,再综合书本上学到的一些知识,参考网上的程序,经过调试修改后,最终实现了题目设计的要求。调试成功后,就可以进行实物的焊接,看开始时,对焊锡的融化比较难以把握,不过熟练后,就比较简单了。 通过学习单片机这门课程设计,不仅了解了AT89c51的功能、还加强了单片机的理论知识得了解,而且进一步接触并了解到了软硬件的结合这个实践问题。不仅如此,此次设计也加强了我们动手培养了我的动手能力及分析思考和解决问题的能力,更令我的创造性思维得到拓展。 (2)遇到的问题 1、刚着手此设计时,不知道如何下手,但经过老师的指导及自己查阅相关的资料,逐渐有了自己的设计想法,定下了题目,制定出了系统的结构框图。 2、软件设计是耗时最长的一项,涉及到整个系统工作的稳定性。我们首先编写总体框架,然后做简单的测试,保证能正常运行,接下来编写单个的子状态程序,写完一个测试一个,这样保证了最后调试的成功率。在编写程序过程中需要很好的编写习惯,结构要明显,标明注释,随时存档,程序尽量简约。另外要兼顾到硬件结构,尽量使得硬件结构简单,所用资源更少。 参考文献 [1]《单片机原理与接口技术》 李朝青,北京航空航天大学出版社 [2]《单片机课程设计指导》 楼然苗 李光飞,北京航空航天大学出版社 [3]《单片机控制实习与专题制作》 蔡朝洋 北京航空航天大学出版社 [4]《单片机原理与应用及C51程序设计》 谢维等,清华大学出版社,2007.2 [5]《51系列单片机设计实例》(第2版) 楼然苗 李光飞 ,北京航空航天大学出版社 2006.2 [6]《单片微型计算机原理及接口技术实验指导与实训》 林军 中国水利水电出版社 2004.10 [7]网上资料 12
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服