版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
黄河科技学院1基本内容和技术方案采用AT89C52单片机作为主控制器,彩灯控制器包括缺省模式和用户模式,通过键盘可以切换模式,用户模式下可以随意设定亮灯时间和闪烁频率参数,要求每种模式下都能实时的在数码管显示出模式号,时间和频率,合理选择系统方案,简述其工作原理;完成系统硬件设计,画出电路原理图;完成系统软件设计,可采用C语言和汇编语言混合编程;完成LED彩灯控制器的设计与制作,要求初始化后运行在缺省模式下,需要此模式下循环运行四种以上预设的彩灯闪烁方案;技术方案:本方案以AT89C52单片机作为主控核心,与键盘、显示等模块组成核心主控制模块。在主控模块上设有3个按键和1位七段码LED显示器,根据用户需要可以编写若干种亮灯模式,利用其内部定时器T0实现一个基本单位时间为1ms的定时中断,根据各种亮灯时间的不同需要,在不同时刻输出灯亮或灯灭的控制信号,然后驱动各种颜色的灯亮或灭。该方案的优点是系统体积小、功耗小、可靠性高、调节灵活、多功能、多花案、使用灵活方便。用户模式下可以随意设定亮灯的闪烁频率参数,并且每种模式下都能实现在数码管上显示出模式号。初始化后运行在缺省模式下,在此模式下可以循环运行9种预设的彩灯闪烁方案。主程序中默认执行左右来回闪烁,在中断服务程序中,首先读取按键状态,然后延时10ms,再次读取按键状态。把两次获得的按键状态比较,如果不同,就表示是抖动,退出中断;否则,就去判断是哪个按键按下。如果是K1,就执行下一个闪烁方案;如果是K2,就执行加速;如果是K3,就执行减速。采用置标志位的方法,即在主程序中设定两个标志位,一个闪烁模式标志位,一个闪烁速度标志位。不断的对这两个标志进行查询:如果模式标志为状态0,就执行方案0,Mode_0;如果是状态1,就执行方案1,Mode_1,依次类推。闪烁速度标志默认值为500,对应延时值为500ms。而在中断服务程序中,只需要进行如下工作:去抖动,键盘识别,改变标志位。2系统硬件设计整个系统包括AT89C51主控模块和受控模块,即发光二极管LED。以下就分别介绍一下这两个模块的主要功能。2.1主控模块电路设计主控模块电路见【图1】。主控模块主要设计器件有AT89C51,1个数码管显示器,3个按钮。通过软件设计,使单片机P0和P1作为LED驱动信号输出口,P2口与三位按钮相接作为按钮输入口,P3口与二极管LED相接作为显示器的输出口。图1主控模块硬件图2.2受控模块电路设计LED板模块设计主要器件有LED彩灯(红,绿,蓝,黄)、限流电阻。根据实际应用彩灯长度需要,可将不同数量的LED模块实现级连,组成一个完整的LED彩灯。考虑到视觉效果,可以将不同颜色的LED混合搭配,即将LED发光管按顺序L0(红)、L1(绿)、L2(蓝)、L3(黄)、L4(红)、L5(绿)、L6(蓝)……依次均匀摆放在一条直线上。通过软件设计的各种方案,运行起来就会具有很好的动感视觉效果。2.3主要元器件介绍2.3.1单片机AT89C51AT89C51是主控模块的核心控制器,其芯片内含4KBROM和128ByteRAM;系统的振荡周期为12MHz。AT89C51具有如下特征(Features):=1\*GB3①与IntelMCS-51产品兼容;=2\*GB3②内部含有4KBEEPROM,可重复擦写1000次;=3\*GB3③支持晶振频率从0Hz到24MHz;=4\*GB3④内部含有128*8bit的RAM;=5\*GB3⑤32位可编程的I/O线;=6\*GB3⑥2个16位的定时/计数器,=7\*GB3⑦6个中断源;=8\*GB3⑧可编程的串行口;AT89C51有40个引脚,是双列直插式芯片(DIP)[8],引脚定义及功能见【图3】。图3AT89C51引脚图=1\*GB2⑴振荡电路单片机是一种时序电路,必须提供脉冲信号才能正常工作,在单片机内部已集成了振荡器,接18、19号引脚(XTAL1和XTAL2)[9]。AT89C51使用12MHz晶振,两电容的电容大小均为22pF。引脚XTAL1和XTAL2见【图4】。图4晶振电路图5复位电路=2\*GB2⑵控制信号引脚RST、/VPPRST(9号引脚):单片机上电时,其内部各寄存器处于随机状态,在该引脚输入24个时钟周期宽度以上的高电平将使单片机复位(RESET)[10],见【图4】。EA=0,单片机只访问外部程序存储器。对8031此引脚必须接地。EA=1,单片机访问内部程序存储器。对内部有程序存储器的8XX51单片机,此引脚应接高电平,但若地址值超过4KB(0FFFH),单片机将自动访问外部程序存储器。在8751单片机片内EPROM编程期间,此引脚引入21V编程电源VPP。=3\*GB2⑶输入输出引脚(P0、P1、P2和P3端口引脚)P0~P3是89C51与外界联系的4个8位双向并行I/O口。本设计中P0和P1口作为LED驱动信号输出口,P2口与三位按钮连接作为按钮输入口,P3口与七段码LED相接作为显示器的输出口。=4\*GB2⑷AT89C51单片机的基本结构见【图5】图5AT89C51基本结构=5\*GB2⑸单片机89C51的定时器/计数器:在彩灯控制系统中需要有某种方式来控制彩灯的亮灯时间、频率等,那就必须使用到定时器。在AT89C51单片机内部设有两个16位可编程定时器/计数器,简称定时器T0和定时器T1。提供给定时器的是计数源(见【图6】)即是单片机的晶振经过12分频后获得的一个脉冲源。晶振的频率相当准,所以这个计数脉冲的时间间隔也很准。一个12M的晶振,它提供给计数器的脉冲时间间隔就是12M/12等于1M,也就是1个微秒。结论:计数脉冲的间隔与晶振有关,12M的晶振,计数脉冲的间隔是1微秒[11]。 图6计数器工作方式定时器有四种工作方式,方式0至方式3,本设计中使用方式1。方式1是16位的定时/计数方式,定时器以全16位二进制数参与操作,且定时时间为:t=(216-T0初值)×时钟周期×12[12](1)在AT89C51中还有两个特殊功能寄存器与定时/计数有关,那就是TMOD和TCON。TMOD格式如下表所示:表1TMOD格式用于T1用于T0GATEC/M1M2GATEC/M1M0可以看出,TMOD被分成两部份,每部份4位。分别用于控制T1和T0。其中:C/为功能选择位,C/=0为定时器,C/=1为计数器。GATE为门控位,GATE=1硬件启动;GATE=0软件启动。M1M0工作方式选择位如下表所示:表2M1MM0M1功能说明M0M1功能说明00方式010方式201方式111方式3TCON格式如下表所示:表3M用于定时器/计数器用于中断TF1TR1TF0TR0IE1IT1IE0IT0可以看出,TCON也被分成两部份,高4位用于定时/计数器,低4位则用于中断。而TF1(0),当计数溢出后TF1(0)就由0变为1。同时计数脉冲要进入计数器有层层关要通过,最起码,就是TR0(1)要为1,开关才能合上,脉冲才能过来。因此,TR0(1)称之为运行控制位,可用指令SETB来置位以启动计数器/定时器运行,用指令CLR来清0[13]。2.3.2LED彩灯限流电阻的确定设计管内LED板模块时还需注意彩灯限流电阻的确定。限流电阻过小会导致彩灯烧坏。红绿蓝三色灯,它们的额定电流相同,都为20mA,而额定电压有差异,红灯与黄灯为2V,绿灯与蓝灯为2.2V。所有彩灯的正极都与+5V工作电源相连接,于是它们的限流电阻可根据如下计算得到:红灯与黄灯:R=5V-2V20mA=150蓝灯与绿灯:R=5V-2.2V20mA=2.3.3数码管结构及工作原理数码管由七个发光二极管组成,此外,还有一个圆点型发光二极管(在图中以dp表示),用于显示小数点。通过七段发光二极管亮暗的不同组合,可以显示多种数字、字母以及其它符号。数码管中的发光二极管共有两种连接方法:图7数码管模型及实物图=1\*GB3①共阴极接法:把发光二极管的阴极连在一起构成公共阴极。使用时公共阴极接地,这样阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的则不点亮。=2\*GB3②共阳极接法:把发光二极管的阳极连在一起构成公共阳极。使用时公共阳极接+5V。这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不点亮。本次设计显示器采用共阳极接法[14]。为了显示数字或符号,要为显示器提供代码,因为这些代码是为显示字形的,因此称之为字形代码。七段发光二极管,再加上一个小数点位,共计八段。因此提供给显示器的字形代码正好一个字节。若a、b、c、d、e、f、g、dp8个显示段依次对应一个字节的低位到高位,即D0、D1、D2、D3、D4、D5、D6、D7,则用共阳极数码管显示十六进制数时所需的字形代码如【表4】所示[15]。表4共阳极数码管字形代码字形共阳极代码字形共阳极代码字形共阳极代码00xC060x82C0xC610xF970xF8D0xA120xA480x80E0x8630xB090x90F0x8E40x99A0x88灭0xFF50x92B0x833系统软件设计3.1综述本次的任务是设计一个基于单片机的LED彩灯控制器,需要循环运行四种以上预设的彩灯闪烁方案,这里的各种的方案还有显示方式都是由单片机内部的程序控制。在这里我将16个发光二极管分别接在P0和P1口,通过程序控制这两个端口的电平高低,将16个发光二极管的正极接P0和P1口,负极接地,即P0和P1口的相应端口为高电平时LED就能被点亮。再通过程序循环的让各个端口以不同的方式点亮来达到各种花样的效果,并且当中要有一定的延时,延时时间小于人眼视觉暂留时间,否则人眼看上去每个灯都是亮的也就没有实际效果。设计的LED彩灯系统分为两部分,即AT89C51主控模块和发光二极管LED受控模块。整个系统工作由软件程序控制运行,同时根据不同的需要,用户可以在LED彩灯工作时通过主控模块上的按钮来设定亮灯模式和灯光闪动频率。模块功能:该部分主要涉及功能的实现方式,即程序编写。程序要实现的功能包括读按键,通过对读入按键的值控制LED点亮方式和数码管显示。键盘有三个按键K1、K2、K3,K1控制LED点亮模式,K2、K3键控制彩灯闪烁速度,K2加速,K3减速。不论K1被按下多少次,LED九种点亮模式是循环的,K2、K3键控制速度分别有上限和下限,多按无效。程序设计思路:主程序中默认执行左右来回闪烁,在中断服务程序中,首先读取按键状态,然后延时10ms,再次读取按键状态。把两次获得的按键状态比较,如果不同,就表示是抖动,退出中断;否则,就去判断是哪个按键按下。如果是K1,就执行下一个闪烁方案;如果是K2,就执行加速;如果是K3,就执行减速。采用置标志位的方法,即在主程序中设定两个标志位,一个闪烁模式标志位,一个闪烁速度标志位。不断的对这两个标志进行查询:如果模式标志为状态0,就执行方案0,Mode_0;如果是状态1,就执行方案1,Mode_1,依次类推。闪烁速度标志默认值为500,对应延时值为500ms。而在中断服务程序中,只需要进行如下工作:去抖动,键盘识别,改变标志位。本次设计的LED彩灯控制器另一特点是所有亮灯模式均由软件控制完成。系统中软件分为主程序和中断服务程序。这里以顺序调用Mode_i花样亮灯模式流程为主程序,以一个单位时间1ms的T0定时为中断服务程序。在这个1ms的T0定时基础上,我们可以根据需要来确定各亮灯模式Mode_i内点亮和熄灭各种颜色LED灯的时刻。整个系统软件由主程序(Main)、各模式子程序(Mode_i)、1ms中断服务子程序(T0Interrupt)、按键扫描处理子程序、显示子程序等程序组成。利用T0定时器作为定时基本单位,根据模式需要计算好各控制信号的发生时刻,根据不同的模式Mode_i可以设定不同的脉冲翻转频率Fi通过P0和P1口输出,使各色LED灯的驱动时刻与移位触发的翻转时刻步调一致,使LED彩灯按照设计的模式工作。因此在LED彩灯上电工作后,用户可以很方便地通过主控模块上的显示器随时知道LED彩灯当前工作模式Mode_i。若实际应用需要根据不同场合和时间来改变彩灯闪亮效果,用户可以通过主控模块上的按钮来设定LED不同的闪烁频率Fi,以便符合实际需要。此外如果用户对某一种模式感兴趣需要仔细观看该亮灯花样,也可以通过键盘选定任意第Mode_i模式使系统循环重复工作在该花样模式下。3.2主程序与中断程序3.2.1主程序及流程图AT89C51通过编写程序应完成以下功能:通过P0口和P1口控制发光二极管LED的亮与灭,从而实现多种闪烁方案;通过P2口查询三个按钮的情况以作出相应的操作;P3口的P3.0~P3.7为七段码显示器的位控,显示当前亮灯的模式。主程序需完成的任务主要是三个:切换彩灯亮灯模式,以及实现频率加速和频率减速的功能。按照上述绘制出主程序流程图。主程序主程序初始化初始化 开中断开中断初始化 读按键保存 读按键保存 Y 延时10ms去抖动调按键扫描子程序 延时10ms去抖动调按键扫描子程序再读按键K1按下?再读按键K1按下? 两次按键相同?置模式标志 Y两次按键相同?置模式标志NK2按下? K2按下? N Y速度加1 N速度加1K3按下? K3按下? Y速度减1 N 速度减1调数码管显示子程序 调数码管显示子程序 结束结束图8主程序流程图3.2.2中断程序及流程图所谓中断就是指当中央处理器CPU正在处理某件事情的时候,外部发成了一件事(如这里是定时器计数溢出),请求CPU迅速去处理,CPU暂时中断当前的工作,转入处理所发生的事件,处理完以后,再回到原来的地方,继续原来的工作,这个过程就称为中断[16]。关闭中断 N关闭中断重装初值重装初值保护现场保护现场恢复现场中断次数恢复现场中断次数≥systemSpeed? 开中断开中断模式0? Y模式0?返回主函数数 N返回主函数数模式1?模式1? … N 模式8? Y 模式8? Y N Y调Mode_8子函数调Mode_1子函数调Mode_0子函数 调Mode_8子函数调Mode_1子函数调Mode_0子函数 … 置模式标识号置模式标识号调数码管显示子程序调数码管显示子程序图9中断程序流程图3.3子程序的编程思路虽然大致的流程图已经绘制完毕,但编程过程中会遇到更加具体的问题,需要编制一些子程序来解决,以下是一些主要子程序的流程图绘制思路。3.3.1频率增减按钮查询子程序频率增减功能:所谓频率增减功能就是加快或者减慢彩灯的闪动频率。本设计中每按一次频率增按钮,每种亮灯模式就按预先设置好的频率加1;相反每按一次频率减按钮,频率减1,可以一键按多次。实现方法是通过设置一个计数单元CLOCK,其初值设定为10,然后另设计器单元计时,该计时单元每进入一次中断服务程序就加1,然后把其计时结果不断与CLOCK比较从而确定什么时候要翻转。如果查询到频率减按钮按下CLOCK加1,相反查询到频率增按钮按下CLOCK减1。3.3.2延迟子程序数码管的显示必须有足够长的时间长到肉眼能够察觉到,因此在点亮数码管时要给予其一个适当的延迟。一个机器周期包括12个时钟周期。单片机AT89C51工作于12M晶振,它的时钟周期是1/12(微秒)。它的一个机器周期是12*(1/12)也就是1微秒。一共执行1000次,正好1000微秒,也就是1毫秒。3.3.4数码管显示子程序数码管完成的主要功能是:显示当前工作模式的序号Mode_i,它其实是对系统工作状态起到了一个很好的实时监控作用。本设计采用静态显示,位选线同时选通,每位的段选线分别与一个8位锁存器输出相连(设计中接P3口,并外接一个8×1KΩ排阻限流),各位相互独立,各位显示一经输出,则相应显示将维持不变,直至显示下一字符为止。静态显示方式有较高的亮度和简单的软件编程,缺点是占用口线资源太多。3.3.3计数初值的设定本设计采用定时中断的方式,因此必须首先确定TMOD与计数初值,然后设置TCON来启动T0。计数初值可按照以下公式计算,假定计数初值为a,晶振频率为fOSC赫兹,希望得到一个时间为T秒的中断则:a=-(4)本设计中fOSC=12MHz,T=1ms,于是a=-=-=64536即FC18(转换为十六进制),因此TH2(置高八位)初值为0xFC,TL2(置低八位)初值为0x18。4系统调试与仿真分析4.1硬件选材及电路制作首先要对整个任务进行分析,基本确定该彩灯控制系统可分为两大模块:主控模块以及管内LED板模块。然后进一步确定应该采用哪些元器件。比如:主控模块首选就是由单片机作为主控核心,其成本很低,且功能很完善。除此以外当然还需要一些按钮、七段码显示器等辅助器件。在确定完所需何种功能的元器件后,就可以进行实物确定,主要通过上网搜索(比如21中国电子网),以及一些元器件手册。其要求是元器件报价较低,且能够实际购买的到。确定完这些元器件后通过Protel99绘制原理图及印刷板电路图。其绘制印刷板电路的过程中必须注意元器件的尺寸及布线的合理性,尽可能减小板的体积。随后就是通过自己动手将这些元器件焊接到印刷板上。4.2硬件调试硬件的调试主要是吧电路各种参数调整到符合设计要求。先排除硬件电路故障,包括设计性错误和工艺性故障。一般原则是先静态后动态。硬件静态调试主要是检测电路是否有短路、断路、虚焊等,检测芯片引脚焊接是否有错误,数码管段位是否焊接正确单片机的硬件调试和软件调试是分不开的。调试方法:在上电前,首先用万能表、示波器根据硬件图和印刷板电路图仔细检查其连线是否正确。核对各元器件的型号、规格以及安装的方向是否正确。其中重点检查电源走线,以避免电源之间短路。单片机AT89C51是系统的核心,利用万用表检测单片机电源VCC(40脚)是否为+5V、晶振是否正常工作(可用示波器测试,也可以用万用表检测,两引脚电压一般为1.8V~2.3V之间)、复位引脚RST(复位时为高电平,工作时为低电平)。尤其要注意单片机插座上的电位,由于单片机电源仅5V,因此如果有高电压,联机时会损坏模拟器。4.3软件调试本次所有软体程序均采用C51语言编写,程序写完后要对其编译,在Proteus软件里实现硬件电路仿真。下面分别简单介绍单片机C语言和这两款软件。4.3.1单片机C语言单片机C语言程序设计不同于通用计算机应用程序设计,它必须针对具体的微控制器及外围电路来完成,为了便于学习单片机应用程序设计和系统开发,很多公司退出了单片机实验箱、仿真器和开发板等,这些硬件设备可用于验证单片机程序,开发和调试单片机应用系统。开发8051单片机系统时,使用C语言会使开发周期大为缩短,开发效率大幅提高,程序可读性好且易于移植,所以使用C语言开发单片机系统已经成为必然趋势。C语言在单片机系统开发中的优势:=1\*GB2⑴用C语言编写的程序可读性强;=2\*GB2⑵在不了解单片机指令系统而仅熟悉8051单片机存储结构时就可以开发单片机程序;=3\*GB2⑶寄存器分配和不同存储器寻址及数据类型等细节可由编译器管理;=4\*GB2⑷程序可分为多个不同的函数,这使程序设计结构化;=5\*GB2⑸函数库丰富,数据处理能力强;=6\*GB2⑹程序编写及调试时间大大缩短,开发效率远高于汇编语言;=7\*GB2⑺C语言具有模块化编程技术,已编写好的通用程序模块很容易植入新程序,这进一步提高了程序开发效率。4.3.2KeiluVision2C51单片机支持HEX文件,我采用的编译器是KeiluVision2软件,该软件是美国KeilSoftware公司开发的,关于8051系列MCU的开发工具,是目前世界上最好的51单片机开发工具之一。软件本身支持数百种51系列单片机芯片,可以用来编译C源码,汇编源程序以及两者的混合编程代码,连接重定位目标文件和库文件,创建HEX文件,调试目标程序等,是一种集成化的文件管理编译环境。使用步骤如下:=1\*GB2⑴建立一个项目,启动Keil,单击“Project菜单/New”选项,从弹出的窗口中选择要保存的路径,并输入项目文件名“彩灯.uv2”,然后保存。这时会弹出一个选择CPU型号的对话框,根据所使用的单片机来选择,我用的单片机是AT89C51。=2\*GB2⑵创建程序文件,单击“File菜单/New”选项,输入C51语言源程序,单击“File菜单/Save”并输入程序文件名“彩灯.C”,保存。=3\*GB2⑶程序文件添加到项目中,右键点击“Target1”前面的“+”,展开里面的内容“SourceGroup1”,右键单击“SourceGroup1”弹出一个右键菜单,单击“AddFiletoGroup’sSourceGroup1”,从弹出的窗口中选择之前保存的文件“彩灯.C”=4\*GB2⑷设置当前项目的目标选项,右键单击“Target1”,从弹出的右键菜单中单击“OptionforTarget”选项,从弹出的“Options”窗口中选择“Target”标签栏,在“CreateHEXFile”前面打钩。=5\*GB2⑸运行编译,右键单击“Target1”,从弹出的右键菜单中单击“Buildtarget”选项,此时若源程序没有语法错误,Keil就会生成HEX文件,并自动保存在之前设置的路径里。4.4.3ProteusProteus是英国Labenterelectronics公司开发的电路分析与实物仿真软件,是目前最好的模拟单片机外围器件的工具,它可以仿真、分析各种模拟电路与集成电路,软件提供了大量模拟与数字元器件及外部设备,各种虚拟仪表(如电压表、电流表、示波器、逻辑分析仪、信号发生器等),特别是它具有对单片机及其外围电路组成的综合系统的交互仿真功能。Proteus操作非常简单,启动“ISIS.exe”。在设计原理图时,根据当前电路复杂程度和特定要求,选择恰当的模块进行设计,打开模块式需要单击“文件/新建设计”(File/NewDesign)菜单,打开“创建新设计”(CreateNewDesign)对话框,然后选择相应模块。创建空白文件后,先将DSN文件保存到指定位置,接下来就可以开始在图纸中添加元件了,单击模式工具上的元件模式(ComponentMode)图标,对象选择窗口上会出设备(Device),这时单击“P”按钮,打开元件选择窗口,在元件库选择硬件电路所需要的元器,合理摆放位置,然后按要求连接好电路图。4.4软件仿真结果及分析完成单片机系统仿真电路图设计后,即可开始仿真运行单片机绑定的程序文件,双击单片机,打开单片机属性窗口(也可以先在单片机上单击右键,再单击左键,或者选中单片机后按下(Ctrl+E组合键),在“ProgramFiles”项中选择对应的HEX文件。在仿真电路和程序都没有问题时,直接单击Proteus主窗口下的“运行”(Play)按钮,即可仿真运行单片机系统,在运行过程中如果希望观察内存、24C0X、温度寄存器、时钟芯片等内部数据可在运行时单击“单步”(Step)或“暂停”(Pause)按钮,然后再“调试”(Debug)菜单中打开相应设备。如果要观察仿真电路中某些位置的电压或波形等,可向电路中添加相应的虚拟仪器,例如,电压表、示波器等。Mode_0模式0(一个灯亮从左到右跑)程序及仿真结果:图10模式0仿真图Mode_3模式3(一个灯灭先从左到右再从右到左跑)程序及仿真结果:图11模式3仿真图Mode_5模式5(四个亮左右来回跑)程序及仿真结果:图12模式5仿真图5结束语个管脚功能的理解和掌握。实现了软件和硬件的有效结合,缺一不可。设计让我把单片机的理论知识用在实践中,实现了理论和实践相结合,从中更懂得理论的是实践的基础,实践有能检验理论的正确性,更激发了我对专业知识的渴求,这些对我以后参加工作或者继续学习都会有很大的帮助和影响。通过本文的论述从而为实际中生产各种亮灯模式的彩灯打下理论基础,与市面上大多数的LED彩灯相比,我设计的彩灯具有更好的灯光装饰经过一学期的课程设计,我对单片机的使用有了不同于以往的认识。从书本上的理论到现实中的硬件电路制作、软件编制以及软硬件调试,难度大大地增加。但是通过这一过程我对单片机的认识更加深刻。这对我今后从事该方面的学习工作是一个很好的基础。通过这次的毕业设计,让我受益匪浅,让我了解和掌握了一些编程思想和对I/O口的使用和应用的条件的思考,对单片机的各效果,性价比更高,与普通的全硬件LED彩灯相比具有较好的经济效益。应用主控模块输出的控制信号去控制灯管内的LED板模块工作,使的产品性能稳定,便以安装容易操作。由于控制程序存储在89C51单片机的电可擦除Flash闪存EPROM中,如果用户需要更改系统的亮灯模式Mode_i,无须改变系统硬件电路,只需修改其中程序即可,是一种很有发展前途的彩灯控制器。.参考文献单片机课程设计指导书 皮大能 北京理工大学出版社 2012.78051单片机实践与应用 吴金戎 清华大学出版社 2003.8单片机技术基础教程与实践夏路易 电子工业出版社 2008.1单片机原理及应用 张毅刚高等教育出版社2012.11基于Proteus的单片机系统设计与仿真实例蒋辉平机械工业出版社2007.7
附录附录1元器件清单表5元器件清单所用器材型号数量/只51单片机AT89C511发光二极管普通16电阻1/8W1KΩ1排阻3KΩ×81电容25V22uF电解电容1电容瓷片30pF2晶振12MHz1按键普通3七段数码管共阳极1附录2总电路图图13总电路图附录3程序#include<REG52.H>unsignedcharRunMode;voidDelay1ms(unsignedintcount)//延时子程序{unsignedinti,j;for(i=0;i<count;i++)for(j=0;j<125;j++);}unsignedcharcodeLEDDisplayCode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80};//七段共阳极数码管0到8字形码voidDisplay(unsignedcharValue)//七段数码管显示子程序{P3=LEDDisplayCode[Value];}voidLEDFlash(unsignedcharCount){unsignedchari;bitFlag;for(i=0;i<Count;i++){Flag=!Flag;if(Flag)Display(RunMode);elseDisplay(0x10);Delay1ms(100);}Display(RunMode);}unsignedcharGetKey(void)//按键读入函数{unsignedcharKeyTemp,CheckValue,Key=0x00;CheckValue=P2&0x32;if(CheckValue==0x32)//第一次读按键值return0x00;Delay1ms(10);KeyTemp=P2&0x32;//第二次读按键值if(KeyTemp==CheckValue)//若两次值相同,无键按下,返回0值return0x00;if(!(CheckValue&0x02))//K1键被按下Key|=0x01;if(!(CheckValue&0x10))//K2键被按下Key|=0x02;if(!(CheckValue&0x20))//K3键被按下Key|=0x04;returnKey;//返回键值}unsignedintTimerCount,SystemSpeed,SystemSpeedIndex;voidInitialTimer2(void){TMOD=0x01;//定时器1TH2=RCAP2H=0xFC;//重装值,初始值TL2=RCAP2L=0x18;ET2=1; //定时器2中断允许TR2=1; //定时器2启动EA=1;}unsignedintcodeSpeedCode[]={1,2,3,5,8,10,12,14,17,20,25,30,40,50,60};//15个预设置频率速度voidSetSpeed(unsignedcharSpeed){SystemSpeed=SpeedCode[Speed];}voidLEDShow(unsignedintLEDStatus){P1=~(LEDStatus&0x00FF);P0=~((LEDStatus>>8)&0x00FF);}voidInitialCPU(void){RunMode=0x00;TimerCount=0;SystemSpeedIndex=8;//初始速度取值P1=0x00;P0=0x00;P2=0xFF;P3=0x00;Delay1ms(1000);//延时1000msP1=0xFF;P0=0xFF;P2=0xFF;P3=0xFF;SetSpeed(SystemSpeedIndex);Display(RunMode);}//Mode0模式0:一个灯亮从左到右跑unsignedintLEDIndex=0;bitLEDDirection=1,LEDFlag=1;voidMode_0(void){LEDShow(0x0001<<LEDIndex);LEDIndex=(LEDIndex+1)%16;}//Mode1模式1:一个灯亮从右到左跑voidMode_1(void){LEDShow(0x8000>>LEDIndex);LEDIndex=(LEDIndex+1)%16;}//Mode2模式2:一个灯亮先从左到右再从右到左跑voidMode_2(void){if(LEDDirection)LEDShow(0x0001<<LEDIndex);elseLEDShow(0x8000>>LEDIndex);if(LEDIndex==15)LEDDirection=!LEDDirection;LEDIndex=(LEDIndex+1)%16;}//Mode3模式3:一个灯灭先从左到右再从右到左跑voidMode_3(void){if(LEDDirection)LEDShow(~(0x0001<<LEDIndex));elseLEDShow(~(0x8000>>LEDIndex));if(LEDIndex==15)LEDDirection=!LEDDirection;LEDIndex=(LEDIndex+1)%16;}//Mode4模式4:全亮后逐个灭,先左右、后右左,然后全灭逐个亮,先右左、后左右voidMode_4(void){if(LEDDirection){if(LEDFlag)LEDShow(0xFFFE<<LEDIndex);elseLEDShow(~(0x7FFF>>LEDIndex));}else{if(LEDFlag)LEDShow(0x7FFF>>LEDIndex);elseLEDShow(~(0xFFFE<<LEDIndex));}if(LEDIndex==15){LEDDirection=!LEDDirection;if(LEDDirection) LEDFlag=!LEDFlag;}LEDIndex=(LEDIndex+1)%16;}//Mode5模式5:四个亮左右来
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护栏防腐施工方案
- 临时施工道路施工方案
- 航空座椅代建项目协议
- 建筑工程业务合同
- 知识产权担保合同
- 股票配资账户解冻合同
- 项目保险合作合同
- 产品认证与标准符合性协议
- 跨境电商按揭协议模板
- 会议会展服务协议书
- 数控雕刻机设计
- 凡奇创意中旅阿那亚九龙湖整合营销方案
- 医学院外科学胸部疾病教案
- 高中美术 第三课 光色变奏-色彩基础知识与应用-教案
- 国际化学品安全告知卡(甲烷)
- 沼气站操作手册
- YS/T 815-2012铜及铜合金力学性能和工艺性能试样的制备方法
- 生物医用陶瓷材料1
- GB/T 35441-2017聚酰亚胺长丝
- 氧族元素介绍
- 六年级上册美术课件-第10课《艰苦岁月》2-湘美版(2014秋) (共18张PPT)
评论
0/150
提交评论