当前位置:文档之家› 可以调控的跑马灯

可以调控的跑马灯

专业:电子信息工程学号: 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所示。

图2-1系统结构框图 2.2电路原理图本系统由89S52芯片、LED 七段数码管、发光二极管、轻触开关等组成,电路原理图如图2-2所示;89S52按键模块发光二极管LED图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 intuchar 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软件硬件仿真软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。

相关主题