当前位置:文档之家› 单片机流水灯

单片机流水灯

单片机流水灯
单片机流水灯

目录

摘要 (2)

1引言 (3)

1.1设计目的 (3)

1.2设计任务 (3)

1.3设计要求 (3)

1.4设计方法 (4)

2设计内容及所用器件 (4)

2.1基本功能 (4)

2.2系统清单 (4)

3系统硬件设计 (5)

3.1AT89C51 (5)

3.2单片机时钟电路 (10)

3.3单片机复位电路 (11)

4系统软件设计 (11)

4.1Proteus软件环境介绍 (11)

4.2程序路程图 (13)

5系统调试过程 (14)

5.1原理图 (14)

5.2keil c51 程序检测图 (15)

6仿真结果图 (16)

7流水灯源代码程序 (17)

8总结 (19)

9参考文献 (20)

摘要:当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活还是学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且比较容易出错。计算器作为一种快速通用的计算工具方便了用户的使用。计算器可谓是我们最亲密的电子伙伴之一。本设计着重在于分析计算器软件可开发过程中的环节和步骤,并从时间经验出发对计算器设计做了详细的分析和研究。

单片机由于其微小的体积和极低的成本,广泛的应用于家电、

工业控制等领域中。

本系统基于at89c51系列单片机为核心的led流水灯的设计,实现8个led的变化方向。

关键词:单片机流水灯

1 引言

1.1设计目的

通过本次项目设计,应用所学相关知识资料,来完成简易计算器的设计,以达到理论与实际更好相结合进一步提高综合运用所学知识和设计能力的目的。通过本次设计的训练,可以使我在基本思路和基本方法上对基于51 单片机的嵌入式系统有一个比较感性的认识,并具备一定程度的设计能力。

通过本次设计的训练,可以使自己基本思路和基本方法上对at89c51单片机嵌入式系统设计有一个比较感性的认识,并具有一定的设计能力。

1.2设计任务

1、根据总体要求设计总体方案。

2、绘制硬件电路原理图。

3、画出软件流程图。

4、编写软件源代码(必须有注释)。

5、在Proteus软件环境下仿真运行。

6、编写符合学院要求的课程设计说明书。

1.3 设计要求

设计一个流水灯控制器,在拨动开关K1=0时,8个led的亮灭顺序是1、2、3、4、5、6、7、8,当拨动开关K1=1时,8个led的亮灭顺序是8、7、6、5、4、3、2、1,开关K2可以随时停止流水灯的运行。

1.4 设计方法

本流水灯实际就是带有八个发光二极管的单片机最小应用系统,即为发光二极管、复位电路、晶振电路等电路和必须的软件组成的单个单片

机应用系统。如果让接在P1口的led点亮或熄灭只需根据LED灯的共阳极或共阴极接法相应的置0或置1即可。

对于LED的流向问题只需单片机检测到的端口电压阈值进行软件编程即可。

2设计内容及所用器件

2.1基本功能

利用at89c51作为主控单元,组成流水灯电路,实现8个LED的动态流动。K1控制LED的亮灭方向,K2控制流水灯的随时启动与停止。

2.2元件清单

元件名称型号数量/个用途

单片机At89c51 1 控制核心

晶振12MHz 1 晶振电路

电容30uf 2 晶振电路

电阻10k 1 复位电路

电阻1k 1 复位电路

电源5v 1 提供电源

开关switch 2 提供信号

电容10uf 1 复位电路LED灯Led-bule 8 显示电路

3 系统硬件设计

3.1AT89c51简介

AT89c51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,AT89c51在众多嵌入式控制应用系统中得到广泛应用。

AT89C51有40个引脚,4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激

活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。

