流水灯实验报告.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

流水灯实验报告

开始

开始

将LED灯对应的接口与ATmega8的PD口进行接线,并且设置8个管脚均为输出。

否1是否为真

1是否为真

用变量

用变量i来控制每个管脚的高低电平。给i赋初始值0,判断是否符合i8。

是把PD管脚输出值为~(1i),并且执行i++。实现灯从左至右轮流亮。

把PD管脚输出值为~(1i),并且执行i++。实现灯从左至右轮流亮。

用变量

用变量i来控制每个管脚的高低电平。给i赋初始值8,判断是否符合i0。

把PD管脚输出值为~(1(i-1)),并且执行i--。实现灯从右至左轮流亮。

把PD管脚输出值为~(1(i-1)),并且执行i--。实现灯从右至左轮流亮。

用变量

用变量i和j来控制每个管脚的高低电平。给i赋初始值3,j赋4,判断是否符合i=0,j8。

通过一定的赋值或者逻辑运算后,实现等从中间往两边散开的情景。并且执行i--和j++。

通过一定的赋值或者逻辑运算后,实现等从中间往两边散开的情景。并且执行i--和j++。

结束

程序分析

#includeiom8v.h//调用包含ATmega8相关定义的头文件

voiddelay(unsignedintms)//延时函数为无返回值类型,延时长度是通过实参传入的形

参所决定的

{

unsignedinti,j;//定义两个变量i和j均为无符号整型

for(i=0;ims;i++)//for循环为外循环,执行次数为ms次

for(j=0;j1141;j++);//这个for循环嵌套在上一个for之下,执行次数为1141

}

voidmain()//主函数入口

{

inti,j;//定义两个整型变量i和j

DDRD=0XFF;//定义PD的8个端口均为输出

while(1)//死循环,使得整个程序可以持续进行

{

for(i=0;i8;i++)//这个for循环实现灯从左往右的顺序亮起来

{

PORTD=~(1i);//通过控制变量i来确定某一管脚输出低电平,使得灯发亮

delay(500);//延时500ms,通过调用延时函数实现,控制亮灭的时间长短

}

for(i=8;i0;i--)//这个for循环实现灯从右往左的顺序亮起来

{

PORTD=~(1(i-1));//通过控制变量i来确定8个管脚输出低电平,使得灯发亮

delay(500);//延时500ms,通过调用延时函数实现,控制亮灭的时间长短

}

PORTD=0XFF;//将PD的各个端口恢复初始值,避免对下面的程序产生干扰,此

时所有的灯灭了

for(i=3,j=4;i=0,j8;i--,j++)//这个for循环实现灯从中间往两边散开

{

PORTD=~(1i); //通过控制变量i来确定低四位LED的亮灭

PORTD=~(1j); //通过逻辑运算和变量j来控制高四位LED的亮灭

delay(200); //延时200ms

PORTD=0XFF;//使得每次的灯都灭下来

}

}

}

实验效果

实验的效果是8盏灯先从左往右的顺序实现亮灭(间隔500ms),速度较慢;然后从右往左的顺序实现亮灭(间隔500ms),速度较慢;最后是从中间往两边散开的顺序亮灭(间隔200ms),速度较快。

心得体会

开始写前两个部分程序的时候很顺利,都能够按照预期的设想来实现。但是中间出现了一个小问题,就是当运行了第二个效果(即从右往左)之后就不再继续循环。对于这个问题,当时我们并没有做深入的思考。然后继续把第三部分的程序也写出来了。后来发现单独运行第三部分程序是完全可以的。课后我们一直在调试,最后也成功了。可是对于那个问题出现的原因却想不通,在多次获得

文档评论(0)

191****1763 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档