基于51单片机的流水灯系统设计.docx

上传人:b****3 文档编号:3448304 上传时间:2022-11-23 格式:DOCX 页数:23 大小:161.73KB
下载 相关 举报
基于51单片机的流水灯系统设计.docx_第1页
第1页 / 共23页
基于51单片机的流水灯系统设计.docx_第2页
第2页 / 共23页
基于51单片机的流水灯系统设计.docx_第3页
第3页 / 共23页
基于51单片机的流水灯系统设计.docx_第4页
第4页 / 共23页
基于51单片机的流水灯系统设计.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

基于51单片机的流水灯系统设计.docx

《基于51单片机的流水灯系统设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的流水灯系统设计.docx(23页珍藏版)》请在冰豆网上搜索。

基于51单片机的流水灯系统设计.docx

基于51单片机的流水灯系统设计

 

2.1三个模块的阐述

参考文献……………………………………………………………………………………………..17

设计心得体会………………………………………………………………………………………...18

附录……………………………………………………………………………………………………19

 

基于单片机的花样流水灯及其数码显示技术

摘要:

自计算机问世以来,单片机技术在社会各领域中得到了广泛的应用。

在流水灯控制系统中,单片机更是取代了由齿轮调节延迟时间的旧式市发展速度,成为日后此系统中的核心部分。

由于单片机具有一些突出的优点:

体积小、重量轻、电源单一、功耗低;功能强、价格低;数据大都在单片机内部传送,运行速度快、抗干扰能力强、可靠性高,所以单片机被广泛的应用于测控系统、数据采集、智能仪器仪表、机电一体化产品、智能接口、计算机通信以及单片机的多级系统等领域。

本文主要讲的是单片机,课题名称为多按键花样流水灯,它使我们学会了如何使用单片机控制我们日常生活中的多设备设施的应用。

通过本课题的设计以后,使我了解到了单片机的许多方面的应用。

关键词:

花样灯单片机数码管

1.设计思路

(1)为了使设计具有更强的针对性和实用性,使用单片机设计的控制方案,基于AT89C51的单片机设计方案。

(2)确定系统控制的总体设计,包括流水灯变化方案设计以及系统应拥有的各项功能,在这里,本设计除了有流水灯状态控制能实现基本的变化功能,还增加了数码管显示提示。

(3)设计分为3个模块,分别为电源模块,数码显示模块,花样灯模块,并对3个模块进行充分的校正和完善。

(4)进行软件系统的设计,对于本系统,本组采用单片机C语言编写,对单片机内部结构和工作情况做了充足的研究,了解延时原理,总体上完成了软件的编写。

 

2花样流水灯与数码显示系统总体设计

2.1三个模块的阐述

2.1.1电源模块

电源提供的方案

为使模块稳定工作,须有可靠电源。

因此考虑了两种电源方案:

方案一:

采用独立的稳压电源。

此方案的优点是稳定可靠,且有各种成熟

电路可供选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路电平。

方案二:

采用单片机控制模块提供电源。

改方案的优点是系统简明扼要,

节约成本;缺点是输出功率不高。

综上所述,我选择第二种方案。

电源模块仿真效果图1-1

2.1.2显示模块

数码管显示方案

该系统要求完成计数功能。

基于上述原因,我考虑了二种方案:

方案一:

采用数码管显示。

这种方案只显示有限的符号和数码字符,简单,方便。

方案二:

采用点阵式LED显示。

这种方案虽然功能强大,并可方便的显示各种英文字符,汉字,图形等,但实现复杂,且须完成大量的软件工作。

综上所述,我选择第一种方案。

数码管显示模块仿真图1-2:

2.1.3花样灯模块:

本方案采用3种变化形式,且3种方式依次按顺序变化,采用8个LED灯作为一个系统。

花样灯仿真效果图1-3:

 

图1-1

图1-2图1-3

2.2单片机花样流水灯与数码显示系统的通行方案设计

1)系统采用8个LED灯,一个数码显示器,及电源。

2)流水灯有3种变化方式。

第一种:

LED灯由L1---L8逐个变亮;

第二种;L1,L8亮,接着L2,L7亮,再接下来L3,L6亮,然后L4,L5亮,再这样反循环一次。

第三种;L1,L3,L5,L7,L2,L4,L6,L8依次亮。

且三种方式按顺序执行,成花样流水灯状。

3)方式1.2数码显示管是用来记录亮灯的个数,方式3是用来记录哪一个灯亮。

4)具体的数据及其显示如表2-1所示。

2.3单片机花样灯与数码显示系统的功能要求

系统要满足稳定,准确,快速的三个基本要求。

1)稳定:

就是基本上实现了方案设计思路上的变化样式,并且不会出现错误和紊乱。

2)准确;即系统的偏差接近可允许范围之内,方可认为准确。

3)快速:

