什么是LED |
LED(light-emitting diode): 发光二极管
是一种常用的发光器件
发光二极管可高效地将电能转化为光能,可以将电信号转换为光信号的发光器件
特点:功耗低、高亮度、色彩鲜艳、抗震动、寿命长
直插式
可以看出图片上的LED灯引脚有长短之分,记住口诀
长正短负(长的代表正极,短的代表负极)
贴片式
根据封装不同,实际大小不同
怎么看贴片式LED灯正负极呢?
LED灯有一头为绿色,就意味着这头是负极,另外一头就是正极
LED工作参数 |
LED灯在电路图中的符号为:
它具有二极管的基本特性:正向导通,反向截止。要想点亮LED,那么需要从正向流过工作电流
普通发光二极管工作压降为:1.6v ~ 2.1v
工作电流为:1~20mA
LED原理图分析 |
通过电路原理图可以得出:要点亮开发板上LED灯,只需要控制P1口输出低电平即可(编程时,给P1口赋值“0”)
keil4软件使用(建立工程、.c文件) |
打开软件发现没有Project和Build Output怎么办?
如何在Keil4中进行编程
1、建立工程文件
2、建立一个.c文件
3、添加新建的C文件到工程中
点亮第一个LED灯 |
在Keil4中
在烧录软件中
点亮第一个LED
//引用51头文件
#include
//位定义
sbit LED1 = P1^0;
//主函数
void main()
{
LED1 = 0;
}
开发板上第一个LED灯亮了
如果我们给LED1一个高电平呢?
//引用51头文件
#include
//位定义
//sbit 标识符 = 地址值
//P必须为大写
sbit LED1 = P1^0;
//主函数
void main()
{
LED1 = 1;
}
发现只有电源指示灯是亮着的,LED1的灯熄灭
同时点亮LED2,LED3,LED5
#include
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit LED5 = P1^4;
void main()
{
LED2 = 0;
LED3 = 0;
LED5 = 0;
}
LED闪烁 |
常用的延时方法有:
软件延时:使用简单,但是耗费CPU时间
定时器延时:给定时器配值,到达指定时间后,执行熄灭
没有熄灭效果的LED
#include
int main()
{
while(1)
{
//点亮P1口8个LED
P1 = 0;
}
}
有熄灭效果的LED
#include
int main()
{
while(1)
{
//点亮P1口8个LED
P1 = 0;
//熄灭P1口8个LED
P1 = 0xff;
}
}
我们可以发现加了熄灭效果的灯会更暗一点(图片上显示不清,肉眼也很难看出来,但实际就是加了熄灭效果的会更暗一点)
LED闪烁
#include
unsigned int i;
//main函数自身就会循环
void main()
{
while(1)
{
i = 65535;
P1 = 0;
//while用于延时
while(i--);
P1 = 0xff;
//while用于延时 如果这里的while没有 就会造成熄灭的时间很短 通过肉眼很难察觉出熄灭
while(i--);
}
}
unsigned int i; 数据类型 变量名
变量是在程序执行过程中其值能不断变化的量。
在使用一个变量之前必须进行定义,用一个标识符作为变量名,并指出它的数据类型
while(1) {} 只有当while后面圆括号内条件表达式的值为真时,程序才会重复执行花括号内语句,当条件表达式为假时则不执行花括号内语句
IO口与一个字节位的对应关系 |
同时点亮LED2,LED3,LED5(利用IO口与字节对应关系)
#include
void main()
{
while(1)
{
P1 = 0xe9;
}
}
流水灯 |
#define uchar unsigned char
利用define进行宏定义
注意宏定义后面不能加分号,它是预处理指令不是语句
“uchar”直接替换了"unsigned char"
此时,uchar i;等价于unsigned char i;
//函数定义
void delay(unsigned int z)
{
unsigned int x,y;
for(x = z; x > 0; x--)
{
for(y = 114; y > 0 ; y--);
}
}
//函数调用
delay(100);
函数就是将多条语句集合在一块,来完成一种特定功能
函数分为标准函数和用户自定义函数
标准函数库:keil编译器提供的,不需要用户进行定义
自定义函数:用户根据自己需要编写的函数,它必须在使用前先定义
void delay(unsigned int z)
void 函数返回类型
delay 函数名
unsigned int z 形式参数
unsigned int x,y 定义局部变量
**for(x = z; x > 0; x–)
{
for(y = 114; y > 0 ; y–);
} ** 函数体语句
delay(100); 延时100ms
#include
void test_crol (void)
{
unsigned char a;
unsigned char b;
a = 0xFE;
b = _crol_(a,1);
c = _cror_(a,1);
}
#include
字符型循环左移函数_ crol _(a,b) a代表参与运算的数值 b代表循环左移的位数
字符型循环右移函数_ cror_(a,b)
a = 0xFE;
b = a<<1;
b = a<<1; 左移运算
区别:循环左移是把最高位移到最低位上,左移运算符是把最高位移除最低位补0
从LED1开始实现流水灯
#include
#include
//宏定义
#define uint unsigned int
#define uchar unsigned char
//函数定义
//延时函数 延时单为ms
void delay(uint z)
{
uint x,y;
for(x = z;x>0;x--)
{
for(y = 144;y>0;y--);
}
}
uchar tmp = 0;
int main()
{
tmp = 0xfe;
P1 = tmp;
//函数调用
//延时100ms
delay(100);
while(1)
{
tmp = _crol_(tmp,1);
P1 = tmp;
delay(100);
}
}
有些小伙伴们可能找不到这些开发软件的下载包,可以私信博主,也可以在评论区留言,博主给您私发邮箱
具体食用可以参考这边文章重新回归最初始的51单片机,跟我一起学单片机吧(内含单片机驱动、烧录软件、程序开发软件的安装和使用)