LED 是发光二极管,发光的原理是基于能带电子跃迁理论。
LED应用范围很广,本文针对LED进行详细阐述。首先给出点亮的原理。如下图所示,为低电平点亮LED连接图。值得注意的是电阻的选择。电阻太小。LED会烧毁,电阻太大,LED会亮度不够。常规在10毫安左右。如果电源电压为5V,则电阻大概500左右。
上文给出的是低电平点亮,此外还有高电平点亮。
LED使用有两种存在形式:单独和组合。
单独的可以这样用。
sbit LED_1bit=P1^0;// 用sbit 关键字 选择的位信息
直接选择一位进行操作,如果是1BYTE操作,直接操作P1即可。
本文给出两种玩法。一种切换。
void led_test00()
{
//
P1 = 0x55;// 一次可以操作1BYTE
delayMs(100);
P1 = 0xfe;
delayMs(100);
}
void led_test01()
{
unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255
P1=0x7f;
while(1)
{
for(i=0;i<8;i++) //加入 for循环,表明for循环大括号中的程序循环执行8次
{
delayMs(100);
P1>>=1;
P1=P1|0x80; //右移后,最左端自动赋值0,所以需要该语句赋值1
}
P1=0x7f;
}
看起来比较简单,还有一种是查表。
void led_test_rom()
{
unsigned char i;
while(1)
{
for(i=0;i<9;i++)
{
P1=table[i];
delayMs(100);
}
}
}
以上内容比较简单,推荐的ROM的方法,便于以后扩展。本文想说明的问题是延迟函数。
本文采用的是10MHz的晶振,那么我空循环一次大概是1.2us,人要能分辨间隔需要至少60ms的间隔。
祝大家开心 学习