AT89C51为40引脚双排列直插封装的8位通用微处理器。采用工业标准c51内核,在功能与引脚排布上与8xc51相同,其主要用于调整时间的功能控制,功能包括主IC内部寄存器数据RAM及外部接口等功能等部件的初始化。会聚调整控制,会聚测试图控制,红外遥感信号IR的接受解码及主板CPU的通信等。主要管脚有xta1(19脚)和xta2(18脚)为震荡器输出输入端口,外接12MHz的晶振。电源引脚 Vcc(40脚):典型值+5V。Vss(20脚):接低电平。输入输出口引脚: P0口:I/O双向口。作输入口时,应先软件置“ 1”。P1口:I/O双向口。作输入口时,应先软件置“ 1”。P2口:I/O双向口。作输入口时,应先软件置“ 1”。P3口:I/O双向口。作输入口时,应先软件置“ 1”。控制引脚:RST、ALE/-PROG、-PSEN、-EA/Vpp组成了MSC-51的控制总线。 RST(9脚):复位信号输入端(高电平有效)。ALE/-PROG(30脚):地址锁存信号输出端。第二功能:编程脉冲输入。-PSEN(29脚):外部程序存储器读选通信号。-EA/Vpp(31脚):外部程序存储器使能端。第二功能:编程电压输入端(+21V)。

P0口:是一个8位漏极开路输出型双向I/O端口。作为输出端口时,每位能以吸收电流的方式驱动8 个TTL输入,对端口写1时,又可作高阻抗输入端用。在访问外部程序或数据存储器时,它是时分多路转换的地址(低8位)/数据总线,

在访问期间将激活内部的上拉电阻。

P1口:P1口是一个带有内部上拉电阻的8位双向I/O端口。P1口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可作输入口。P2口作输入口使用时,因为内部有上拉电阻,那些被外部信号拉低的引脚会输出一个电流(Iil)。

P2口:P2口是一个带有内部上拉电阻的8位双向I/O端口。P2口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可作输入口。P2口作输入口使用时,因为内部有上拉电阻,那些被外部信号拉低的引脚会输出一个电流(Iil)。在访问外部程序存储器时和16位外部地址的外部数据存储器(如执行 MOVX @DPTR)时,P2口送出高8位地址。在访问8位地址的外部数据存储器(如执行 MOVX @RI)时,P2口引脚上的内容(就是专用寄存器(SFR)区中的P2寄存器的内容),在整个访问期间不会改变。

P3口:P3口是一个带有内部上拉电阻的8位双向I/O端口。P3口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可作输入口。P3口作输入口使用时,因为内部有上拉电阻,那些被外部信号拉低的引脚会输出一个电流(Iil)。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

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:片内振荡器反相放大器的输出端。当使用片内振荡器时,该引脚连接外部石英晶体和微调电容;当采用外部时钟源时,该引脚悬空。时钟振动电路器

AT89S51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别为该反向放大器的输入端和输出端。这个反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器。

