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