整体框架轮廓
上一篇讲到了按键控制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;
}
}
}