外接石英晶体(或陶瓷谐振器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度稳定性。如果使用石英晶体,电容应该使用30pF 10pF。还可以使用外部时钟。这种情况下,外部时钟脉冲接XTAL1端,即内部时钟发生器的输入端, XTAL2应悬空。

由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大低电平持续时间应符合产品技术条件的要求。

3.2单片机时钟电路

时钟电路用于产生单片机工作需要的时钟信号,单片机本身就是一个非常复杂的时序逻辑电路为了保证同步工作方式的实现,电路应在唯一的时钟信号的控制下严格按时序进行。在at89c51内部有一个高增益反相放大器其输入端为芯片引脚x1,输出端引脚为芯片x2,在芯片外部

接晶振和微调电容形成反馈电路,构成自激振荡器。此电路采用12MHz 的石英晶体,电路图如下图所示:接晶振和微调电容形成反馈电路,构成自激振荡器。此电路采用12MHz的石英晶体,电路图如下图所示:

3.3单片机复位电路

手动按钮复位需要人为在复位输入端RST上加入高电平一般采用的办法是在RST端和正电源Vcc之间接一个按钮。当人为按下按钮时,Vcc的+5V 电平就会直接加到RST端。复位电路图如下图所示:

4系统软件软件设计

4.1Proteus仿真软件环境介绍

3.2、系统框图

开始

读入四个开关的状态

判断开关状态

判断方向键状态

灯流动向右运行灯灭

灯流动运行或全亮

全灭

5系统调试过程

通过上面的硬件设计和软件设计设计工作应基本完成接下来的工作就是对系统的设计进行调试。

5.1原理图

5.2 keil uvision2程序检测图

6仿真结果

7流水灯源代码

#include //51单片机头文件

#define uchar unsigned char //将uchar 定义为unsigned char

#define uint unsigned int //将 uint 定义为unsigned

int

void delay(uint); // 声明延时函数

sbit key=P3^2;//将P3.2的值赋予key

uint i; //定义变量i的类型

uchar temp;//定义变量temp的类型

void main(void) //无返回值主函数

{while(key==0) //while 循环当key值为0跳出循环

{

temp=0xff;//将temp赋值为0xff

for(i=0;i<9;i++) //for循环每循环一次变量i自加1直到i等于8

{ P1=~temp; //将temp按位取反后赋值于P1

delay(100);//调用延时函数

temp<<=1; }//对temp进行左移位运算

delay(100);//调用延时函数

temp=0xff;//对temp赋值0xff

for(i=0;i<9;i++)// for循环

{ P1=temp; //将temp的值赋予P1

delay(100);//调用延时函数

temp<<=1; }//对temp进行左移位运算

delay(100);}//调用延时函数

while(key==1)// while 循环当key值为1跳出循环 {

temp=0xff;// 将temp赋值为0xff

for(i=0;i<9;i++) //for循环

{ P1=~temp; //将temp进行按位取反后赋予P1 delay(100);//调用延时函数

temp>>=1;}// 对temp进行右移位运算

delay(100);//调用延时函数

temp=0xff;// 将temp赋值为0xff

for(i=0;i<9;i++) //for循环

{ P1=temp; //将temp的值赋予P1

delay(100);//调用延时函数

temp>>=1; }//对temp进行右移位运算

delay(100);}}//调用延时函数

void delay(uint t) //定义延时子函数

{ register uint bt; // 定义bt类型

for(;t;t--) //for循环与下面构成嵌套循环

for(bt=0;bt<255;bt++); //子for循环

8总结

通过一段时间的学习和努力,我顺利的完成了单片机课程实验设计,这是一个磨砺意志的过程。从课题到仿真经历了许多困难,但重要的是在其中得到很大的锻炼。一方面通过c51单片机等一些器件的设计让我学习和掌握了单片机技术的基础知识和技术要点也是许多已学过的知识得以运用,另一方面在Proteus的环境下进行仿真让我掌握了许多计算机仿真技术。当然这是一个不断尝试不断修改,才能完成的过程。使我受益匪浅更明确了自己的方向。我不仅学到了关于单片机技术方面的许多专业知识,同时也让我感觉到团队合作的重要性。其实如何有效和快速的找到资料也是课设给我的启发,利用好图书馆和网络,是资源的到最好的利用。与他人交流思想是取得成功的关键,在交流中,不仅强化了自己原有的知识体系,也扩展了自己的思维。课设是一个通过思考、发问、自己解惑并动手、提高的过程。我会在以后的学习中不断学习,积累经验,完善自己。

对于这次单片机课程设计不仅巩固了以前所学过的知识,而且学到了很多在书本上没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,例如对以前所学过的知识理解得不够深刻,掌握得不够牢固,学习了单片机C语言。

这里我要感谢实验室的指导老师,没有老师的细致讲解和耐心的检查,也就没有我的计算器出来,非常感谢!

9参考文献

1.张毅刚.单片机原理及应用[M]. 北京:高等教育出版社,2010 2.皮大能.单片机课程设计指导书[M].北京:北京理工大学出版社,2010

3.肖婧.单片机系统设计与仿真:基于Proteus[M].北京:北京航空航天大学出版社,2010

4.马忠梅.单片机的C语言应用程序设计(第5版)[M].北京:北京航空航天大学出版社,2013

相关主题
文本预览
相关文档 最新文档