谁会做流水灯电路图 为8个灯 其发光顺序依次为:

发光二极管流水灯制作实验报告_中华文本库
第1页/共1页
文本预览:
发光二极管流水灯制作
一、实验目的 1.学习单片机软硬件系统的设计方法。 2.学习用 Protel 绘制原理图和 PCB。学习单片机电路制作和调试方法。 二、电路工作原理 三、软件设计 四、制作与调试 1.绘制原理图 2.绘制 PCB 图 3.制作印制板 4.烧写程序与调试
第1页/共1页
寻找更多 ""八只LED灯做流水灯实验
文章搜索:
深圳单片机开发网
联系电话:6
邮编:518000
联系人:严先生
公司地址:广东省深圳市龙岗区布吉镇罗岗工业区京南路105号锦龙大厦706
八只LED灯做流水灯实验
添加者:管理员&&添加日期: 21:14:12
八只LED灯做流水灯实验
第一节:单片机在上电初始后,其各端口输出为高电平。如果我们现在想让接在P1.0口的LED1亮,那么我们只要把P1.0口的电平变为低电平就可以了。想让LED1灭,LED0亮,只需将P1.0升高,P1.1变低,LED1就熄灭LED2随后既点亮!依始类推如下所示8只LED变会一亮一暗的做流水灯了。
P1.0低、P1.0高、P1.1低、P1.1高、P1.2低、P1.2高、P1.3低、P1.3高、P1.4低、P1.4高、P1.5低、P1.5高、P1.6低、P1.6高、P1.7低、P1.7高、返回到开始、程序结束。
我们不能说P1.1你变低,它就变低了。因为单片机听不懂我们的汉语的,只能接受二进制的“1、0......”代码。我们又怎样来用二进制语议论使单片机按我们的意思去工作呢?为了让单片机工作,只能将程序写为二进制代码交给其执行;早期单片机开发人员就是使用人工编写的二进制代码交给单片机去工作的。今天,我们不必用烦人的二进制去编写程序,完全可以将我们容易理解的“程序语言”通过“翻译”软件“翻译”成单片机所需的二进制代码,然后交给单片机去执行。这里的“程序语言”目前主要有汇编和C两种;在这里我们所说的“翻译”软件,同行们都叫它为“编译器”,将“程序语言”通过编译器产生单片机的二进制代码的过程叫编译。前面说到,要想使LED1变亮,只需将对应的单片机引脚电平变为低电平就可以了。现在让我们将上面提到的8只LED流水灯实验写为汇编语言程序。
“汉语”语言
返回到开始
这里用到了四条汇编指令:clr、 setb、 ljmp 、end;
clr:是将其后面指定的位清为0;setb:是将其后面指定的位置成1;ljmp:是无条件跳转指令,意思是:跳转到指定的标号处继续运行。end:是一条告诉编译器:程序到此结束的伪指令。伪指令只告诉编译器此程序到此有何 要求或条件,它不参与和影响程序的执行。这里需要说明的是,按汇编语法要求,所编制的程序(下称源程序)之格式和书写要求必须依下列原则:1、源程序必须为纯文本格式文件,如用Windows“附件”中的“记事本”编写的文本文件;2、源程序的扩展名应是 *.ASM; 3、一行只能写一条语句,以回车作为本句的结束,每一语句行长度应少于80个字符(即40个汉字)。 4、每行的格式应为:标号: 命令 参数 ;注释即一行由四部份组成,各部份的顺序不能搞错,依实际要求可以缺省其中的一部份或几部份,甚至全部省去,即空白行。需要使用标号时标号后面必须有“:”(冒号),而命令语句和参数之间必须用空格分开,如果命令有多个参数,则参数与参数之间必须用“,”(逗号)分开,需要注释时注释前必须用“;”(分号),“;”后面的语句可以写任何字符,包括汉字用于解释前面的汇编语句,它将不参与汇编,不生成代码。由于汇编程序对我们还不直观,所以在编写源程序时,应当养成多写注释的习惯,这样有助于今后源程序的阅读和维护。标号是标志程序中某一行的符号名,编译后标号的数值就是标号所在行代码的地址。在宏汇编ASM51中标号的长度不受限制,但标号中不能包含‘:’或其它的一些特殊符号,也不能用汉字,可以用数字作标号,但必须用字母开头。当标号作参数用(如标号作转移地址),在命令后面出现时,必须舍去‘:’(如上面程序中的 LJMP STAR中的 STAR 是不能再有:)。每行只能有一个标号,一个标号只能用在一处,如果有两行用了同一个标号,则汇编时就会出错。由于标号的长度没有限制,可以用有意义的英文或汉语拼音来说明行,使源程序读起来更方便。源程序中的字母不区分大小写,也就是说 star 和 STAR 是一样的,请不要用大小写方式去区分不同的标号。 好拉!规矩知道了,现在该来看看前面我们编写的源程序该怎样处理了:
上一节的实验最后没有得到“流水”显示的效果,主要是单片机执行每条指令的时间很短,我们肉眼无法看到LED的熄灭与点亮。单片机内部能按部就班的自动工作,正是在系统时钟的作用下,内部各逻辑硬件产生各种所需脉冲信号而实现的。这个时钟信号(既晶体振荡信号)的周期称“振荡周期”。我们这个实验中晶体使用的是12MHZ. 在单片机中,要处理最短周期的一条指令需要由12个振荡周期(既晶振振荡周期)组成的,这个叫“机器周期”。 8051核的单片机,大多数指令只用一个机器周期(既单周期),也有双周期和四周期的指令。本实验中用到的SETB P.x和CLR P.x均属于单周期指令,也就是说,执行一句 SETB P.x 用时仅1uS(微秒),CLR P.x 也是1uS;难怪我们前面的程序不能看到流水效果。 现在,将程序改动一下,在每点亮一个LED后,让程序干点别的事,也就是让它等一会再将该LED熄灭,继续执行下面的程序:
;调用延时子程序
;换灯,同上
;返回到开始循环
;延时子程序
;延时子程序结束,返回到调用处的下一句
下面我们再来讨论的流水灯程序,就是用汇编助记符编写的。一般我们叫他为汇编语言程序。这里的程序用一步步逐个控制单片机各管脚来实现流水灯功能。
& 流水灯程序如下:: clr p1.0&&&&&&&&&&&& ;清除p1.0,使其=0,LED1点亮&&&&& acall &&&&&&&&& ;调用0.1秒延时子程序,等待0.1秒&&&&& setb p1.0&&&&&&&&&&& ;置高p1.0,使其=1,LED1熄灭&&&&& clr p1.1&&&&&&&&&&&& ;点亮LED2&&&&& acall &&&&&&&&&&&&&&&& setb p1.1&&&&&&&&&&& ;熄灭LED2&&&&& clr p1.2&&&&&&&&&&&& ;点亮LED3&&&&& acall &&&&& setb p1.2&&&&&&&&&&& ;熄灭LED3&&&&& clr p1.3&&&&&&&&&&&& ;点亮LED4&&&&& acall &&&&&& setb p1.3&&&&&&&&&&& ;熄灭LED4&&&&& clr p1.4&&&&&&&&&&&& ;点亮LED5&&&&& acall &&&&& setb p1.4&&&&&&&&&&& ;熄灭LED5&&&&& clr p1.5&&&&&&&&&&&& ;点亮LED6&&&&& acall &&&&& setb p1.5&&&&&&&&&&& ;熄灭LED6&&&&& clr p1.6&&&&&&&&&&&& ;点亮LED7&&&&& acall &&&&& setb p1.6&&&&&&&&&&& ;熄灭LED7&&&&& clr p1.7&&&&&&&&&&&& ;点亮LED8&&&&& acall &&&&& setb p1.7&&&&&&&&&&& ;熄灭LED8&&&&& acall &&&&& ljmp &&&&&&&&&&& ;8个LED流六了一遍后返回到标号LOOP处再循环;延时子程序: mov r0,#255&&&&&&&&& ;dlo1: mov r1,#195&&&&& djnz r1,$&&&&& djnz r0,dlo1&&&&& ret&&&&&& end
& 程序的第1到26行流水灯的主程序,为使流水效果不停,主程序做成了一个闭合循环。delay是延时子程序,改变赋给r0和r1的值,将改变延时时间,从而改变流水灯的流动速度。最后的end是告诉汇编器:程序到此结束。
& 你能将这个程序改的反过来流水吗?
& 在这个流水灯程序中,实现流水的方法是比较笨的。既然单片机有处理数据的能力,为何不先给单片机一些初始数据,让单片机来依给定的数据参数去自行处理流水过程,不要让我们一句一句的编写这些细小的过程呢?
&&&&&&&&&&&下面有几种方式都可以实现功能的!大家可以一起研究参考!!&&&&&&&&&&&&&&&
ORG 0000H START:MOV P1,#B&&&&& ;最下面的LED点亮 LCALL DELAY;延时1秒 MOV P1,#B&&&&&&&&&&& ;最下面第二个的LED点亮 LCALL DELAY;延时1秒 MOV P1,#B&&&&&&&&&&&&;最下面第三个的LED点亮 (以下省略)LCALL DELAY MOV P1,#B LCALL DELAY MOV P1,#B LCALL DELAY MOV P1,#B LCALL DELAY MOV P1,#B LCALL DELAY MOV P1,#B LCALL DELAY MOV P1,#B&&&&&&&&&&&& ;完成第一次循环点亮,延时约0.25秒 AJMP START&&&&&&&&&&&&&&&&&&& ;反复循环
;延时子程序,12M晶振延时约250毫秒DELAY:MOV R4,#2L3: MOV R2 ,#250L1: MOV R3 ,#250L2: DJNZ R3 ,L2 DJNZ R2 ,L1DJNZ R4 ,L3 RET
&&&& ;用移位方式实现流水灯;///////////////////////////////////////////&
org 00h&&&&;程序上电从00h开始ajmp&main&&;跳转到主程序org&0030h&&&;主程序起始地址main:&mov a,#0feh&&;给A赋值成loop:&&mov&p1,a&&;将A送到P1口,发光二极管低电平点亮&lcall delay&&;调用延时子程序&rl a&&&;累加器A循环左移一位&ajmp&loop&;重新送P1显示delay:&mov r3,#20&&;最外层循环二十次d1:&mov r4,#80&&;次外层循环八十次d2:&mov r5,#250&&;最内层循环250次&djnz r5,$&&;总共延时2us*250*80*20=0.8S&djnz r4,d2&djnz r3,d1&ret&end
**---------------------------------------------------------------------------------*/#include&reg51.h&
void main(void){&unsigned int i,j,k;&&&&&&&//变量定义&&&&&&&&&&//临时变量&&while(1)&{&&&&&&& temp = 0X01;&&for(k=0; k&8; k++)&&&&&&//8个灯流水闪动&&{&&&&&&P1 = ~&&&for(i=0; i&300; i++)&&&&//延时部分&&&for(j=0; j&100; j++)&&&{;}&&&temp &&= 1;&&}&&temp = 0x80;&&for(k=0; k&8; k++)&&&&&&//8个灯反方向流水闪动&&{&&&P1 = ~&&&for(i=0; i&300; i++)&&&&//延时部分&&&for(j=0; j&100; j++)&&&{;}&&&temp &&= 1;&&}&&&&temp = 0x05;&&for(k=0; k&8; k++)&&{&&&P1= ~&&&for(i=0; i&300; i++)&&&&//延时部分&&&for(j=0; j&100; j++)&&&{;}&&&&temp &&= 1;&&&&&&&&}&&temp = 0xa0;&&for(k=0; k&8; k++)&&{&&&P2 = ~&&&for(i=0; i&300; i++)&&&&//延时部分&&&for(j=0; j&100; j++)&&&{;}&&&&temp &&= 1;&&&&&&&&}&&temp = 0x55;&&&&&&&&& //&&&&&&& for(k=0; k&8; k++)&&{&&&P1= ~&&&for(i=0; i&300; i++)&&&&//延时部分&&&for(j=0; j&100; j++)&&&{;}&&&&temp &&= 1;&&&&}&&&&temp = 0&&&&&&&&& //&&&&&&& for(k=0; k&8; k++)&&{&&&P1 = ~&&&for(i=0; i&300; i++)&&&&//延时部分&&&for(j=0; j&100; j++)&&&{;}&&&&temp &&= 1;&&&&}& &&temp = 0&&&&&&&&& //&&&&&&& for(k=0; k&8; k++)&&{&&&P1 = ~&&&for(i=0; i&200; i++)&&&&//延时部分&&&for(j=0; j&100; j++)&&&{;}&&&&temp &&= 1;&&&&}&&&&&&&&& temp = 0&&&&&&&&& //&&&&&&& for(k=0; k&8; k++)&&{&&&P1 = ~&&&for(i=0; i&200; i++)&&&&//延时部分&&&for(j=0; j&100; j++)&&&{;}&&&&temp &&= 1;&&&&}&}&&}
如何精确计算延时子程序的执行时间?
&&&&汇编语言的一大优势就是能够精确控制程序的执行时间,这在编写一些对时序要求严格的外围器件驱动时由为重要!
;延时子程序,12M晶振延时约253毫秒DELAY:MOV R4,#2------执行1个机器周期,耗时1微秒L3: MOV R2 ,#250---执行1个机器周期,耗时1微秒L1: MOV R3 ,#251---执行1个机器周期,耗时1微秒L2: DJNZ R3 ,L2---执行2个机器周期,反复执行251次(2x251)=502微秒)DJNZ R2 ,L1-----执行2个机器周期,反复执行250次(1+502+2)*250=126250微秒)DJNZ R4 ,L3-----执行2个机器周期,反复执行2次 (1+1+502+)*2=253512微秒)
delay 加上第一条总共延时1+513微秒
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
以上部分内容转载于网上,如有涉及到版权问题,请通知本人删除&&
Copyright@
版权所有:深圳单片机开发网&&联系地址: 广东省深圳市龙岗区布吉镇罗岗工业区京南路105号锦龙大厦706
手机:&&电话:6&&传真:0&&E-mail:&&粤ICP备号播放列表加载中...
正在载入...
分享视频:
嵌入代码:
拍下二维码,随时随地看视频
8个LED状态流水灯
上 传 者:
内容介绍:
这是一部创新突破的新概念单片机教程,昂天电子最新出品的、新概念C51单片机教程,从最基本手把手教你编程的点亮一个发光二极管开始,逐步深入,全面讲解了丰富的单片机内部控制世界(计数器、定时器、串口通讯、存储器、AD、DA、红外控制、步进电机、温度传感器、光电耦合器、继电器、数码管、键盘等
Channel Me 精选
我来说点啥
版权所有 CopyRight
| 京网文[0号 |
| 京公网安备:
互联网药品信息服务资格证:(京)-非经营性- | 广播电视节目制作经营许可证:(京)字第403号
<img src="" width="34" height="34"/>
<img src=""/>
<li data-vid="">
<img src=""/><i data-vid="" class="ckl_plays">
<li data-vid="">
<img src=""/><i data-vid="" class="ckl_plays">
<img src="///img/blank.png" data-src=""/>
<img src="///img/blank.png" data-src="http://"/>
<li data-vid="" class="cfix">
src="///img/blank.png" data-src=""/>
<i data-vid="" class="ckl_plays">
<li data-vid="" class="cfix">
src="///img/blank.png" data-src=""/><i data-vid="" class="ckl_plays">
没有数据!
{upload_level_name}
粉丝 {fans_count}
{video_count}
{description}发光二极管流水灯制作实验报告_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
4页免费4页免费3页免费4页免费6页免费4页免费2页免费11页1下载券2页1下载券4页2下载券
喜欢此文档的还喜欢6页2下载券43页免费36页免费46页免费2页免费
发光二极管流水灯制作实验报告|单&#8203;片&#8203;机&#8203;实&#8203;验&#8203;报&#8203;告&#8203;步&#8203;骤
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢proteus仿真中,在做流水灯时,仿真处已经出现高低电平了,但发光二级管还是不亮,但去掉电阻就亮,为什么?_百度知道
proteus仿真中,在做流水灯时,仿真处已经出现高低电平了,但发光二级管还是不亮,但去掉电阻就亮,为什么?
提问者采纳
电阻大了、
提问者评价
谢谢了,虽然我知道问题了,但还是谢谢
其他类似问题
发光二级管的相关知识
按默认排序
其他2条回答
你的电阻阻值太大了,100Ω就够了
一般上拉电阻子1K左右,或者你接在别的端口不需要接电阻的,在P0口需要上拉电阻的,
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 流水灯电路图 的文章

 

随机推荐