LED介绍
- 51开发板用的是普通的贴片发光的二极管,这种二极管通常是正向导通电压1.8~2.2V。
- 工作电流一般在1~20mA。其中,当电流在1~5mA变化的时候,随着通过LED的电流越大,人们的肉眼会明显的感觉到这个灯越来越亮,而当电流处于5~20mA变化时候,看到的发光二极管的亮度变化就不太明显了。当电流超过20mA时候,LED灯就会有烧坏的危险了。
- 电流越大,烧坏的速度也就会变快。所以,在使用过程当中应该要特别区注意它的电流参数上面的设计要求,这很重要。
LED原理图
- 这里的VCC就是电源的正极,左边红色的字其实就是一个网络的一个标号也被称之为网络编号,这里的引脚低电平这个LED灯才是亮的。
- 那我们可以看下正极出来之后,通过一个电阻(这个电阻其实是④个一体的),那么这上面说电阻是1kΩ的是怎么样看出来的,其实就是我们仔细看单片机开发板上的RP9和RP10上面都有个数字是102。那么其实原理图上写的102就是1000Ω,前面两位数是一个有效数字10,第三位数字就是倍率00。其实102拆开来 = 1010^2,那么473呢?也是一样473 = 4710^3 = 47 000 = 47k,1001 = 1000 = 1k。这就是电阻的一个读数的方式包括电容啊以及其它的一些元器件其实一个这样的一个方式来的。
- 那我们继续看到这个图纸经过这个电阻,这个电阻在这里的作用是起到一个限流的作用,从而这个电阻也被称作是:限流电阻。就比如说假设VCC = 5V,LED 直接 5V 的话,由于电流过大会把这个LED灯给烧毁。所以在这里的串联电阻就很好的起到了一个限流的作用。而到达LED已经接入到正极了,那么LED负极在接入的话。此时LED灯就将会点亮了,高低电平的一个应用。高电平就是5V,低电平就是0V,单片机把这种电平叫做TTL电平。P2口决定了你的高低电平,也就是CPU通过配置这些控制的寄存器来控制我们的硬件电路来执行我们想要去完成的一个功能!
进制转换
点亮一个LED代码
#include <REGX52.H>
int main(void)
{
P2=0xFE; //1111 1110
while(1)
{
}
}
- P2 = 0xFE,P2当中的0x:是一个前缀,代表后面的是十六进制数。
- include <REGX52.H>这个是我们单片机的头文件,在上面代码中如果没有这个头文件的话,我们的程序就无法去识别P2口了。
- while循环在这里的作用是:其实就是一直绕着这个圈跑来跑去,这样就不用一直从main主函数那里走来走去了。表达式的值为真(1)它就会一直去执行里面是一个逻辑表达式的值也就是判断条件和表达式的值为真还是为假,非0即使真。
程序下载
- 选择单片机的型号,现在用的单片机的型号是 STC89C52RC,注意:不要选错了。
- 单击"打开程序文件",打开建立工程的那个文件夹,找到 xxx.hex文件,单击打开。
- 选择刚才查到的COM入口,波特率使用默认就可以了。
- 这里的所有选项都选择默认设置,不要随意更改,有的选项 错误可能会导致麻烦。
- 因为STC单片机要冷启动下载的,就是我们先点击下载,然后 你再给你的单片机上电,所以先要关闭板子的电源开关,然 后再单击Download按钮,等待软件提示你上点后,再按下板 子的电源开关,就可以下载到单片机里了。
LED灯闪烁
#include <REGX52.H>
#include <INTRINS.H> //_nop_();需要的头文件
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
int main(void)
{
while(1)
{
P2=0xFE; //1111 1110
Delay500ms(); //调用函数
P2=0xFF; //1111 1111
Delay500ms(); //调用函数
}
}
LED流水灯
#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
int main(void)
{
while(1)
{
P2=0xFE;//1111 1110
Delay500ms();
P2=0xFD;//1111 1101
Delay500ms();
P2=0xFB;//1111 1011
Delay500ms();
P2=0xF7;//1111 0111
Delay500ms();
P2=0xEF;//1110 1111
Delay500ms();
P2=0xDF;//1101 1111
Delay500ms();
P2=0xBF;//1011 1111
Delay500ms();
P2=0x7F;//0111 1111
Delay500ms();
}
}
LED流水灯高阶操作(自定义延迟时间)
#include <REGX52.H>
void Delay1ms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
int main(void)
{
while(1)
{
P2=0xFE;//1111 1110
Delay1ms(1000);
P2=0xFD;//1111 1101
Delay1ms(900);
P2=0xFB;//1111 1011
Delay1ms(800);
P2=0xF7;//1111 0111
Delay1ms(700);
P2=0xEF;//1110 1111
Delay1ms(600);
P2=0xDF;//1101 1111
Delay1ms(500);
P2=0xBF;//1011 1111
Delay1ms(300);
P2=0x7F;//0111 1111
Delay1ms(100);
}
}