一、实习题目:
单片机流水彩灯设计
二、实习目的:
1、认识AT89系列单片机的硬件电路; 2、学习延时程序的编写和使用; 3、学习循环左移或右移指令的使用; 4、学习单片机程序烧录的基本过程和操作; 5、学习应用查询法和中断法实现键盘的处理; 6、了解单片机的开发过程;
7、实现程序由软件仿真到硬件调试的过程。
8、切实培养单片机应用系统的实践设计开发能力:采用软件仿真与硬件仿真手段,培养理论联系实际的能力,借助实训项目的学习与实作,巩固理论知识,提高实作能力及系统的开发设计能力。
9、培养自主学习的能力:通过实训发现理论学习的不足,借助仿真软件,自主学习抽象的理论概念,切实打下坚实的基础。
三、实习任务:
利用单片机设计并制作流水彩灯。具体要求如下:
1、该流水彩灯设置8个发光二极管,两个按键K1和K2; 2、上电后,8个LED灯全亮;
3、当按下K1键后,实现流水彩灯功能;再按一次恢复为全亮; 4、K2键的功能同K1,但是要实现与K1不同的彩灯点亮方式。
1
四、摘要:
当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
五、实习内容:
1、方案设计:
根据设计指导书的要求我所要实现的流水灯的功能是 :
1. 流水灯上有2个按键K1和K2。 2. 上电后,所有的流水灯均可点亮。 3. 两个按键分别控制2中“流水”的花样。
于是我选择将按键一的流水花样设置为循环向上,而使用按键二则能使“流水”的模式变为先循环向下2次,再循环向上2次,最后很快的闪烁2次,如此重复。
2、硬件电路设计
单片机的硬件组成:
按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工
2
的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使用AT89C51单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。其具体硬件组成如图1所示。
3
从原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。
如上电路原理图,由于P1口内部已有上拉电阻,在使用时不需要外接上拉电阻。这里用P1口控制发光二极管的阴极,则可以不需要驱动电路,直接由限流电阻控制发光二级管的亮度。目标板上仅有两个按键K1和K2,分别接到P3.2和P3.3引脚(方便用中断和查询两种方式)。在处理按键时,采用查询方式判断是否有键按下,并进行按键消抖处理。这里K1和K2接在外部中断0和外部中断1引脚处,也可以采用中断方式进行按键处理。
AT89C51 简介:
AT89C51(如图2-10所示)是一种带4K字节闪烁可编程可擦除只读存储器
(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个
4
芯片中,ATMEL的AT89S51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51单片机示意图(4-2-1)
VCC:供电电压。 GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
5
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指钟写入07H,其它专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,
特殊功能寄存器 ACC PSW DPH DPL IP IE
特殊功能寄存初始态 器 00H 00H 00H 00H xxx00000B 0xx00000B B SP TH0 TL0 TH1 TL1 初始态 00H 07H 00H 00H 00H 00H 6
TMOD SCON P0-P3 00H xxxxxxxxB 1111111B TCON SBUF PCON 00H 00H 0xxxxxxxB 8051的初始态(4-2-2)
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。
振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
芯片擦除:整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89S51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时
7
器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
3、软件程序设计:
单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进行工作,即编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。
其中K1使用循环位移法使得流水灯流动,K2使用查表法。
程序清单如下: ORG 0000H MAIN: MOV A,#0 MOV P1,A MOV TMOD,#10H SETB P3.2 SETB P3.3 K1: JB P3.2,K2 LCALL DEL_20mS
JNB P3.2,$ MOV A,#7FH
JNB P3.3,$ AJMP MAIN
S1: JB P3.2,L1
LCALL DEL_20mS
JNB P3.2,$
MOV A,#0 MOV P1,A SJMP MAIN
K2: JB P3.3,K1 LCALL DEL_20mS JNB P3.3,$
LCALL START
L1: MOV P1,A LCALL DEL_S
RR A START: MOV DPTR,#TAB LOOP: CLR A MOVC A,@A+DPTR
8
JB P3.3,S1 LCALL DEL_20mS
CJNE A,#01H,LOOP1 LJMP START LOOP1: MOV P1,A LCALL DELAY INC DPTR JB P3.2,S2 LCALL DEL_20mS JNB P3.2,$
AJMP MAIN
S2: JB P3.3,LOOP LCALL DEL_20mS JNB P3.3,$ MOV A,#0 MOV P1,A
SJMP MAIN
TAB: DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH,07FH DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH,07FH DB 07FH,0BFH,0DFH,0EFH DB 0F7H,0FBH,0FDH,0FEH DB 07FH,0BFH,0DFH,0EFH DB 0F7H,0FBH,0FDH,0FEH DB 00H, 0FFH,00H, 0FFH DB 01H DELAY: MOV R5,#15 D1: MOV R6,#20
D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET
DEL_S: MOV TL1,#0B0H MOV TH1,#3CH MOV R2,#5 SETB TR1 LOOP2: JNB TF1,$ MOV TL1,#0B0H MOV TH1,#3CH CLR TF1 DJNZ R2,LOOP2 CLR TR1 RET
DEL_20mS:MOV TL1,#0F0H MOV TH1,#0D8H MOV R2,#2
SETB TR1
LOOP3: JNB TF1,$ MOV TL1,#0F0H MOV TH1,#0D8H CLR TF1 DJNZ R2,LOOP3 CLR TR1
RET
9
END
4、烧谢调试程序:
全部设计仿真如图所示:
这个程序完成了任务书的功能,它是这样工作的,上电后LED全亮,按下K1,它就上循环,当再按下K1或K2后它又全亮,按下K2后,它是先向下循环两次再向上循环两次,最后在很快的闪两次,如此反复。
五、心得体会:
作为一名电子信息工程专业的学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的实践平台。
10
六、参考文献:
胡健主编 . 单片机原理及接口技术 . 机械工业出版社,2004 百度知道
11
因篇幅问题不能全部显示,请点此查看更多更全内容