led闪烁小灯.docx

上传人:b****7 文档编号:23463432 上传时间:2023-05-17 格式:DOCX 页数:23 大小:556.08KB
下载 相关 举报
led闪烁小灯.docx_第1页
第1页 / 共23页
led闪烁小灯.docx_第2页
第2页 / 共23页
led闪烁小灯.docx_第3页
第3页 / 共23页
led闪烁小灯.docx_第4页
第4页 / 共23页
led闪烁小灯.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

led闪烁小灯.docx

《led闪烁小灯.docx》由会员分享,可在线阅读,更多相关《led闪烁小灯.docx(23页珍藏版)》请在冰豆网上搜索。

led闪烁小灯.docx

led闪烁小灯

湖南人文科技学院

课程设计报告

课程名称:

单片机原理及应用课程设计

 

设计题目:

闪烁LED小灯的设计

系别:

通信与控制工程系

专业:

自动化专业

班级:

06级自动化

(二)班

学生姓名:

徐欣灯

学号:

06421210

起止日期:

2009年6月8日~2009年6月19日

指导教师:

伍铁斌曹锋

教研室主任:

伍铁斌

指导教师评语:

 

指导教师签名:

年月日

成绩评定

项目

权重

成绩

1、设计过程中出勤、学习态度等方面

0.2

2、课程设计质量与答辩

0.5

3、设计报告书写及图纸规范程度

0.3

总成绩

教研室审核意见:

 

教研室主任签字:

年月日

教学系审核意见:

 

主任签字:

年月日

摘要

介绍一种LED小灯控制系统的设计方法,以AT-89C52单片机作为主控核心,与按键、排阻、电阻、电容等较少的辅助硬件电路相结合,利用软件实现对LED灯进行控制。

本系统具有体积小、硬件少、电路结构简单及容易操作等优点。

能够通过按键控制8个led小灯轮流点亮、逐点点亮、间隔点亮、来回点亮、两边向中间同时点亮。

广泛应用于城市景观、风景名胜、道路桥梁、建筑轮廓、娱乐场所、户外广告、室内装饰等美化、亮化工程。

关键词:

LED流水灯,AT89C52单片机,led流水灯,模块设计,流程图

 

闪烁LED小灯的设计

设计要求

主要功能:

本设计的闪烁小灯控制器,可使小灯轮流点亮,可使小灯轮流点亮、逐点点亮、间隔点亮,通过按键来进行切换。

扩展部分:

来回点亮、一个点亮两次轮流点亮、两边的等同时向中间点亮也可用按键来切换。

1方案论证与对比

 从原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。

因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。

在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。

  单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进行工作,即编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。

下面以最简单的流水灯控制功能即实现8个LED灯的循环点亮,来介绍实现流水灯控制的几种软件编程方法。

1.1方案一

位控法

这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,从而来控制相应LED灯的亮灭。

只要循环执行下面的程序就可以了,想要哪个灯亮就对对应的哪个输出口输出低电平。

要实现按键切换流水花样,则可以用调用一个中断程序处理。

其置位程序如下:

 

  CLR    P1.0              ;P1.0输出低电平,使LED1点亮

  ACALL DELAY         ;调用延时子程序

SETB  P1.0            ;P1.0输出高电平,使LED1熄灭

1.2方案二

循环移位法

  在上个程序中我们是逐个控制P1端口的每个位来实现的,因此程序显得有点复杂,下面我们利用循环移位指令,采用循环程序结构进行编程。

我们在程序一开始就给P1口送一个数,这个数本身就让P1.0先低,其他位为高,然后延时一段时间,再让这个数据向高位移动,然后再输出至P1口,这样就实现“流水”效果啦。

由于8051系列单片机的指令中只有对累加器ACC中数据左移或右移的指令,因此实际编程中我们应把需移动的数据先放到ACC中,让其移动,然后将ACC移动后的数据再转送到P1口,这样同样可以实现“流水”效果。