顾名思义,就是系统的运行速度可以调整,并且不会影响到系统的其他性能指标即可。

2.4单片机花样灯与数码显示系统的基本构成及原理

单片机设计流水灯控制系统,可用单片机直接控制流水灯的状态变化,不同的程序控制不同的变化状态,本次仅仅分为3种形式变化,当然还可以有更多的变化。

据此,本设计系统以单片机为控制核心,连接成最小系统,由按键设置模块产生输入,流水灯模块,数码管显示模块接受输出。

系统的总体框图如上1-4所示。

 

图1-4系统的总体框图

L1

L2

L3

L4

L5

L6

L7

L8

数码管计数

方式1

1

0

0

0

0

0

0

0

1

1

1

0

0

0

0

0

0

2

1

1

1

0

0

0

0

0

3

1

1

1

1

0

0

0

0

4

1

1

1

1

1

0

0

0

5

1

1

1

1

1

1

0

0

6

1

1

1

1

1

1

1

0

7

1

1

1

1

1

1

1

1

8

方式2

1

0

0

0

0

0

1

2

1

1

0

0

0

0

1

1

4

1

1

0

0

0

1

1

1

6

1

1

1

1

1

1

1

1

8

1

1

1

1

1

1

1

1

8

1

1

1

0

0

1

1

1

6

1

1

0

0

0

0

1

1

4

1

0

0

0

0

0

0

1

2

方式3

1

0

0

0

0

0

0

0

1

0

0

1

0

0

0

0

0

3

0

0

0

0

1

0

0

0

5

0

0

0

0

0

0

1

0

7

0

1

0

0

0

0

0

0

2

0

0

0

1

0

0

0

0

4

0

0

0

0

0

1

0

0

6

0

0

0

0

0

0

0

1

8

表2-1

表2-1

3花样灯与数码显示系统的硬件设计

3.1AT89C51单片机简介

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

3.1.1AT89C51单片机的主要特性

与MCS-51兼容,4K字节可编程闪烁存储器,寿命:

1000写/擦循环,数据保留时间:

10年,全静态工作:

0Hz-24Hz,三级程序存储器锁定,128*8位内部RAM,32可编程I/O线,两个16位定时器/计数器,5个中断源(两个外部中断源和3个内部中断源),可编程串行通道,低功耗的闲置和掉电模式,片内振荡器和时钟电路。

定时器原理

定时器工作的基本原理其实就是给初值,让它不断加1直至减完为模值,这个初值是送到TH和TL中的。

它是以加法记数的,并能从全1到全0时自动产生溢出中断请求。

因此,我们可以把计数器记满为零所需的计数值,即所要求的计数值设定为C,把计数初值设定为TC可得到如下计算通式:

TC=M-C

式中,M为计数器模值。

计数值并不是目的,目的是时间值,设计1次的时间,即定时器计数脉冲的周期为T0,它是单片机系统主频周期的12倍,设要求的时间值为T,则有C=T/T0。

计算通式变为:

T=(M-TC)T0

模值和计数器工作方式有关。

在方式0时M为8192;在方式1时M的值为65536;在方式2和3为256。

就此可以算出各种方式的最大延时。

如单片机的主脉冲频率为12MHZ,经过12分频后,若采用方式0最大延时只有8.129毫秒,采用方式1最大延时也只有65.536毫秒。

这就是为什么扫描周期为50ms的原因,

若使用软件则会耽搁程序流程,显然不可行。

相反,时间计时方面却不可能只用计数器,因为显然1秒钟已经超过了计数器的最大定时间,所以我们还必须采用定时器和软件相结合的办法才能解决这个问题。

 

图3AT89C51系列单片机的内部结构示意图

3.1.2主要引脚功能

图4AT89C51引脚图

·VCC:

电源电压

·GND:

接地

·P0口:

P0口是一组8位双向I/0口。

P0口即可作地址/数据总线使用,又可以作为通用的I/O口使用。

当CPU访问片外存储器时,P0口分时先作低8位地址总线,后作双向数据总线,此时,P0口就不能再作I/O口使用了。

在访问期间激活要使用上拉电阻。

·P1口:

Pl是一个带内部上拉电阻的8准位双向I/O口,P1作为通用的I/O口使用。

·P2口:

P2是一个带有内部上拉电阻的8位准双向I/O口,P2即可作为通用的I/O口使用,也可以作为片外存储器的高8位地址总线,与P0口配合,组成16位片外存储器单元地址。

·P3口:

P3口是一组带有内部上拉电阻的8位准双向I/0口。

P3口除了作为通用的I/O口使用之外,每个引脚还具有第二功能,具体分配如表2

表2具有第二功能的P3口引脚

端口引脚

第二功能:

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外部数据存储器读选通)

·RST:

复位输入。

当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

