51八只LED灯做流水灯实验

上传人:m**** 文档编号:484783227 上传时间:2023-04-12 格式:DOC 页数:11 大小:354.50KB
返回 下载 相关 举报
51八只LED灯做流水灯实验_第1页
第1页 / 共11页
51八只LED灯做流水灯实验_第2页
第2页 / 共11页
51八只LED灯做流水灯实验_第3页
第3页 / 共11页
51八只LED灯做流水灯实验_第4页
第4页 / 共11页
51八只LED灯做流水灯实验_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《51八只LED灯做流水灯实验》由会员分享,可在线阅读,更多相关《51八只LED灯做流水灯实验(11页珍藏版)》请在金锄头文库上搜索。

1、word51八只LED灯做流水灯实验第一节:单片机在上电初始后,其各端口输出为高电平。如果我们现在想让接在P1.0口的LED1亮,那么我们只要把P1.0口的电平变为低电平就可以了。想让LED1灭,LED0亮,只需将P1.0升高,P1.1变低,LED1就熄灭LED2随后既点亮!依始类推如下所示8只LED变会一亮一暗的做流水灯了。本实验在“SP-51实验板学习套件上的相关图纸: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高、返回到开始、程序完毕。我们不能说

2、P1.1你变低,它就变低了。因为单片机听不懂我们的汉语的,只能承受二进制的“1、0.代码。我们又怎样来用二进制语议论使单片机按我们的意思去工作呢?为了让单片机工作,只能将程序写为二进制代码交给其执行;早期单片机开发人员就是使用人工编写的二进制代码交给单片机去工作的。今天,我们不必用烦人的二进制去编写程序,完全可以将我们容易理解的“程序语言通过“翻译软件“翻译成单片机所需的二进制代码,然后交给单片机去执行。这里的“程序语言目前主要有汇编和C两种;在这里我们所说的“翻译软件,同行们都叫它为“编译器,将“程序语言通过编译器产生单片机的二进制代码的过程叫编译。前面说到,要想使LED1变亮,只需将对应的

3、单片机引脚电平变为低电平就可以了。现在让我们将上面提到的8只LED流水灯实验写为汇编语言程序。“汉语语言 汇编语言 开始:star:返回到开始ljmp star完毕end这里用到了四条汇编指令:clr、 setb、 ljmp 、end;clr:是将其后面指定的位清为0;setb:是将其后面指定的位置成1;ljmp:是无条件跳转指令,意思是:跳转到指定的标号处继续运行。end:是一条告诉编译器:程序到此完毕的伪指令。伪指令只告诉编译器此程序到此有何 要求或条件,它不参与和影响程序的执行。这里需要说明的是,按汇编语法要求,所编制的程序下称源程序之格式和书写要求必须依如下原如此:1、源程序必须为纯文

4、本格式文件,如用Windows“附件中的“记事本编写的文本文件;2、源程序的扩展名应是 *.ASM; 3、一行只能写一条语句,以回车作为本句的完毕,每一语句行长度应少于80个字符即40个汉字。 4、每行的格式应为:标号: 命令 参数 ;注释即一行由四部份组成,各部份的顺序不能搞错,依实际要求可以缺省其中的一部份或几部份,甚至全部省去,即空白行。需要使用标号时标号后面必须有“:冒号,而命令语句和参数之间必须用空格分开,如果命令有多个参数,如此参数与参数之间必须用“,逗号分开,需要注释时注释前必须用“;分号,“;后面的语句可以写任何字符,包括汉字用于解释前面的汇编语句,它将不参与汇编,不生成代码。

5、由于汇编程序对我们还不直观,所以在编写源程序时,应当养成多写注释的习惯,这样有助于今后源程序的阅读和维护。标号是标志程序中某一行的符号名,编译后标号的数值就是标号所在行代码的地址。在宏汇编ASM51中标号的长度不受限制,但标号中不能包含:或其它的一些特殊符号,也不能用汉字,可以用数字作标号,但必须用字母开头。当标号作参数用如标号作转移地址,在命令后面出现时,必须舍去:如上面程序中的 LJMP STAR中的 STAR 是不能再有:。每行只能有一个标号,一个标号只能用在一处,如果有两行用了同一个标号,如此汇编时就会出错。由于标号的长度没有限制,可以用有意义的英文或汉语拼音来说明行,使源程序读起来更

