【51单片机系列】点灯大师二之LED闪烁
本文实现LED的闪烁,即LED处于亮-灭交替的状态。
实现LED闪烁
LED要亮-灭交替,对于共阳极LED来说,也就是要连接的I/O口交替输出低电平-高电平,很显然就需要一个延时函数,保证LED亮和灭的时间,否则肉眼很难观察到LED闪烁的状态。
延时可以使用如下函数实现:
void delay(unsigned short i)
{
while(i--);
}
每次I-1延时大约10us。
软件实现:D1,D3,D5,D7闪烁。代码如下:
仿真结果:
延时时间确认
delay()
函数实现简单的延时。可以通过debug确定延时的具体时间。
第一步,在34、35、36行加断点(选中该行,按F9即可添加断点)。
第二步,按Ctrl+F5进入调试界面,当前运行到了34行,左侧的sec=0,按F5运行到35行。
第三步,记录此时的时间sec=0.000406,按F5运行到36行。
第四步,记录此时的时间sec =0.450617,将这两次记录的时间相减就得到delay(50000)
的时间t=0.450617-0.000406=0.450211s≈450ms。
需要注意这个时间和工程设置的晶振频率有关系,上面调试时晶振频率为12MHz,如果改为24MHz,那么delay(50000)
的时间大约为225ms。
在keil5中更改晶振频率,按Alt+F7弹出如下窗口,更改Xtal的频率即可。