WDT溢出将使该引脚输出高电平,设置SFRAUXR的DISRT0位(地址8EH)可打开或关闭该功能。

DISRT0位缺省为RESET输出高电平打开状态。

·ALE/————PROG:

当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。

即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。

要注意的是:

每当访问外部数据存储器时将跳过一个ALE脉冲。

对F1ash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。

如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。

该位置位后,只有一条M0VX和M0VC指令ALE才会被激活。

此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。

·————PSEN程序储存允许(————PSEN)输出是外部程序存储器的读选通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次————PSEN有效,即输出两个脉冲。

当访问外部数据存储器,没有两次有效的————PSEN信号。

·——EA/VPP:

外部访问允许。

欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。

需注意的是:

如果加密位LB1被编程,复位时内部会锁存EA端状态。

如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。

F1ash存储器编程时,该引脚加上+12V的编程电压Vcc。

·XTAL1:

振荡器反相放大器及内部时钟发生器的输入端。

3.2系统硬件总电路构成及原理

实现本设计要求的具体功能,可以选用AT89C51单片机及外围器件构成最小控制系统,8个发光二极管分成3种变化方式,数码显示管进行计数。

3.2..1系统硬件电路构成

本系统以单片机为核心,系统硬件电路由状态灯,数码管显示,按键,组成。

其具体的硬件电路总图如图1-5所示。

实物图如1-6所示。

3.2..2系统工作原理

先对系统进行初始化,之后再调用子程序入单片机内。

分别控制循环彩灯及其数码管显示模块。

(以上两个模块及其工作方式都已经在上面提到)之后就是对程序的无限循环了,达到3种方式不停循环的目的,可以实现手动关闭。

图1-5基于单片机的流水灯控制系统电路图

图1-6,硬件结构

4系统软件程序的设计

4.1程序主体设计流程

全部控制程序实际上分为若干模块:

键盘设置处理程序,状态灯控制程序,LED显示程序紧停程序等。

整个软件程序、流程图如图1-7所示。

 

 

4.2理论基础知识

4.2.1数组及while,switch,等语句

数组:

所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。

组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。

数组是在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式。

这些按序排列的同类数据元素的集合称为数组。

While语句:

while语句格式为:

while(表达式)

语句;/*循环体*/

这里的表达式是循环能否继续下去的条件,而语句是循环体。

只要表达式为真,则执行循环体内语句。

否则终止循环,执行循环体外语句。

switch语句

switch语句格式为:

switch(表达式)

{

case常量表达式1:

语句1

case常量表达式2:

语句2

.

.

.

case常量表达式n:

语句n

default:

语句n+1

}

说明

switch后面的括号内的表达式,ANSI标准允许为任何类型.

当表达式与某一个case后面的常量表达式相等时,就执行case后面的语句,若没有匹配,则执行default后面的语句.

每一个case的常量表达式的值须互不相同,否则便会出现矛盾.

各个case和default的出现次序不影响结果.

执行完一个case语句,流程就转移到下一个case并继续执行.因此在case的分支后,加break语句来跳出switch语句.

4.2.2软件延时原理

 单片机因具有体积小、功能强、成本低以及便于实现分布式控制而有非常广泛的应用领域[1]。

单片机开发者在编制各种应用程序时经常会遇到实现精确延时的问题,比如按键去抖、数据传输等操作都要在程序中插入一段或几段延时,时间从几十微秒到几秒。

有时还要求有很高的精度,如使用单总线芯片DS18B20时,允许误差范围在十几微秒以内[2],否则,芯片无法工作。

用51汇编语言写程序时,这种问题很容易得到解决,而目前开发嵌入式系统软件的主流工具为C语言,用C51写延时程序时需要一些技巧[3]。

因此,在多年单片机开发经验的基础上,介绍几种实用的编制精确延时程序和计算程序执行时间的方法。

  

  实现延时通常有两种方法:

一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。

单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。

第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。

本程序中假设使用频率为12 MHz的晶振。

最长的延时时间可达216=65 536 μs。

若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。

在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。

使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。

但应该注意,C51编写的中断服务程序编译后会自动加上PUSHACC、PUSHPSW、POPPSW和POPACC语句,执行时占用了4个机器周期;如程序中还有计数值加1语句,则又会占用1个机器周期。

这些语句所消耗的时间在计算定时初值时要考虑进去,从初值中减去以达到最小误差的目的。

4.3程序模块的设计

4.3.1花样灯的设计

case0:

P2=0x10;P0=tableNUM[led_point];

case1:

P2=0x20;P0=tableNUM[led_point];

case2:

P2=0x40;P0=tableNUM[led_point];

case3:

P2=0x80;P0=tableNUM[led_point];

case4:

P2=0x10;P0=tableNUM[led_point];

case5:

P2=0x20;P0=tableNUM[led_point];

case6:

P2=0x40;P0=tableNUM[led_point];

case7:

P2=0x80;P0=tableNUM[led_point];

case8:

P2=0x10;P0=tableNUM[led_point];

case9:

P2=0x20;P0=tableNUM[led_point];

case10:

P2=0x40;P0=tableNUM[led_point];

case11:

P2=0x80;P0=tableNUM[led_point];

case12:

P2=0x10;P0=tableNUM[led_point];

case13:

P2=0x20;P0=tableNUM[led_point];

case14:

P2=0x40;P0=tableNUM[led_point];

case15:

P2=0x80;P0=tableNUM[led_point];

case16:

P2=0x10;P0=tableNUM[led_point];

case17:

P2=0x20;P0=tableNUM[led_point];

case18:

P2=0x40;P0=tableNUM[led_point];

case19:

P2=0x80;P0=tableNUM[led_point];

case20:

P2=0x10;P0=tableNUM[led_point];

case21:

P2=0x20;P0=tableNUM[led_point];

case22:

P2=0x40;P0=tableNUM[led_point];

case23:

P2=0x80;P0=tableNUM[led_point];

4.3.2LED数码管显示

case0:

P1=tableLED[led_point];break;

case1:

P1=tableLED[led_point];break;

case2:

P1=tableLED[led_point];break;

case3:

P1=tableLED[led_point];break;

case4:

P1=tableLED[led_point];break;

case5:

P1=tableLED[led_point];break;

case6:

P1=tableLED[led_point];break;

case7:

P1=tableLED[led_point];break;

case8:

P1=tableLED[led_point];break;

case9:

P1=tableLED[led_point];break;

case10:

P1=tableLED[led_point];break;

case11:

P1=tableLED[led_point];break;

case12:

P1=tableLED[led_point];break;

case13:

P1=tableLED[led_point];break;

case14:

P1=tableLED[led_point];break;

case15:

P1=tableLED[led_point];break;

case16:

P1=tableLED[led_point];break;

case17:

P1=tableLED[led_point];break;

case18:

P1=tableLED[led_point];break;

case19:

P1=tableLED[led_point];break;

case20:

P1=tableLED[led_point];break;

case21:

P1=tableLED[led_point];break;

case22:

P1=tableLED[led_point];break;

case23:

P1=tableLED[led_point];break;

4.4系统软件调试

4.4.1proteus仿真器

仿真的概念其实使用非常广,最终的含义就是使用可控的手段来模仿真实的情况。

单片机系统开发中的仿真包括软件仿真和硬件仿真。

软件仿真这种方法主要是使用计算机软件来模拟实际的单片机运行,因此仿真与硬件无关的系统具有一定的优点。

用户不需要搭建硬件电路就可以对程序进行验证,特别适合于偏重算法的程序。

软件仿真的缺点是无法完全仿真与硬件相关的部分,因此最终还要通过硬件仿真来完成最后的设计;

硬件仿真使用附加的硬件来替代用户系统的单片机并完成单片机全部或大部分的功能。

使用了附加硬件后用户就可以对程序的运行进行控制,例如单步、全速、查看资源断点等。

系统的软件调试借助于proteus仿真器,在进行系统软件的连续调试之前要先进行软件的初调,就是要使各个子程序模块运行正确,程序的运行流程正确。

软件调试主要分以下几个步骤进行:

◆功能子程序的调试。

能子程序的调试包括运算、采样、数字滤波以及PID运算等子程序的调试。

在调试功能子程序时,许多参数都是未知的,要根据其所需的条件,给出假定的数据,使其运行,如果能完成预定的处理功能或与手工计算的结果相符,就说明该子程序己调试通过。

调试时由小到大,由里到外。

例如,调试PID算法子程序时,先调通其包含的各个运算子程序和参数处理子程序,然后将它们连起来进行通调。

通调时,也是假定一些数据、参数和初始条件,然后运行程序。

当运算结果与手工计算的结果相同时,该算法子程序则调试完成,反之,就要进行相应的修改。

其它子程序的调试同理;

◆程序流程的调试。

序流程的调试主要是查看程序运行的步骤是否正确,在某时刻程序运行所处的位置是否正确,是否能正确运行各个中断服务程序。

在调试过程中,先将PID算法子程序屏蔽,输出可控硅导通时间用一个固定的常数代替,在各个中断服务子程序设置断点,然后运行程序,查看程序是否能运行到所有的断点,若所有断点都能运行到,则程序流程基本正确。

去掉所有断点,再一次运行程序,查看可控硅状态,从而判断程序流程正确,反之,若程序流程不正确,做相应的修改后,重新调试;

◆功能程序与算法程序的通调。

完成整个程序流程的调试后,将PID等算法子程序加入,在算法子程序前或后设置断点,运行整个程序。

当程序在断点处暂停时,查看PI

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1