51单片机控制LED闪烁
51单片机最小系统
- 供电部分:5V供电
- 时钟部分:
- 晶振的选择 一般使用12MHz或者11.0592MHz的晶振,51单片机12个时钟周期执行一个机器周期,使用12MHz的晶振,那么1个机器周期是1uS;使用11.0592MHz的晶振是为了减小串口通信的误码率。
- 起振电容的选择,参考数据手册选择。
LED灯驱动电路分析
LED限流电阻的计算方法
Proteus中默认的LED的压降是2.2V,电流一般5 – 20mA就可以了,电源VCC=5V。要使LED的驱动电流为10ma,那么电阻R=(5V – 2.2V) / 10mA = 280欧,可以取比较接近的330欧电阻。由于51单片机的P0口,拉电流(高电平驱动)最大电流只有1mA,灌电流(低电平驱动)最大有10mA,整个P0口不能超过24mA,直接使用灌电流可以不需要三级管就行了。
实现LED闪烁程序
//LED限流电阻的计算方法
//Proteus中默认的LED的压降是2.2V,电流一般5-20mA就可以了,电源VCC=5V
//要使LED的驱动电流为10ma,那么电阻R=(5V - 2.2V) / 10mA = 280欧,可以取比较接近的330欧电阻。
//由于51单片机的P0口,拉电流(高电平驱动)最大电流只有1mA,灌电流(低电平驱动)最大有10mA,
//整个P0口不能超过24mA,直接使用灌电流可以不需要三级管就行了。
#include <REG51.H>
//定义数据类型,u8表示无符号8bit整数(数值范围是0-255)
//u16表示16bit整数(数值范围是0-65535)
typedef unsigned char u8;
typedef unsigned int u16;
//定义P00引脚为LED所在引脚
sbit LED = P0^0;
//延时1毫秒,1秒=1000毫秒
void delay_ms(u16 ms)
{
while (ms--)
{
volatile u8 x = 120;
while (x--);
}
}
//程序入口函数
void main()
{
while (1)
{
//LED灯亮500毫秒
LED = 0;
delay_ms(500);
//LED灯灭500毫秒
LED = 1;
delay_ms(500);
}
}
版权声明:本文为iotplus原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。