具体编程如下所示,程序结构确实简单了很多。

  原理框图如图2所示。

主程序

  

N

Y

NY

图2方案二系统方框图

1.3方案三

查表法

      上面的两个程序都是比较简单的流水灯程序,“流水”花样只能实现单一的“从左到右”流方式。

运用查表法所编写的流水灯程序,能够实现任意方式流水,而且流水花样无限,只要更改流水花样数据表的流水数据就可以随意添加或改变流水花样,真正实现随心所欲的流水灯效果。

我们首先把要显示流水花样的数据建在一个以TAB为标号的数据表中,然后通过查表指令“MOVC A,@A+DPTR”把数据取到累加器A中,然后再送到P1口进行显示。

具体源程序如下,TAB标号处的数据表可以根据实现效果的要求任意修改。

ORG0000H;伪指令,指定程序从0000H开始存放

LJMPMAIN;跳转指令,程序跳转至MAIN处执行

ORG0030H;伪指令,指定程序从0030H开始存放

MAIN:

MOVSP,#60H;给堆栈指针赋初值

MOVP1,#0FFH;给P1口赋值

MOVDPTR,#TABLE;查表

LIGHT:

MOVR4,#42;设置循环次数

LOOP:

MOVA,#42;给A赋初值

SUBBA,R4;将A的值与R4的值相减,结果存在A中

MOVCA,@A+DPTR;将A+DPTR的值所对应的TABLE中的值赋给A

MOVP1,A;将A的值赋给P1口

LCALLDEL1S;调用1S延时子程序

DJNZR4,LOOP;判断R4是否为0,不为0跳转,为0顺序执行

LJMPLIGHT;跳转指令,跳转至LIGHT处继续执行

DEL1S:

MOVR5,#2;1S延时子程序(11.0592MHz晶振,误差0微秒)

DL1S0:

MOVR6,#255

DL1S1:

MOVR7,#255

DJNZR7,$

DJNZR6,DL1S1

DJNZR5,DL1S0

RET

TABLE:

;定义表格数据

DB0FFH;全灭

DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH;依次逐个点亮

DB0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,000H;依次逐个叠加

DB080H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH;依次逐个递减

DB07FH,0DFH,0F7H,0DFH,0BFH,0EFH,0FBH,0FEH;间隔点亮

DB07EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,07EH;两边靠拢后分开

DB07EH,03CH,018H,000H,000H,018H,03CH,07EH;两边叠加后递减

DB000H;全亮

END;程序结束指令

原理框图如图3所示:

 

图3方案三系统方框图

1.4方案对比与选择

以上方案中,位控法思维简单明了但程序过长,不适合编写。

循环移位法简短,且实现以上功能方便。

查表法可随心所欲实现流水灯的花样变化,但要实现按键也是一种麻烦事。

显然用第二种循环移位法最合适。

2延时子程序的计算

延时子程序的延时计算问题

对于程序

        Delay:

movr5,#2

Dz1:

movr7,#250

Dz2:

movr6,#250

djnzr6,$

djnzr7,Dz2

djnzr5,Dz1

ret

查指令表可知MOV,DJNZ指令均需用两个机器周期,而一个机器周期时间长度为12/11.0592MHz,所以该段程序执行时间为:

{[(1+250×2)×250+250×2]×2+2×2+2}×12÷11.059200=272.9mS

2.1原理图的设计

根据设计要求其原理图如图4所示:

图4放大电路原路图

上电后系统经过初始化,查询是否有功能切换键按下:

有,则进入用户设定模式状态;无,则继续进行原来的运行状态。

在用户设定模式状态下,用户可以根据个人爱好及不同场合的需要来指定调用哪些模式,如果用户想进入下一种状态模式,只需按一下功能切换键即可跳入下一种状态模式,程序会跳到下一种亮灯模式;在默认工作状态下,LED小灯控制器按照程序设定好的若干亮灯花样模式程序Model_i一直运行下去,如果想进入用户设定模式程序Model_i+1状态,只需按下功能切换键即可。

