51单片机-按键控制8位流水灯实验

整体框架轮廓

上一篇讲到了按键控制LED灯的亮灭,这节课实现的是流水灯。
同样都是灯,唯一的区别是,一个是控制一个,一个是控制多个。本质上没有区别。

同样我们要明白:1、我们需要通过使用代码,控制单片机的IO口的高低电平。

2、我们需要IO口和LED灯(流水灯)的接线口连接起来

3、通过使用for循环来实现灯的流水效果。

最核心的是同学们要明白,为什么这样写代码,就可以实现流水灯,为什么这样接线,为什么我们要控制IO的电平。
搞懂为什么了,就明白具体操作了,自然你就会了。
1、为什么控制IO电平,因为我们的LED灯只有通电才可以,而这里的LED灯是低电平有效,那么我们是不是要给LED灯一个低电平,那怎么给?是不是要使用我们的单片机给,单片机是可以通过IO口进行输出高低电平的,所以我们会控制IO来输出高低电平。你控制后,是不是需要将我们的IO和LED通过线进行连接,是不是就明白了我们为什么连线,之后我们剩下的就是写代码进行控制了。我们代码怎么写,我们的线就怎么接,或者我们的线怎么接,我们就可以改变代码适应接线的方式。最后希望同学们加油

学习目标:

1、LED灯控制原理

2、C语言实现按键控制流水灯系统设计

LED灯控制原理

发光二极管 (Light-Emitting Diode (LED) )是一种能将电能转化为光能的半导体电子元件,是单片机等计算机控制系统最常用的输出设备。发光二极管有亮、灭两种状态,多用于信号或状态显示在单片机中常作为状态指示灯发光二极管与单片机的硬件接口有两种连接方式

C语言实现按键控制流水灯系统设计

#include <AT89X51.H>
sbit key1 = P3^6;
sbit key2 = P3^7;

// 延时函数
void delay(unsigned int t)
{
	unsigned int i, j;
	for(i = 0; i < t; i++)
	{
		for(j =0; j < 200; j++);
	}
}
// 该函数实现按下按键1,实现流水灯从左往右依次点亮
//void main()
//{
//	unsigned char KK;
//	while(1)
//	{
//		if(key1 == 0)        // 判断是否按下按键
//		{
//			P0 = 0xFE;  //1111 1110        LED是低电平有效,所以我们给P0口一个低电平,这样可以实现点亮第一个。
//			for(KK = 0; KK < 8; KK++)    // for循环实现一次从左往右点亮,进行循环,并在P0
进行左移,以及P0进行相加。
//			{
//				delay(500);
//				P0 = P0 << 1;
//				P0 = P0 + 1;
//			}
//		}

//	}
//}

// 该函数实现 按下按键1实现左移,按下按键2实现右移,具体代码如下,逻辑是和上面的main函数一样
void main()
{
	unsigned char KK;
	while(1)
	{
		if(key1 == 0)
		{
			P0 = 0xFE;  //1111 1110
			for(KK = 0; KK < 8; KK++)
			{
				delay(500);
				P0 = P0 << 1;
				P0 = P0 + 1;
			}
		}
		if(key2 == 0)
		{
			P0 = 0x7F;  //0111 1111
			for(KK = 7; KK > 0; KK--)
			{
				delay(500);
				P0 = P0 >> 1;
				P0 = P0 + 0x80;
			}
			delay(500);
			P0 = 0xFF;
		}

	}
}

具体的电路图如下所示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值