描述
<p>* 简要介绍作品:</p>
<p>此项目为基于ATC89C52RC单片机的流水灯设计。本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。</p>
<p>* 一、作品详情;</p>
<p>如图所示,为8位流水灯:
<img src="//image.lceda.cn/pullimage/2d83z3l4fsecPRmYGmZk4HV870dMJH4W43Z2qutA.png" alt="image.png"></p>
<p>首先8个流水灯逐个从左到右逐次点亮,然后熄灭,再依次从右到左逐次点亮。然后用左移循环函数使:左边第一个起分别每一个点亮,其他熄灭,用右移循环函数使:右边第一个起分别每一个点亮,其他熄灭。
控制前四个与后四个逐次发光,然后间隔四个发光,实现流水灯循环。详细见视频。</p>
<p>* 二、描述作品所面临的挑战及所解决的问题;</p>
<p>(1)存在虚焊的问题,用万用表进行测试找出问题,重新焊接;
(2)程序编译出错,存在语法问题;
(3)延时时间太少,看不出闪烁效果,增加延时时间;
(4)左移循环函数和右移循环函数位出现混乱,仿真调试做出问题并解决;
(5)对程序设计有了初步的了解,有了电子设计的基础;</p>
<p>* 三、描述作品硬件、软件部分涉及到的关键点;</p>
<p>硬件原理图如图所示:
<img src="//image.lceda.cn/pullimage/koaIdczfCGh3kskxI9NAEf4FMAV2Mth28tqC6ldr.png" alt="image.png">
从硬件原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,要实现流水灯功能,我们只要将发光二极管LED1~ LED8依次点亮、熄灭,8只LED灯便会一亮-暗的做流水灯 了。</p>
<p>3.2软件部分</p>
<p>Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编 , PLM 语言和 C 语言的程序设计,界面友好,易学易用。它可以结合 proteus软件可以实现单机仿真。对于初学者的需求基本能得到满足。而对于所需电路图的绘制则需要专用的 protel 软件的支持它也是个功能全面的软件。所以学好单片机首先要熟悉上面提到的几种软件。以便于理论与实践的真正结合。用 protel 软件的主要注意的是对各图标代码的熟悉。一提高绘画速度。 Keil C51 软件主要是对程序的编写要准确。 编写程序控制单片机管脚电平的高低变化,来实现发光极管的亮灭。 软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。下面我们以最简单的流水灯控制功能即实现8个LED灯的循环点亮,来介绍实现流水灯控制的几种软件编程方法。</p>
<p>3.2.1 位控法</p>
<p>采用顺序程序结构, 用位指令控制 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 点亮基于单片机的流水灯控制系统 5
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,</p>
<h1>255;延时一段时间</h1>
<p>D1:MOV R1,#255
DJNZ R1,$
DJNZ R0,D1
RET;子程序返回END;程序结束</p>
<p>3.2.2 循环移位法</p>
<p>利用循环移位指令, 采用循环程序结构进行编程。 在程序一开始就给 P1口送一个数,这个数本身就让 P1.0先低,其他位为高,然后延时一段时间,再让这个数据向高位移动,然后再输出至 P1口,这样就实现“流水”效啦。由于 51 系列单片机的指令中只有对累加器 ACC 中数据左移或右移的指令,因此实际编程中我们应把需移动的数据先放到 ACC 中,让其移动,然后将 ACC 移动后的数据再转送到 P1 口,这样同样可以实现“流水”效果。具体编程如下所示</p>
<p>ORG 0000H;单片机上电后从0000H地址执行
AJMP START;跳转到主程序存放地址处
ORG 0030H;设置主程序开始地址
START:MOV SP,#60H;设置堆栈起始地址为60H
MOV A,#0FEH;ACC中先装入LED1亮的数据(二进制的
11111110)
MOV P1,A;将ACC的数据送P1口
MOV R0,#7;将数据再移动7次就完成一个8位流水过程
LOOP: RL A;将ACC中的数据左移一位
MOV P1,A;把ACC移动过的数据送p1口显示
ACALL DELAY;调用延时子程序
DJNZ R0,LOOP;没有移动够7次继续移动
AJMP START ;移动完 7 次后跳到开始重来, 以达到循环流动效果
DELAY:;延时子程序
MOV R0,延时一段时间
D1:MOV R1,#255
DJNZ R1,$
DJNZ R0,D1
RET;子程序返回
END;程序结束</p>
<p>3.2.3查表法</p>
<p>上面的两个程序都是比较简单的流水灯程序, “流水” 花样只能实现单一的 “从左到右”流方式。运用查表法所编写的流水灯程序,能够实现任意方式流水,而且流水花样无限,只要更改流水花样数据表的流水数据就可以随意添加或改变流水花样,真正实现随心所欲的流水灯效果。 我们首先把要显示流水花样的数据建在一个以 TA B 为标号的数据表中, 然后通过查表指令“ MOVC A ,@A+DPTR ”把数据取到累加器 A 中,然后再送到 P1 口进行显示。具体源程序如下, TAB 标号处的数据表可以根据实现效果的要求任意修改。</p>
<p>ORG 0000H;单片机上电后从0000H地址执行
AJMP START;跳转到主程序存放地址处
ORG 0030H;设置主程序开始地址
START:MOV SP,#60H;设置堆栈起始地址为60H
MOV DPTR,# TAB;流水花样表首地址送DPTR
LOOP: CLR A ;累加器清零基于单片机的广告灯控制系统 7
MOVC A,@A+DPTR;取数据表中的值
CJNE A,#0FFH,SHOW;检查流水结束标志
AJMP START;所有花样流完,则从头开始重复流
SHOW:MOV P1,A;将数据送到P1口
ACALL DELA Y;调用延时子程序
INC DPTR;取数据表指针指向下一数据
AJMP LOOP;继续查表取数据
DELAY:
MOV R0,#255;延时一段时间
D1:MOV R1,#255
DJNZ R1,$
DJNZ R0,D1
RET;子程序返回
TAB:;下面是流水花样数据表,用户可据要
求任意编写
DB 11111110B ;二进制表示的流水花样数据,从低到高左移
DB 11111101B
DB 11111011B
DB 11110111B
DB 11101111B
DB 11011111B
DB 10111111B
DB 01111111B
DB 01111111B ;二进制表示的流水花样数据,从高到低右移
DB 10111111B
DB 11011111B
DB 11101111B
DB 11110111B
DB 11111011B
DB 11111101B
DB 11111110B
DB 10000001B
DB 0FEH,0FDH,0FBH,0F7H ;十六进制表示的流水花样数据基于单片机的流水灯控制系统 8
DB 0EFH,0DFH,0BFH,7FH
DB 7FH,0BFH,0DFH,0EFH
DB 0F7H,0FBH,0FDH,0FEH
DB 0FFH;流水花样结束标志0FFH
END;程序结束</p>
<p>* 四、作品材料清单;</p>
<p>AT89C52RC单片机 1个;
12M晶振 1个;
22PF电容 2个;
1k电阻 1 个;
10uF电容 1个;
排阻A102J 1个;
LED灯 8个;</p>
<p>* 五、作品图片上传;(PCB上须有大赛logo标识并拍照上传,若无视为放弃参赛)</p>
<p><img src="//image.lceda.cn/pullimage/4KU5d6s1dpio5YoQfszKXhJ19GKyDvXzvvyB8Jj5.png" alt="image.png"></p>
<p>* 六、演示您的作品并录制成视频上传;(视频内容须包含:作品介绍;功能演示;性能测试;PCB上大赛logo标识特写镜头,若无视为放弃参赛)</p>
<p>见附件上传</p>
<p>七、开源文档。</p>
评论(1)