2.2分频控制电路设计

单片机。

电路如图7示:

序号

花型

(一)

花型

(二)

花型

(三)

花型(四)

1

01111111

00010001

10001000

00011000

2

10111111

00110011

11001100

00111100

3

11011111

01110111

11101110

01111110

4

11101111

11111111

11111111

11111111

5

11110111

11101110

01110111

11100111

6

11111011

11001100

00110011

11000011

7

11111101

10001000

00010001

10000001

8

11111110

00000000

00000000

00000000

图7CD4051分频控制电路

花型

(一):

前一个移存器的s1为0,s0为1。

前4个节拍右移置入1,后4个节拍右移置入0。

另一个移存器的s1为0,s0为1,前4个节拍右移置入1,后4个节拍右移置入0。

花型

(二):

前一个移存器的s1为0,s0为1。

前4个节拍右移置入1,后4个节拍右移置入0。

后一个移存器的s1为1,s0为0,前4个节拍左移置入1,后4个节拍左移置入0。

花型(三):

前一个移存器的s1为1,s0为0,前4个节拍左移置入1,后4个节拍左移置入0。

后一个移存器的s1为0,s0为1,前4个节拍右移置入1,后4个节拍右移置入0。

花型(四):

前一个移存器的s1为1,s0为0,前4个节拍左移置入1,后4个节拍左移置入0。

后一个移存器的s1为1,s0为0,前4个节拍左移置入1,后4个节拍左移置入0。

 

3系统软件工作流程图

3.1多周期同步测量原理及误差分析

原理如图8所示。

 

图8多周期测频原理

被测信号。

3.2运行和调试

当上述程序之一编写好以后,我们需要使用编译软件对其编译,得到单片机所能识别的二进制代码,然后再用编程器将二进制代码烧写到AT89C52单片机中,最后连接好电路通电,我们就看到LED1~LED8的“流水”效果了。

本文所给程序实现的功能比较简单,旨在抛砖引玉,用户可以自己在此基础上扩展更复杂的流水灯控制,比如键盘控制流水花样等等。

本次设计测频采用。

图9测频原理

被测信号。

程序流程图如图10所示:

主程序

  

N

Y

NY

 

图10软件系统流程图

4详细仪器清单

表格2仪器清单

序号

类型

数量

1

PCB板

1块

2

1000UF电容

2个

3

22UF电容

1个

4

30PF电容

4个

5

发光二极管

10个

6

三位数码管

2个

7

三极管9015

8个

8

带锁开关

1个

9

三孔接线座

2个

10

轻触开关

19个

11

USB接口

1个

12

IN4001

4个

13

蜂鸣器

1个

14

7805

1个

15

DC座

1个

16

680Ω电阻

8个

17

1K电阻

17个

18

1K排阻

1个

19

2K电阻

5个

20

10欧电阻

1个

21

ADC0809芯片

1片

22

3V电池座

1个

23

IC插座20脚

1个

24

IC插座16脚

1个

25

2脚排针

15个

26

3脚单排

1个

27

跳帽

8个

28

3V电池

1个

29

电源适配器

1个

30

串口线

1根

31

9针串口座

1个

32

9针串口盖

1个

 

5总结与思考及致谢

为期两周的单片机课程设计已经接近尾声了。

记得刚拿到设计课题时,觉得这个题目太简单了,不就是一个花样流水灯吗!

非常熟悉的东西啊。

可是当真正投入设计时,很多问题出来了。

在这次设计中遇到的问题及解决方法:

(1)在实现流水灯的功能时,时钟是不能停止的,否则显示的时间就会不正确。

因此我们使时钟的中断优先级高于秒表的优先级,在执行跑表程序时,会被时钟中断程序中断,但这会使跑表的时间产生误差,这是不可避免的,因为单片机每次只能执行一个任务,所以我们只能尽量减少误差。

解决的方法:

使时钟的中断周期大于跑表的中断周期(时钟每中断一次为125ms,跑表每中断一次为100ms),这样误差会相对减少些。

