流水灯实验过程

流水灯

1.基本思路

  1. 先让P1口全为高电平(灯不亮)
  2. 通过为左移/位右移动来实现依次点亮LED灯一个具有注脚的文本。1
  3. 用for循环语句嵌套
  4. 写程序
#include <REGX52.H>//用到的头文件
void main()
{	
	int i;	
	P1=0xff;//给每个位高电平11111111
	for(i=8;i>0;i--)//8个灯,位左移8次
	{
		P1=P1<<1;//位左移的
	}
}
  1. 结果:灯全部亮了,因为程序运行的很快
    在这里插入图片描述

  2. 找学姐讨论
    在这里插入图片描述

  3. 其他问题
    Keil5无法写中文注释
    解决方法见链接:如何写中文注释

2.延时程序的加入

#include <REGX52.H>
void main()
{	
	int i,a;
	P1=0xff;//位操作,给每个位高电平11111111,灯不亮
	while(1)//让灯不断地亮和灭
	{
	for(i=8;i>0;i--)//8个灯,位左移8次
	{
		P1=P1<<1;//位左移
		for(a=60000;a>0;a--)//延时程序
		{
			;//结构体为空,但是要记得加分号
		}	
	}
	P1=0xff;//给每个位高电平11111111,让全亮的灯灭掉
	for(a=60000;a>0;a--)//重灭到开再延时,要不然
		{;}
	}
}

结果:还是全亮,真的不知道为什么,现在也没有搞明白(询问????????????)

更改后,可以运行,不会再全部灯亮

#include <REGX52.H>
void main()
{	
	int i,a;
	P1=0xff;//位操作,给每个位高电平11111111,灯不亮
	while(1)//让灯不断地亮和灭
	{
	for(i=8;i>0;i--)//8个灯,位左移8次
	{
		P1=P1<<1;//位左移
		for(a=30000;a>0;a--)//延时程序把a的值改小了,之前有符号int的范围和无符号的搞混了
		{
			;//结构体为空,但是要记得加分号
		}	
	}
	P1=0xff;//给每个位高电平11111111,让全亮的灯灭掉
	for(a=30000;a>0;a--)//重灭到开再延时,要不然
		{;}
	}
}
原因:数据类型int的范围搞错,超了

在这里插入图片描述

3.上网搜

结果:找到了很多的方法,但基本都需要调用函数,我看不懂

4.去B站找

结果:发现把自己的延时程序变成用while语句实现的就可以了

//从左到右点亮
#include <REGX52.H>
void main()
{	
	int i,a;
	P1=0xff;//位操作,给每个位高电平11111111,灯不亮
	while(1)//让灯不断地亮和灭
	{
	for(i=8;i>0;i--)//8个灯,位左移8次
	{
		P1=P1>>1;
		a=65535;
		while(a--);//延时程序
	}
	P1=0xff;//给每个位高电平11111111,让全亮的灯灭掉
	a=65535;
		while(a--);//重灭到开再延时,要不然程序运行太快有是一直亮着
	}
}




//右到左
#include <REGX52.H>
void main()
{	
	int i,a;
	P1=0xff;//给每个位高电平11111111
	while(1)
	{
	for(i=8;i>0;i--)
	{
		P1=P1<<1;//就这里不一样
		a=65535;
		while(a--);
	}
	P1=0xff;//给每个位高电平11111111
	a=65535;
		while(a--);
	}
}

当时最开始只是亮了一个灯在这里插入图片描述


#include <REGX52.H>//声明头文件
void main()
{	
	int i,a;
	P1=0xff;//给每个位高电平11111111
	while(1)
	{
	for(i=8;i>0;i--)
	{
		P1=P1<<1;
		a=65535;
		while(a);
	}
	P1=0xff;//给每个位高电平11111111
	a=65535;
		while(a);//a出问题了
	}
}

原因:while里面的a没有“减减”

5.其他问题

  1. 字母P一定要大写,它头文件里面是这样子定义的
  2. 花括号成双成对,出现了程序写太长结果花括号漏掉或者重复的情况
  3. 把注释符号“//”写在了分号“;”前面,结果编译一堆错误
  4. 板子烧录程序与视频讲解的略有不同,就“冷启动”那里,但都是先点下载再开开关
  5. Keil头文件名字要大写,视频里由于版本的原因是小写,可右键直接添加头文件在这里插入图片描述
  6. 放大直接ctrl+滚轮
  7. 再一个个亮后加了延时程序,结果灭后面没有加延时程序,导致第一个灯就没有灭过
  8. 数据类型没搞对,赋值太大,超过范围

原文所在:在这里插入图片描述

原文:布尔青年连接


  1. 当时想了两种流水灯情况,但是第一种要用到循环左移/循环右移,我写不出来,所以想了第二种的
    在这里插入图片描述 ↩︎

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值