【单片机基础篇】51单片机流水灯
一、 准备工作
- 硬件设备: 51单片机
- 编译软件和烧写软件
二 、LED介绍及内部原理
上图便是单片机内部的引脚图,虽然很多,但我们今天的主角只涉及到P2口(21~28脚)——准双向8位I/O口,每个口可独立控制,内带上拉电阻。
上图便是LED内部原理图,因为在数字电路中,电平只有两种状态:高电平,1;低电平,0。所以,要让第一个LED亮,我们只需要让P2口的最低位清0。也就是让P2 = 11111110,然后再转换成十六进制,也就是P2 = 0xFE。
三、 点亮一个LED
首先来看第一个程序`
#include <REGX52.H> //此头文件包含了51单片机的特殊功能寄存器
void main()
{
P2 = 0xFE;
while(1)
{
}
}
现象:
四、 LED闪烁
让LED闪烁,我们要有一个延时函数
#include <REGX52.H>
#include <INTRINS.H>
void Delay400ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 11;
k = 45;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
P2 = 0xFE;
Delay400ms();
P2 = 0xFF;
Delay400ms();
}
}
五、 LED流水灯
直接上代码
#include <REGX52.H>
void DelayXms(unsigned int x) //@12.000MHz
{
unsigned char i, j;
while(x)
{
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
x--;}
}
void main()
{
while(1)
{
P2=0xFE;//1111 1110
DelayXms(500);
P2=0xFD;//1111 1101
DelayXms(500);
P2=0xFB;//1111 1011
DelayXms(500);
P2=0xF7;//1111 0111
DelayXms(500);
P2=0xEF;//1110 1111
DelayXms(500);
P2=0xDF;//1101 1111
DelayXms(500);
P2=0xBF;//1011 1111
DelayXms(500);
P2=0x7F;//0111 1111
DelayXms(500);
}
}
如果想改变LED的闪烁频率,我们只需要改参数就可以了。
总结
在单片机(MCU)内部,CPU通过配置寄存器来控制硬件电路。