《毕业设计(论文)可控多显示智能节日彩灯系统基于51单片机的32路流水灯.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)可控多显示智能节日彩灯系统基于51单片机的32路流水灯.doc(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、_ 大 学毕业设计(论文)设计(论文)题目: 可控多显示智能节日彩灯系统系 别: 电子工程系 1专 业: 应用电子技术 1班 级: 1姓 名: 1学 号: 1指导教师: 完成时间: 年月 目录摘要3关键字4第一章 课题概述4 课题简介4 设计任务4 系统的主要功能4 1.4 流水灯的5种状态5 1.5流水灯的工作流程5第二章 硬件电路的设计52.1芯片的选择52.2 晶振电路的设计122.3 显示电路的设计122.4 输入电路的设计142.5复位电路的设计142.6 扩展电路的设计15 2.7 74LS373译码电路的设计16 17第三章 软件系统的设计18 3.1 主程序的程序流程图18 4
2、0mS延时子程序设计18 时间调整子程序流程图19状态调整子程序流程图下20 汇编语言程序20第四章 系统仿真28Proteus软件简介28第五章 毕业设计总结 29 心得体会 29附录311、参考文献312、元器件清单323、电路原理图33可控多显示智能节日彩灯系统 -基于51单片机的32路流水灯【摘要】科技发展日新月异,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。有关LED技术领域的发展,如今的LED已经成为了显示领
3、域的热门关键词,优越的技术特性和下降的成本让它的普及之路越发光明,商业展示、体育场馆、户外广告乃至日常应用都将成为LED设备展示自己的舞台。本设计是利用AT89C51单片机及外围接口实现的32路流水灯显示系统,利用单片机的定时器/计数器的定时和计数的原理,将软件和硬件有机的结合起来,使得系统能够正确的进行计时,同时使数码管能够正确的状态,用开关做键盘输出,LED灯显示使系统能够实现32路流水灯的几种种不同的显示状态。【关键词】 单片机,自动化,智能控制,LED, 流水灯第一章 课题概述1.1课题简介早期单片机开发人员就是使用人工编写的二进制代码交给单片机去工作的。今天,我们不必用烦人的二进制去
4、编写程序,完全可以将我们容易理解的“程序语言”通过“翻译”软件“翻译”成单片机所需的二进制代码,然后交给单片机去执行。这里的“程序语言”目前主要有汇编语言和C语言两种;在这里我们所说的“翻译”软件,同行们都叫它为“编译器”,将“程序语言”通过编译器产生单片机的二进制代码的过程叫编译。我们将流水灯实验写为汇编语言程序。 单片机的应用系统由硬件和软件组成,硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进行工作,即编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。使系统能够实现:32路流水灯4种不同的显示状态。1.2设计任务每当夜幕降临,我
5、们可以看到大街各式各样广告牌上漂亮的霓虹灯,看起来令人赏心悦目,为夜幕中的城市增添了不少亮丽色彩。其实这些霓虹灯的工作原理和单片机流水灯是一样的,只不过霓虹灯的花样更多,看起来更漂亮一些。本课题详细地介绍了一种由AT89C51集成块编程实现的控制电路,它完成了单片机流水灯控制功能,并给出了具体的硬件电路和相应的程序。通过这次设计掌握51单片机的原理, 巩固已学的理论知识,建立单片机理论和实践的结合。1.3系统的主要功能 本系统是利用单片机采用模块化设计的32路流水灯,P0,P2口作为输出口,控制32个LED灯,P1口作为LED数码管显示输出,用于显示流水灯的5个状态,P3.2,外接两个按键S2
6、,S3,其中S2调整功能,S3调整时间。 1.4流水灯的5种的状态状态0:数码管显示0,灯不亮。状态1: 数码管显示1,灯一位暗点左移32次,再一位亮点右移32次,依次循环。状态2:数码管显示2,先PB,PA口依次向右移动,PC,PA2依次向左移动;再PA,PB口依次向左移动,PA2,PC口依次向右移动。状态3:数码管显示3,灯2位点亮左移31次,再右移31次,依次循环状态4:数码管显示4,循环上述状态1到状态3。1.5流水灯的工作流程流水灯的工基本作原理:在系统运行过程中,主要是通过外接的2个按键来分别改变显示状态和控制LED灯点亮的速度,2个按键在使用时,设定为下降沿触发,当有按键按下,响
7、应中断一次。第二章 硬件电路的设计2.1芯片的选择(简介)芯片的选择按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。AT89C51简介:AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.255.50V的电压工作范围和024MHz工作频率。是一种带4K字节闪存可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memo
8、ry)的低电压、高性能CMOS 8位微处理器, AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图所示主要特性:与MCS-51 兼容4K字节可编程闪烁存储器寿命:1000写/擦循环数据保留时间:10年全静态工作
9、:0Hz-24MHz三级程序存储器锁定1288位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路管脚说明:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管
10、脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FL
11、ASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数
12、据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处
13、理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。振荡器特性:XTAL1和XTAL2分
14、别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。芯片擦除:整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时
15、器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。串口通讯单片机的结构和特殊寄存器,这是你编写软件的关键。至于串口通信需要用到那些特殊功能寄存器呢,它们是SCON,TCON,TMOD,SCON等,各代表什么含义呢?SBUF数据缓冲寄存器这是一个可以直接寻址的串行口专用寄存器。有朋友这样问起过“为何在串行口收发中,都只是使用到同一个寄存器SBUF?而不是收发各用一个寄存器。”实际上SBUF 包含了两个独立的寄存器,一个是发送寄存,另一个是接收寄存器,但它们都共同使用同一个寻址地址99H。CPU 在读SBUF 时会指到接
16、收寄存器,在写时会指到发送寄存器,而且接收寄存器是双缓冲寄存器,这样可以避免接收中断没有及时的被响应,数据没有被取走,下一帧数据已到来,而造成的数据重叠问题。发送器则不需要用到双缓冲,一般情况下我们在写发送程序时也不必用到发送中断去外理发送数据。操作SBUF寄存器的方法则很简单,只要把这个99H 地址用关键字sfr定义为一个变量就可以对其进行读写操作了,如sfr SBUF = 0x99;当然你也可以用其它的名称。通常在标准的reg51.h 或at89x51.h 等头文件中已对其做了定义,只要用#include 引用就可以了。SCON 串行口控制寄存器通常在芯片或设备中为了监视或控制接口状态,都
17、会引用到接口控制寄存器。SCON 就是51 芯片的串行口控制寄存器。它的寻址地址是98H,是一个可以位寻址的寄存器,作用就是监视和控制51 芯片串行口的工作状态。51 芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON 寄存器。它的各个位的具体定义如下:SM0 SM1 SM2 REN TB8 RB8 TI RISM0、SM1 为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。串行口工作模式设置。SM0 SM1 模式 功能波特率0 0 0 同步移位寄存器 fosc/120 1 1 8位UART 可变1 0 2 9位UART fosc/32 或fosc/641 1
18、 3 9位UART 可变在这里只说明最常用的模式1,其它的模式也就一一略过,有兴趣的朋友可以找相关的硬件资料查看。表中的fosc 代表振荡器的频率,也就是晶振的频率。UART 为(Universal Asynchronous Receiver)的英文缩写。SM2 在模式2、模式3 中为多处理机通信使能位。在模式0 中要求该位为0。REM 为允许接收位,REM 置1 时串口允许接收,置0 时禁止接收。REM 是由软件置位或清零。如果在一个电路中接收和发送引脚P3.0,P3.1 都和上位机相连,在软件上有串口中断处理程序,当要求在处理某个子程序时不允许串口被上位机来的控制字符产生中断,那么可以在这
19、个子程序的开始处加入REM=0 来禁止接收,在子程序结束处加入REM=1 再次打开串口接收。大家也可以用上面的实际源码加入REM=0 来进行实验。TB8 发送数据位8,在模式2 和3 是要发送的第9 位。该位可以用软件根据需要置位或清除,通常这位在通信协议中做奇偶位,在多处理机通信中这一位则用于表示是地址帧还是数据帧。RB8 接收数据位8,在模式2 和3 是已接收数据的第9 位。该位可能是奇偶位,地址/数据标识位。在模式0 中,RB8 为保留位没有被使用。在模式1 中,当SM2=0,RB8 是已接收数据的停止位。TI 发送中断标识位。在模式0,发送完第8 位数据时,由硬件置位。其它模式中则是在
20、发送停止位之初,由硬件置位。TI 置位后,申请中断,CPU 响应中断后,发送下一帧数据。在任何模式下,TI 都必须由软件来清除,也就是说在数据写入到SBUF 后,硬件发送数据,中断响应(如中断打开),这时TI=1,表明发送已完成,TI 不会由硬件清除,所以这时必须用软件对其清零。RI 接收中断标识位。在模式0,接收第8 位结束时,由硬件置位。其它模式中则是在接收停止位的半中间,由硬件置位。RI=1,申请中断,要求CPU 取走数据。但在模式1 中,SM2=1时,当未收到有效的停止位,则不会对RI 置位。同样RI 也必须要靠软件清除。常用的串口模式1 是传输10 个位的,1 位起始位为0,8 位数
21、据位,低位在先,1 位停止位为1。它的波特率是可变的,其速率是取决于定时器1 或定时器2 的定时值(溢出速率)。AT89C51 和AT89C2051 等51 系列芯片只有两个定时器,定时器0 和定时器1,而定时器2是89C52 系列芯片才有的。波特率在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。波特率是指串行端口每秒内可以传输的波特位数。有一些初学的朋友认为波特率是指每秒传输的字节数,如标准9600 会被误认为每秒种可以传送9600个字节,而实际上它是指每秒可以传送9600 个二进位,而一个字节要8 个二进位,如用串口模式1 来传输那么加上起始位
22、和停止位,每个数据字节就要占用10 个二进位,9600 波特率用模式1 传输时,每秒传输的字节数是960010960 字节。51 芯片的串口工作模式0的波特率是固定的,为fosc/12,以一个12M 的晶振来计算,那么它的波特率可以达到1M。模式2 的波特率是固定在fosc/64 或fosc/32,具体用那一种就取决于PCON 寄存器中的SMOD位,如SMOD 为0,波特率为focs/64,SMOD 为1,波特率为focs/32。模式1 和模式3 的波特率是可变的,取决于定时器1 或2(52 芯片)的溢出速率。那么我们怎么去计算这两个模式的波特率设置时相关的寄存器的值呢?可以用以下的公式去计算
23、。波特率(2SMOD32)定时器1 溢出速率上式中如设置了PCON 寄存器中的SMOD 位为1 时就可以把波特率提升2 倍。通常会使用定时器1 工作在定时器工作模式2 下,这时定时值中的TL1 做为计数,TH1 做为自动重装值 ,这个定时模式下,定时器溢出后,TH1 的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。在这个定时模式2 下定时器1 溢出速率的计算公式如下:溢出速率(计数速率)/(256TH1)上式中的“计数速率”与所使用的晶体振荡器频率有关,在51 芯片中定时器启动后会在每一个机器周期使定时寄存器TH 的值增加一,一个机器周期等于十二个振荡周期,所以可
24、以得知51 芯片的计数速率为晶体振荡器频率的1/12,一个12M 的晶振用在51 芯片上,那么51 的计数速率就为1M。通常用 晶体是为了得到标准的无误差的波特率,那么为何呢?计算一下就知道了。如我们要得到9600 的波特率,晶振为 和12M,定时器1 为模式2,SMOD 设为1,分别看看那所要求的TH1 为何值。代入公式:9600(232)(/12)/(256-TH1)TH125012M9600(232)(12M/12)/(256-TH1)上面的计算可以看出使用12M 晶体的时候计算出来的TH1 不为整数,而TH1 的值只能取整数,这样它就会有一定的误差存在不能产生精确的9600 波特率。当
25、然一定的误差是可以在使用中被接受的,就算使用 的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差对波特率的影响是十分之小的,可以忽略不计。AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.255.50V的电压工作范围和024MHz工作频率,使用AT89C51单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有32个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组
26、成的单个单片机。单片机内部最核心的部分是CPU,CPU主要功能是产生各种控制信号,控制存储器、输入/输出端口的数据传输、数据的算术运算、逻辑运算以及位操作处理等,CPU按期功能可分为运算器和控制器两部分。控制器由程序计数器 PC、指令存储器、指令译码器、实时控制与条件转移逻辑电路等组成。它的功能是对来自存储器中的指令进行译码,通过实时控制电路在规定的时刻发出各种操作所需的内部和外部的控制信号,是各部分协调工作,完成指令所规定的操作。运算器由累加器ACC、程序状态字寄存器PSW、BCD码运算调整电路等组成。为了提高数据处理和位操作功能,片内增加了一个通用寄存器B和一些专用寄存器,还增加了位处理逻
27、辑电路的功能。2.2 晶振电路的设计单片机必须在时钟的驱动下才能工作,单片机的定时控制功能是用时钟电路和振荡器完成的,单片机内部有一个时钟振荡电路,只需要外界一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,为整个系统提供一个时间基准,根据硬件电路的的不同,连接方式分为内部时钟方式和外部时钟方式,本设计采用内部始终方式,时钟电路如图所示:选用石英晶体振荡器,其振荡频率主要由石英晶振的频率决定,电路中两个电容C1、C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。典型值为20PF。时钟周期是指单片机在工作时,由内部振荡器产生或由外直接的送至内部控制逻辑单元的时钟信号的周期
28、。其大小是时钟信号频率的倒数,用fosc表示,图中时钟频率为12MHZ,即fosc=1/12 us2.3显示电路的设计 32个LED灯的显示早在几年以前LED就以低功耗、超常使用寿命被广泛应用到信号指示、数码显示等弱电领域,如今超高亮LED的研制成功,才使它越来越多的用在户外招牌、彩灯装饰、甚至照明领域。目前大部分的指示灯及部分原来使用霓虹灯等装饰照明的已经改用了。 同时,随着城市夜景亮化的扩大,尤其国家倡导大力发展环保节能的绿色照明后,具有非常广阔的市场。普通的LED发光二极管发光时的压降位1.8V,发光电流为3-12mA,故限流电阻取300欧姆,如下图所示1位的七段数码管本次设计采用1位七
29、段数码管显示,显示方式有两种:一种是静态显示,一种是动态显示。静态显示的特点是显示效果稳定不闪烁,程序编写简单,但占用端口资源多;动态显示的特点是显示稳定性没静态好,程序编写复杂,相对于静态显示而言占用端口资源较少,在本次设计中考虑到实际情况采用静态方式,显示电路如图所示:因为采用的是共阳接法的四位数码管所以低电平才能点亮,在编写程序时送0才能亮2.4 输入电路的设计本设计采用独立式键盘的方法,有2个控制按键,如图所示: 在单片机应用中键盘用得最多的形式是独立式键盘和行列式键盘,各有自己的特点。独立式键盘硬件电路简单,在程序设计上也不复杂,一般用在对硬件电路要求不高的电路中;行列式键盘在硬件电
30、路上比独立式键盘复杂的多,二届在程序算法上也比较繁琐,但是在节省端口资源上有优势,更适用于多按键电路。2.5复位电路的设计为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。一般微机电路正常工作需要供电电源为5V5%,即4.755.25V。由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。目前为止,单片机复位电路主要有四种类型:(1)微分型复位电路;(2)积分型复位电路;(3)比较器型复位电路;(4)看门狗型复位电路。 ISA总线的
31、复位信号到南桥之间会有一个非门,跟随器或电子开关,常态时为低电平,复位时为高电平。IDE的复位和ISA总线正好相反,通常两者之间会有一个非门或是一个反向电子开关,也就是说IDE常态时为高电平,复位时为低电平,这里的高电平为5V或3.3V,低电平为0.5V以下的电位。复位时计算机的一个重要工作状态,以便中央处理器CPU和其他功能部件都处于一个确定的初始状态,并从这个状态开始工作。单片机的复位引脚RST为第9引脚,只要将该引脚连续保持两个机器周期以上的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,电路如图所示:由于单片机是高电平复位,所以当按键按下时,单片机的9脚RESET管脚处于高
32、电平,此时单片机处于复位状态。在设计中由于存在倒计时时间的记忆功能还是用到了软复位,就是当程序执行完毕后将程序指针通过一条跳转指令跳到程序执行的的起始地址。 2.6扩展电路的设计 本次设计采用了2片8255扩展口芯片,8255是一种可编程的并行I/O口接口芯片,它的内部由端口、端口控制电路、数据总线缓冲器、读/写控制逻辑电路组成。该芯片的外部接口部分有3个8位并行I/O口,即A口、B口、C口,可由编程器决定这3个端口的功能。A组和B组的控制电路合在一起构成一个8位控制寄存器,每组控制电路既接受来自读/写控制逻辑电路的读/写命令,也从数据线接受来自CPU的控制字,并发出相应的命令到各自管理的外设
33、备接口通道,或对端口C按位清0,置1。通,也也从数据线接受来自CPU的控制字,并发出过对8255可编程的并行I/O接口芯片和80C51单片机的可编程实现流水灯的正向逐个点亮,反向逐个点亮,间隔逐个点亮等。一位8255扩展口芯片可扩展24个口,故总共可以扩展48个口,但本次只采用了32个口,如下图所示2.7 74LS373译码电路的设计首先说74LS373不是单片机,而是一个逻辑芯片,看下面:74ls373是常用的地址锁存器芯片,它实质是一个是带三态缓冲输出的8D触发器,在单片机系统中为了扩展外部存储器,通常需要一块74ls373芯片。(1).1脚是输出使能(OE),是低电平有效,当1脚是高电平
34、时,不管输入3、4、7、8、13、14、17、18如何,也不管11脚(锁存控制端,G)如何,输出2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部呈现高阻状态(或者叫浮空状态);(2).当1脚是低电平时,只要11脚(锁存控制端,G)上出现一个下降沿,输出2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)立即呈现输入脚3、4、7、8、13、14、17、18的状态. 锁存端LE 由高变低时,输出端8 位信息被锁存,直到LE 端再次有效。 当三态门使能信号OE为低电平时,三态门导通,允许Q0Q
35、7输出,OE为高电平时,输出悬空。当74LS373用作地址锁存器时,应使OE为低电平,此时锁存使能端C为高电平时,输出Q0Q7 状态与输入端D1D7状态相同;当C发生负的跳变时,输入端D0D7 数据锁入Q0Q7。51单片机的ALE信号可以直接与74LS373的C连接。 原理图第三章软件系统的设计 3.1 主程序的程序流程图 主程序的功能是各功能单元的初始化,再根据R1的值,分别去执行8个灯亮的状态,利用散转指令 JMP A+DPTR 和转移指令 LJMP 或AJMP 来实现。框图如下说明:R1中的值由按键S3按下的次数决定,范围是00H04H共5个状态 3.2 40mS延时子程序设计如下DEL
36、: MOV 20H, R2 ;时钟频率为6MHZ MOV R4, 20H DEL1: MOV R5, #40 DEL2: MOV R6, #250 DEL3: DJNZ R6, DEL3 DJNZ R5, DEL2 DJNZ R4,DEL1 RET延时子程序调用说明: R2为01H时,该延时子程序调用一次为40mS; R2为02H时,该延时子程序调用一次为80mS; R2为04H时,该延时子程序调用一次为160mS; R2为08H时,该延时子程序调用一次为320mS; R2为10H时,该延时子程序调用一次为640mS;3.3 时间调整子程序流程图 每位灯亮时间的长短,是通过外中断1外接按键S3
37、来实现,R2的初始值为10H(16D),当按键S3每按下一次(下降沿),R2的值除以2,若为00H,R2重新赋10H。这样得到R2的值分别是10H,08H,04H,02H,01H。这些值决定调用40mS子程序的次数。框图如下 3.4状态调整子程序流程图 状态值的调整时通过外中断0外接按键S2来实现,R1的初始值为00H,当按键S2每按下一次(下降沿),R1的值加1,并向P1口送显示的字型码,若超出08H,R1重新赋00H。框图如下:3.5汇编语言程序 - 34 -ORG 0000H LJMP MAIN0 ORG 0003H LJMP INT0S ORG 0013H LJMP INT1S ORG
38、 0030H MAIN0: MOV R1,#00H MOV R2, #10H MOV IE, #85H MOV IP, #01H MOV TCON, #05H MOV DPTR, #7FFFH MOV A, #80H MOVX DPTR, A MOV DPTR, #0FFFFH MOVX DPTR, A MOV A,#00H MOV DPTR,#0FFFCH MOVX DPTR,A MOV R6,#3 MOV DPTR,#7FFCH LOOP0:MOVX DPTR,A INC DPTR DJNZ R6,LOOP0 MOV P1,#00H LCALL DEL LCALL DEL LCALL DE
39、L LCALL DEL MOV A,#0FFH MOV DPTR ,#0FFFCH MOVX DPTR,A MOV DPTR,#7FFCH MOV R6,#3 LOOP1:MOVX DPTR,A INC DPTR DJNZ R6,LOOP1 MOV P1,#0C0H MAIN: MOV A,R1 RL A MOV DPTR,#TABLE JMP A+DPTR TABLE:AJMP TAB0 AJMP TAB1 AJMP TAB2 AJMP TAB3 AJMP TAB4 AJMP MAIN TAB0:LCALL DEL SJMP MAIN TAB1:LCALL ML10 SJMP MAIN TA
40、B2:LCALL ML20 SJMP MAIN TAB3:LCALL ML30 SJMP MAIN TAB4:LCALL ML10 LCALL ML20 LCALL ML30 SJMP MAIN SJMP MAIN ML10:MOV R7,#08H MOV A,#00H MOV DPTR,#0FFFCH MOVX DPTR,A MOV DPTR,#7FFCH MOV R6,#3 LOOP3:MOVX DPTR,A INC DPTR DJNZ R6,LOOP3 MOV A,#01H MOV DPTR,#7FFCH ML21:MOVX DPTR,A LCALL DEL RL A DJNZ R7,ML21 MOV A,#00H MOVX DPTR,A MOV R7,#08h MOV A,#01H INC DPTR ML22:MOVX DPTR,A LCALL DEL RL A DJNZ R7,ML22 MOV A,#00H MOVX DPTR,A MOV R7,#08H MOV A,#01H INC DPTR ML23:MOVX DPTR,A LCALL DEL RL A DJNZ R7,ML23 MOV A,#0