(2)单片机口线不够(在该次设计为简单起见中没有扩展I/O口),造成口线不够的原因是,译码显示电路设计不合理。

起初我采用的译码显示块是不带锁存功能的,所以要接锁存芯片,从而造成了口线的浪费。

后来我采用了CD4511,它是集锁存、译码、驱动功能于一体的。

这样就节省了很多I/O口。

(3)程序调试时也出现了许许多多的问题,虽然程序本身的问题不大,但由于粗心录入程序时,将程序敲错,比如将0(零)和字母O混淆,还有中文标点符号和英文标点符号混淆等。

这样的错误很难发现,以至于花费了很多时间。

通过本次课程设计,不仅使我将课本上学到的理论知识的到了实践,从而巩固了知识。

还使我了解了一个完整的系统是怎样开发的。

也了解到单片机的强大功能,同时也知道在开发系统时基础知识的重要性。

同时也感谢老师给我们这样好的机会来学习单片机。

参考文献

[1]朱定华,戴汝平.单片微机原理与应用.(M)北京:

清华大学出版社,2003

[2]张鑫,单片微机原理与应用。

北京,电子工业出版社,2005.8

[3]徐煜明,韩雁.单片机原理及接口技术[M].北京:

电子工业出版社,2005.1

[4]万光毅,严义,邢春香.单片机实验与实践教程[M].北京:

北京航空航天大学出版社,2006.4

[5]蔡明文,冯先成,.单片机课程设计.武汉:

华中科技大学出版社,2007.3

 

附录一:

89c52芯片

附录二:

89c52的PCB板图

附录三:

程序

org0000h

start:

movr2,#0

movr4,#0feh

movr3,#0feh

movr1,#0

movp1,#0FFh

start1:

ljmpj28

jbp3.3,j20

acallrelay

j20:

jnbp3.3,jjj

cjner2,#1,j21

j21:

jcj1

cjner2,#2,j22

j22:

jcj2

cjner2,#3,j23

j23:

jcj3

cjner2,#4,j24

j24:

jcj4

cjner2,#5,j25

j25:

jcj5

cjner2,#6,j27

j27:

jcj28

jjj:

incr2

cjner2,#6,$+3

jcj10

movr2,#0

j10:

jnbp3.3,$

jmpstart1

j1:

movp1,r3

acallrelay

mova,r3

rra

movr3,a

jmpstart1

j2:

movp1,r3

acallrelay

jnbp1.0,j9

mova,r3

rra

movr3,a

jmpstart1

j9:

movp1,r3

acallrelay

jnbp1.7,j2

mova,r3

rla

movr3,a

jmpj9

j3:

movp1,r3

acallrelay

jnbp1.0,j8

jnbp1.1,j7

mova,r3

rra

rra

movr3,a

jmpstart1

j8:

mova,r3

rra

movr3,a

jmpstart1

j7:

mova,r3

rra

rra

rra

movr3,a

jmpstart1

j4:

movp1,0ffh

acallrelay

movp1,r3

acallrelay

movp1,0ffh

acallrelay

movp1,r3

acallrelay

jnbp0.0,j6

mova,r3

rra

movr3,a

j6:

jmpstart1

j5:

mova,r1

movdptr,#tab

movca,@a+dptr

movp1,a

acallrelay

acallrelay

incr1

cjner1,#8,j26

j26:

jcj11

movr1,#0

jmpstart1

j28:

mova,r4

movp1,a

acallrelay

mova,r4

jnzj29

movr4,0feh

ljmpj11

j29:

rla

anla,r4

movr4,a

j11:

jmpstart1

tab:

db7eh,0bdh,0dbh,0e7h,0e7h,0dbh,0bdh,7eh

relay:

movr5,#2

j217:

movr7,#250

j:

movr6,#250

djnzr6,$

djnzr7,j

djnzr5,j217

ret

end

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

当前位置:首页 > 经管营销 > 经济市场

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

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