
可控跑马灯的设计与实现.doc
16页I摘要本设计使用 AT89C2051 芯片作为控制芯片,利用 P1 口连接 8 个发光二极管,通过按键 AN 控制“跑马灯”的亮灭, 并有多种跑马的形式,以达到较美观的显示效果开始时所有灯全亮,接着按下按键AN 时开始跑马灯,再按下按键 AN 时跑马灯停止,再按下按键 AN 时又继续 关键词:AT89C2051 芯片 跑马灯 按键目录摘要 ......................................................I1 设计概述 ................................................12 AT89C2051...............................................22.1 硬件结构 .......................................22.2 软硬件的开发 ...................................42.3 性能价格比及应用 ...............................43 硬件电路设计 ............................................64 软件设计 ................................................74.1 设计流程 .......................................74.2 程序源代码 .....................................85 课程设计体会 ...........................................136 参考文献 ...............................................1411 设计概述我查阅书籍资料,浏览网上的各种作品,通过各种作品之间的比较,和各种优化,设计出了较为简单的硬件电路,用其实现可控的“跑马灯”功能。
本设计能展示跑马灯的色彩样式及“跑马”变换效果,如果将跑马灯做大,会有很高的观赏价值硬件系统部分包括显示部分、按键控制部分和控制芯片系统框图如下:图 1.1显示部分由 8 个 LED 及 8 个 1K 的电阻组成,LED 的压降一般为1.8V 左右,通过与 1K 的电阻连接实现分压和限流作用;按键控制部分仅由一个按键 AN 组成,通过此按键实现跑马灯的停止与继续显 示 部 分 AT89C2051按 键 控制 部 分22 AT89C2051AT89C2051 是由 ATMEL 公司推出的一种小型单片机95 年出现在中国市场,其主要特点为采用 Flash 存贮器技术,降低了制造成本,其软件、硬件与 MCS-51 完全兼容,可以很快被中国广大用户接受,其程序的电可擦写特性,使得开发与试验比较容易2.1 硬件结构1 引脚AT89C2051 共有 20 条引脚,详见图 1.从图中可见,2051 继承了8031 最重要引脚:图 2.1P1 口共 8 脚,准双向端口P3 口共 7 脚,准双向端口,并且保留了全部的 P3 的第二功能,3如 P3.0、P3.1 的串行通讯功能,P3.2、P3.3 的中断输入功能,P3.4、P3.5 的定时器输入功能。
P3.6 在 2051 外部无引脚在引脚的驱动能力上面,AT89C2051 具有很强的下拉能力,P1,P3 口的下拉能力均可达到 20mA.相比之下,AT89C51/87C51 的端口下拉能力每脚最大为 15mA但是限定 9 脚电流之和小于 71mA.这样,引脚的平均电流只 9mAAT89C2051 驱动能力的增强,使得它可以直接驱动 LED 数码管为了增加对模拟量的输入功能,它的内部构造了一个模拟信号比较器,其输入端连到 P1.0 和 P1.1 口,比较结果存入 P3.6 对应寄存器 2 电源AT89C2051 有很宽的工作电源电压,可为 2.7~6V,当工作在 3V时,电流相当于 6V 工作时的 1/4AT89C2051 工作于 12Hz 时,动态电流为 5.5mA,空闲态为 1mA,掉电态仅为 20nA这样小的功耗很适合于电池供电的小型控制系统3 存储器AT89C2051 片内含有 2k 字节的 Flash 程序存储器,128 字节的片内 RAM,与 80C31 内部完全类似由于它内部设计全静态工作,所以允许工作的时钟为 0~20MHz,也就是说,允许在低速工作时,不破坏 RAM 内容。
相比之下,一般 8031 对最低工作时钟限制为 3.5MHz,因为其内部的 RAM 是动态刷新的它不允许构造外部总线来扩充程序/数据存储器,所以它也不需要 ALE、PSEN、RD、WR 一类的引脚4 内部 I/O 控制4AT89C2051 在内部 I/O 控制上继承了 MCS51 的特性:5 路 2 级优待中断,串等口,2 路定时器/计数器 5 程序保密AT89C2051 设计有 2 个程序保密位,保密位 1 被编程之后,程序存储器不能再被编程除非做一次擦除,保密位 2 被编程之后,程序不能被读出2.2 软硬件的开发AT89C2051 可以采用下面 2 种方法开发应用系统1)由于 AT89C2051 内部程序存贮器为 Flash,所以修改它内部的程序十分方便快捷,只要配备一个可以编程 AT89C2051 的编程器即可调试人员可以采用程序编辑-编译-固化-插到电路板中试验这样反复循环的方法,对于熟练的 MCS-51 程序员来说,这种调试方法并不十分困难当做这种调试不能够了解片内 RAM 的内容和程序的走向等有关信息2) 将普通 8031/80C31 仿真器的仿真插头中 P1.0~P1.7 和P3.0~P3.6 引出来仿真 AT89C2051,这种方法可以运用单步、断点的调试方法,但是仿真不够真实,比如,AT89C2051 的内部模拟比较器功能,P1 口、P3 口的增强下拉能力等等。
2.3 性能价格比及应用下面就目前国内较多的两种单片机,讨论一下 AT89C2051 的性能价格比5与 80C31 系统相比较,如果需要构成一个 80C31 的最小系统的话,除了 CPU 之外,至少需要一片 27C64,而系统的有效引脚和AT89C2051 基本相同从元器件的成本,电路板的面积和加密性来看,我们使用 AT89C2051 都是合算的与 PIC 单片机比较,AT89C2051 的价格高于 PIC 的 OTP 型号,但大大低于 PIC 的 EPROM 型,AT89C2051 片内不含 Watch Dog,这是AT89C2051 的不足之处,中断系统堆栈结构、串等通讯笔定时器系统都大大强于 PIC 系统由于 PIC 芯片中无标准串等口,所以在单片机的联网应用上面,PIC 不太适合与 PIC 相比 2051 更适合于较复杂的应用场合,适合一些软件需要多次修改的应用就目前中国市场的情况来看,AT89C2051 有很大的市场其原因有下列 2 点:(1)它采用的是 MCS51 的核心,十分容易为广大用户所接受;(2)它内部基本保持了 80C31 的硬件 I/O 功能;(3)它的 Flash 存贮器技术,可重复擦/写 1000 次以上,容易解闷调试手段;(4)更适合小批量系统的应用,容易实现软件的升级。
AT89C2051 适合于家用电器控制,分布式测控网络,I/O 量不足不是很大的应用系统63 硬件电路设计本设计使用 AT89C2051 芯片作为控制芯片,利用 P1 口连接 8 个发光二极管,利用按键 AN 控制“跑马灯”的继续与否,以达到显示效果在 Proteus 的仿真连接图如下:图 3.174 软件设计4.1 设计流程图 4.1程序设计思路:开始时跑马灯全亮,接着读取按键状态,当按键没有闭合时,一直在此查询按键状态;当有按键真正闭合后,开始8读程序存储器,调出 I/O 值送给 P1 口,实习一次 LED 状态改变然后再检查按键状态,若无闭合,继续读程序存储器;否则,在此循环,直到按键再次按下才读程序存储器程序的流程如下:4.2 程序源代码AN EQU P3.2ORG 0000HLJMP STARTORG 0030HSTART:MOV P1,#00H ;初始化P1口,LED全亮CLR 00H ;清标志位00HX2:JB AN,X1LCALL DEL10 ;延时10MS的消抖X1:JB AN,X2JNB AN,$ ;等待按键松开MOV A,#00HLOOP:JB 00H,X3 ;判断00H 位MOV R2,AMOV DPTR,#TABMOVC A,@A+DPTR INC R2MOV P1,ALCALL DELAY ;延时125MSMOV A,R2CJNE R2,#85,X3 ;判断读程存是否为最后一列MOV P1,#00H ;初始化P1口9MOV A,#00HX3:JB AN,LOOP ;查询按键状态LCALL DEL10JB AN,X3JNB AN,$CPL 00HLJMP LOOP;******************************; 延时125ms;******************************DELAY:MOV R5,#5DL:MOV R4,#50DL2:MOV R3,#250DL1:DJNZ R3,DL1DJNZ R4,DL2DJNZ R5,DLNOPRET;******************************; 延时10ms;******************************DEL10:MOV 7FH,#42DEL10MS:MOV 7EH,#119DJNZ 7EH,$DJNZ 7FH,DEL10MSRET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;TAB: db 00000000b db 11111111b 10db 00000000bdb 00000000bdb 00000000bdb 00000000bdb 11111111bdb 00000000bdb 11111111bDB 11111110BDB 11111101BDB 11111011BDB 11110111BDB 11101111BDB 11011111BDB 10111111BDB 01111111BDB 10111111BDB 11011111BDB 11101111BDB 11110111BDB 11111011BDB 11111101BDB 11111110BDB 11111111BDB 11111100BDB 11110011BDB 11001111BDB 00111111BDB 11001111B11DB 11110011BDB 11111100BDB 11111111BDB 11110000BDB 00001111BDB 00001111BDB 11110000BDB 00001111BDB 00001111BDB 11110000BDB 00000000BDB 11100000BDB 01110000BDB 00111000BDB 00011100BDB 00001110BDB 00000111BDB 01111110BDB 10111101BDB 11011011BDB 11100111BDB 11011011BDB 10111101BDB 01111110BDB 11111110BDB 11111100BDB 11111000BDB 11110000BDB 11100000B12DB 11000000BDB 10000000BDB 00000。