6、方便。源程序中的字母不区分大小写,也就是说 star 和 STAR 是一样的,请不要用大小写方式去区分不同的标号。 好拉!规矩知道了,现在该来看看前面我们编写的源程序该怎样处理了:编写源程序:先将编译软件安装好c51eval 软件的安装。软件安装好我们就可以编写程序了。第一步:双击Uvw51图标,出现如图一所示的主界面第二步:新建文件单击菜单栏的“文件-新建或者单击图标按钮如此在上图所示的灰色区域出现一个白色的编辑区,这时我们就中以在这里编辑程序了。如图二所示。图二第三步:编程程序建立了一个新的编程文件后,我们就可以在这里编写我们所需要的程序了,下面我们就来编写前面所说的程序吧。!如图三所示:

7、第四步:保存文件程序编写好了,我们当然要记得保存了,要不我们编写程序就白费劲了。好了,下面我们将上面编写的程序保存起来:单击“文件-保存或者单击 图标,出现如图四所示的对话框:图四这时参照图五所示将对话框的容设置好:c51eval保存文件时默认的文件扩展是名*.C,请按图五所示改变为为*.a51:图五我们这里就先将文件保存在D/DDW文件夹中,文件名你可以随便取,这里先叫他为LED.a51;需强调的是保存文件的文件夹和文件名不能使用中文!即保存文件时不能以如下格式保存: 正确的保存路径:D/DDW/LED.a51 当然,保存的文件夹名DDW、编写的程序的文件名LED,你都可以随意的取一个,可以

8、是D/ABC/000.a51。这就取决于你的兴趣了。 错误的保存路径:D/源程序/DDW/LED.a51,或者是D/DDW流水灯程序.a51。总之在源程序的保存路径下不能有中文的出现,同时文件名不能取的太长。第五步:建立项目将汇编的源程序保存后,还没有得到我们所需要的文件,这时我们还需要再建立项目,以便得到我们所需的hex文件。 新建项目的步骤如下:首先先打开新建项目的对话框文件,如图六所示:图六点击新建项目后出现如图七所示的对话框,我们将对话框的参数设定好。将文件名设置成与刚刚源程序的文件名一样,即设为 LED.prj,同时保存的路径跟前面的源程序保存的路径一样,在D/DDW上。现在就可以把

9、刚刚建立的项目文件LED.prj添加到刚保存的LED.A51源程序上了,注意它们都在同一个根目录下。图七按图七所示操作后,会出现如图八所示的对话框:图八点击“A加出现如图九所示画面:图九按图九所示完成操作后,软件会自动打开一个对话框,如图十所示:图十如图十所示点击保存后,系统会自动回复到汇编状态。这时点击*创建所有 图标*按钮,如此进展了转换,并出现如图十一所示的状态显示画面:图十一完成上述操作后,在图十一,我们看到了创建成功了的提示画面,这时我们点击OK就大功告成了。打开我们文件的保存路径:我的电脑/D/DDW 我们可以看到包含hex文件在的所有相关程序文件了。我们上面的项目文件也在其中了。

10、 他的名字叫作LED.hex文件。好啦,到此我们已将第一个流水灯程序编写、编译、烧写进展完啦,再下来就是将烧写好的AT89C51从编程器上取下,放到“SP-51实验板学习套件的实验部份通电让LED1LED8“流水。 说明:由于单片机的时钟高达12MHz,8个LED发光与熄灭的时间很短,实际实验结果凭我们的肉眼是看不到“流水效果的!那怎样才能让我们肉眼看到“流水灯效果呢?请继续学习下节课流水灯实验详解二上一节的实验最后没有得到“流水显示的效果,主要是单片机执行每条指令的时间很短,我们肉眼无法看到LED的熄灭与点亮。单片机部能按部就班的自动工作,正是在系统时钟的作用下,部各逻辑硬件产生各种所需脉冲

