C51可控流水灯单片机课程设计报告

C51可控流水灯单片机课程设计报告本文简介:80C51单片机流水灯实训和调试报告班级:姓名:学号:单片机及应用课程设计:可控流水灯设计1目的单片机课程设计主要是为了让我们增进对80C51单片机电路的感性认识,加深对理论方面的理解。了解软硬件的有关知识,并掌握软硬件设计过程、方法及实现,为以后设计和实现应用系统打下良好基础。另外,通过简单课题的
C51可控流水灯单片机课程设计报告本文内容:
80C51单片机流水灯实训和
调试报告
班级:
姓名:
学号:
单片机及应用课程设计:可控流水灯设计
1
目的
单片机课程设计主要是为了让我们增进对80C51单片机电路的感性认识,加深对理论方面的理解。了解软硬件的有关知识,并掌握软硬件设计过程、方法及实现,为以后设计和实现应用系统打下良好基础。另外,通过简单课题的设计练习,使我们了解必须提交的各项工程文件,达到巩固、充实和综合运用所学知识解决实际问题的目的。
2.2
课题的意义
这次单片机课程设计是为了通过对流水灯控制的设计加强学生团队配合的能力和创造力;综合运用专业及基础知识,解决实际工程技术问题的能力。能够让学生深入真是的体会到所学的理论知识和实践相结合的过程。找出自身的不足并加以改正。
2.3
预期的目标
对8个LED灯设计5种流水灯显示方式,用一个按键进行方式选择,并用一个数码管显示方式编号;用两个键来控制流水灯流动的速度。
2.4
面对的问题
这次课程设计是通过80C51位单片机实现。但面对的问题却是两方面的:一个是软件的设计,也就是实现流水灯控制功能的程序编辑;另一个是硬件的设计,需要我们自己连接、焊接电路板。而更为严峻的就是设计的最后还要将软硬件相结合。首先我们需要通过protel将设计的实物的电路图画出来,再根据电路图连接实物电路。
2.5
课题的技术
LED灯的显示方式、模式切换按钮的控制、亮灯速度的按键控制等技术。
3
系统分析
3.1
涉及的基础知识
电路焊接:制造电子产品的重要手段。
80C51单片机指令系统:规定80C51单片机内操作的语句或命令。
LED数码管的显示:向数码的显示送数,控制系统的显示部分。
3.2
80C51单片机引脚图及引脚功能介绍
本次实习的目的在于加深80C51单片机的理解,首先来简单认识一下,它的引脚如图3-1所示:
图3.1
80C51的引脚图
单片机的39个引脚大致可分为4类:电源、时钟、控制和I/O引脚。
1.电源:
(1)VCC:芯片电源,接+5V;
(2)VSS:接地端;
2.时钟:
XTAL1、XTAL2
:晶体振荡电路反相输入端和输出端。
3.控制线:控制线共有4根,
(1)ALE/PROG:地址锁存允许/片内EPROM编程脉冲
ALE功能:用来锁存P0口送出的低8位地址
PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
(2)
PSEN:外ROM读选通信号。
(3)RST/VPD:复位/备用电源。
RST(Reset)功能:复位信号输入端。
VPD功能:在Vcc掉电情况下,接备用电源。
(4)EA/Vpp:内外ROM选择/片内EPROM编程电源。
EA功能:内外ROM选择端。
Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
4.I/O线
80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。
P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。
3.3
解决问题的基本思路
因为选定用循环移位法来实现亮灯程序的,所以在一种设计好一种亮灯方式的前提下编程实现一个循环结构体,分别来实现五种不同的亮灯方式。另外再编一个实现延时控制的调用程序,来提供亮灯速度的控制。
3.4
总体方案
在做本次课程设计之前将小组内人员分为两小组:一组分负责硬件设计,另一组负责软件编程。硬件小组负责实物的连接和焊接,并进行硬件测试;软件小组负责实现流水灯的各部分程序设计,并进行软件的仿真测试。最后将完成的软硬件相结合,从而达到实现课程设计的效果。
4
系统设计
4.1
硬件设计
按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。80C51单片机是本次课程设计运用的主要原件。流水灯控制设计是用一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。
4.2
软件设计
单片机的应用系统由硬件和软件组成,在硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。软件编程是单片机应用系统中的一个重要的组成部分,也是本次课程设计的重点和难点。我们编程实现流水灯的方法是循环移位法,下面我们就来简述一下循环移位法的工作原理。
循环移位法是采用循环程序结构进行编程。我们在程序一开始就给P1口送一个数,这个数本身就让P1.0先低,其他位为高,然后延时一段时间,再让这个数据向高位移动,然后再输出至P1口,这样就实现“流水”效果了。另外,由于80C51系列单片机的指令中只有对累加器ACC中数据左移或右移的指令,因此实际编程中我们应把需移动的数据先放到ACC中,让其移动,然后将ACC移动后的数据再转送到P1口,这样也可以实现“流水”效果。
4.3
元件清单
表4-1
元件清单
名称
型号
数量
电阻
220Ω
9
电容
103
4
开关
1
芯片
1
单片机
80C51
1
PC机串行口
1
LED灯
8
电源指示灯
1
二极管
2
三极管
4
数码显示器
1
按键
4
4.4
硬件原理图
图
4-1硬件原理图
4.5
硬件焊接图
图
4-2硬件焊接图
4.6
设计主要功能
打开电路开关,按下第一个模式控制键,8个LED数码管会从右向左一个接着一个亮灯,LED显示器会显示数字“1”来表示当前的亮灯方式是模式1。在8个LED数码管全部亮后再次按下第一个模式控制键,8个LED数码管会从又向左2个一组的一次亮灯,同时LED显示器会显示数字“2”来表示当前的亮灯方式是模式2。以此类推,一共有5种显示模式。而第2、3个按键分别控制亮灯速度的快慢。
5
代码编写
ORG
00H
;设置主程序开始地址
CLR
P3.4
;这里可以使小喇叭发出嗒、嗒声
DELAY:
MOV
R6,#255
;延时0.1s
D1:
MOV
R7,#255
;延时一段时间
DJNZ
R7,$
;原地等待
DJNZ
R6,D1
RET
END
DELAY1:
MOV
R6,#150
;延时0.05s
D2:
MOV
R7,#150
DJNZ
R6,D2
RET
END
START:
MOV
A,P1.4
;选中p1.4
数码管使能
JZ
TTT
ADD
R5,A
CJNE
R5,#3,C1
AJMP
M1
C1:CJNE
R5,#3,C1
AJMP
M3
C2:
JNC
C2
C3:
TTT:INC
A
M1:
MOV
P0,#7EH
;把7EH送p0口,数码管显示1
LCALL
DELAY
;数码管亮后的缓冲
MOV
A,#11111110B
;赋值
MOV
R4,A
;保存所赋的值
LOOP:
MOV
P2,A
;值给LED灯
ACALL
V
;调用延时子程序
MOV
A,R4
;保存的值还给A
RL
A
;左移
AJMP
LOOP
;不为零,重复把值给LED灯
RET
M2:MOV
P0,#0A2H
;数码管显示2
LCALL
DELAY
AGAIN:
MOV
R3,#8H
LOOP1:
MOV
A,#FEH
MOV
R4,A
X1:
MOV
P2,A
ACALL
V
;调用延时子程序
MOV
A,R4
RL
A
DJNZ
R3,X1
MOV
R3,#8
LOOP2:
MOV
A,#7FH
X2:
MOV
P2,A
ACALL
V
;调用延时子程序
MOV
A,R4
RR
A
DJNZ
R3,X2
AJMP
AGAIN
RET
M3:MOV
P0,#62H
;数码管显示3
LCALL
DELAY
MOV
R1,#05H
OUTL:
MOV
DPTR,#TABLE
MOV
R2,#04H
MOV
A,00H
INL:
MOV
R0,A
MOVC
A,@A+DPTR
MOV
P2,A
ACALL
V
;调用延时子程序
MOV
A,R0
INC
A
DJNZ
R2,INL
DJNZ
R1,OUTL
TABLE:
DB
7EH,0BDH,0DBH,0E7H
RET
M4:MOV
P0,#74H
;数码管显示4
LCALL
DELAY
MOV
A,#01111111B
MOV
R4,A
LOOP:
MOV
P2,A
ACALL
V
;调用延时子程序
MOV
A,R4
RL
A`
AJMP
LOOP
RET
M5:MOV
P0,#61H
;数码管显示5;
LCALL
DELAY
MOV
R1,#05H
OUTL:
MOV
DPTR,#TABLE
MOV
R2,#04H
MOV
A,00H
INL:
MOV
R0,A
MOVC
A,@A+DPTR
MOV
P2,A
ACALL
V
;调用延时子程序`
MOV
A,R0
INC
A
DJNZ
R2,INL
DJNZ
R1,OUTL
TABLE:
DB
0E7H,0DBH,0BDH,7EH
RET
;延时选择程序
V:
DELAY
MOV
A,P1.5
;P1.5低电平时延时长,流水灯速度慢
JZ
DELAY
MOV
A,P1.6
;P1.6低电平时延时短,流水灯速度快
JZ
DELAY1
RET
;子程序返回
END
;程序结束
6
程序调试
本程序运行过程中没有错误。但对于双键控制流水灯亮灯速度的功能并没有得到实现。将电路板用数据线连接,打开开关,按钮用来切换模式,一共有五种流动方式,每按一次按钮就会有一种方式,并在LED显示器上面显示出该模式的序号。
单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进行工作,即编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。下面我们以最简单的流水灯控制功能即实现8个LED灯的循环点亮,来介绍实现流水灯控制的几种软件编程方法。
位控法
这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,从而来控制相应LED灯的亮灭。程序如下:
ORG
0000H
;单片机上电后从0000H地址执行
AJMP
START
;跳转到主程序存放地址处
ORG
0030H
;设置主程序开始地址
START:MOV
SP,#60H
;设置堆栈起始地址为60H
CLR
P1.0
;P1.0输出低电平,使LED1点亮
ACALL
DELAY
;调用延时子程序
SETB
P1.0
;P1.0输出高电平,使LED1熄灭
CLR
P1.1
;P1.1输出低电平,使LED2点亮
ACALL
DELAY
;调用延时子程序
SETB
P1.1
;P1.1输出高电平,使LED2熄灭
CLR
P1.2
;P1.2输出低电平,使LED3点亮
ACALL
DELAY
;调用延时子程序
SETB
P1.2
;P1.2输出高电平,使LED3熄灭
CLR
P1.3
;P1.3输出低电平,使LED4点亮
ACALL
DELAY
;调用延时子程序
SETB
P1.3
;P1.3输出高电平,使LED4熄灭
CLR
P1.4
;P1.4输出低电平,使LED5点亮
ACALL
DELAY
;调用延时子程序
SETB
P1.4
;P1.4输出高电平,使LED5熄灭
CLR
P1.5
;P1.5输出低电平,使LED6点亮
ACALL
DELAY
;调用延时子程序
SETB
P1.5
;P1.5输出高电平,使LED6熄灭
CLR
P1.6
;P1.6输出低电平,使LED7点亮
ACALL
DELAY
;调用延时子程序
SETB
P1.6
;P1.6输出高电平,使LED7熄灭
CLR
P1.7
;P1.7输出低电平,使LED8点亮
ACALL
DELAY
;调用延时子程序
SETB
P1.7
;P1.7输出高电平,使LED8熄灭
ACALL
DELAY
;调用延时子程序
AJMP
START
;8个LED流了一遍后返回到标号START处再循环
DELAY:
;延时子程序
MOV
R0,#255
;延时一段时间
D1:
MOV
R1,#255
DJNZ
R1,$
DJNZ
R0,D1
RET
;子程序返回
END
;程序结束
-
14
-