11、信号而实现的。这个时钟信号既晶体振荡信号的周期称“振荡周期。我们这个实验中晶体使用的是12MHZ. 在单片机中,要处理最短周期的一条指令需要由12个振荡周期既晶振振荡周期组成的,这个叫“机器周期。 8051核的单片机,大多数指令只用一个机器周期既单周期,也有双周期和四周期的指令。本实验中用到的SETB P.x和CLR P.x均属于单周期指令,也就是说,执行一句 SETB P.x 用时仅1uS(微秒),CLR P.x 也是1uS;难怪我们前面的程序不能看到流水效果。 现在,将程序改动一下,在每点亮一个LED后,让程序干点别的事,也就是让它等一会再将该LED熄灭,继续执行下面的程序:DDW:;程序

12、开始CLR;LED1亮ACALLDELAY;调用延时子程序SETB;LED1灭CLR;换灯,同上ACALLDELAY?SETB?CLR?ACALLDELAY?SETB?CLR?ACALLDELAY?SETB?CLR?ACALLDELAY?SETB?CLR?ACALLDELAY?SETB?CLR?ACALLDELAY?SETB?CLR?ACALLDELAY?SETB?LJMPDDW;返回到开始循环DELAY:?;延时子程序MOVR1,#50?AD10:?MOVR2,#100?AD11:?MOVR3,#100?DJNZR3,$?DJNZR2,AD11?DJNZR1,AD10?RET;延时子程序完毕

13、,返回到调用处的下一句END?请将上面的程序保存为 1LED.asm,进展编译,并烧写到AT89S51中,之后将89S51安装到套件的实验部份插座上实验,这回显示的就是“流水灯的效果了!?回过头,让我们看看延时子程序是怎样工作的:单片机部有不少存放器,这些存放器在单片机通电时,你可以给他写入数据是单片机按你程序要求写的数据,而不是编程器写的,当第二次给他写入新数据时,前次的数据就被新数据覆盖;当然也可以从存放器中读取数据。当单片机没有电源供应时,存放器部的数据也随即消失;这些存放器人们叫他RAM,而用编程器将我们编写的程序烧写到单片机中的存储器叫ROM;现在,我们应该清楚:RAM是让程序去使用

14、的,ROM是我们编写的程序存放的地方! 前面说过,单片机部有不少RAM,本实验用的AT89C51有多少存放器?我们现在不必关心,现在只须知道单片机部有名叫R0R7 的这8个存放器。这8个存放器每个都由8个单独的位存放器组成,最大存放数据为二进制的 1111 1111,十六进制 = FF,十进制 = 255。在使用时注意不要大于其有效围。上面延时程序中,先用到 MOV R1,#50 ,MOV是移动的意思,该句是将50这个十进制数放到R1中;50是立即数,按汇编语言要求前面要加“#号,汇编语言还规定,十六进制数后面要加“?H,十六进制数的高位是字母时在字母前面还要加“0,例如:#0F8H;二进制数后面加“B,例如:#11110000B。十进制不加,例如:#100。延时程序的第二、三句为: MOV R2,#100 ;MOV R3,#100 ;这两句意思同前。第四句中DJNZ R3,$ 的意思是将 R3 里面的数减 1 后如果 R3 不等于 0 如此跳到后面指定的程序位置,这里的“$既要跳转的程序位置,“$代表当前语句处,也就是说,R3不等于 0,程序返回再次执行本句。如果R3 减 1 后等于0,程序完毕本句,继续执行下面的语句。延时程序的最后一句是RET ,意思是退出本子程序,返回到调用本子程序处的下一句。根据上面的解释,一进入延时子程序首先为R1, R2, R3 存

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号