一、LED灯概述
1.1 LED发光原理
1.2电路原理图
1.3电路实物图
1.4 开发板LED灯原理图
1.4.1共阳极LED灯操控原理(本开发板)
(非实际原理图,便于理解版本)由图可以看出,每个LED灯的左边(即正极)通过限流电阻连接到电源的正极,如果想点亮一个灯(以L1为例),则需要P00输出一个低电平;熄灭L1,则需要P00输出一个高电平1.4.2共阴极LED灯操控原理
二、单片机的I/O口
(1) I/O输出/输出(Input/Output)的简称主要用于工业现场需要用到数字量输入/输出的场合
(2)并行I/O接口是实际应用中使用最多、最普遍的接口类型,开关量的输入/输出都是通过并行I/O接口实现的。
(3)单片机I/O口的使用
(4)STC15系列单片机强大的I/O口功能
三、LED例程
(1)点亮其中某个LED灯:以L1灯为例,其他LED保持熄灭
(2)点亮其中某个LED灯:以L6灯为例,其他LED保持熄灭
(3)一个LED闪烁:以L6闪烁为例,其他LED保持熄灭
(4)多个LED交替闪烁:以L1灯和L2灯交替闪烁为例,其他LED保持熄灭
(5)多个LED交替闪烁:以L1灯和L2灯交替闪烁为例,其他LED保持熄灭(采用sbit关键字)
(6)流水灯(也称跑马灯),若干个LED依次点亮:以开发板上的8个LED诸葛点亮,循环不止。
(7)点亮一个LED灯(并口控制方式):以点亮L1灯为例
(8)点亮一个LED(并口控制方式):以点亮L1、L8为例(涉及sfr关键字)
sfr关键字
(9)流水灯(库函数实现)
从物理学角度来理解:当电流通过晶片时,N型半导体内的电子与P型半导体内的空穴在发光层剧烈地碰撞复合产生光子,以光子的形式发出能量(即大家看见的光)
通常情况下,LED的负极接地,正极接芯片的IO口
输出功能:继电器、LED、蜂鸣器等的控制
输入功能:传感器状态、高低电平等信息的读取
复用功能:片内外设的对外接口
时序模拟:模拟SPI、I2C、和UART灯常用接口的时序
//头文件声明区域
#include
//变量声明区域
//函数定义区域
//关闭蜂鸣器
void cls_buzz(void)
{
P2 = (P2 & 0x1F | 0xA0);
P0 = 0x00;
P2 &= 0x1F;
}
//程序主体
void main()
{
cls_buzz();
//初始化部分
P2 = 0xA0;
P0 = 0x00;
P2 = 0X80;
P0 = 0xFF;
while(1)
{
P00 = 0;//点亮L1(单个赋值)
}
}
//头文件声明区域
#include
//变量声明区域
//函数定义区域
//关闭蜂鸣器
void cls_buzz(void)
{
P2 = (P2 & 0x1F | 0xA0);
P0 = 0x00;
P2 &= 0x1F;
}
//程序主体
void main()
{
cls_buzz();
//初始化部分
P2 = 0xA0;
P0 = 0x00;
P2 = 0X80;
P0 = 0xFF;
while(1)
{
P05 = 0;//点亮L6(单个赋值)
}
}
//头文件声明区域
#include
#include
//变量声明区域
//函数定义区域
//关闭蜂鸣器
void cls_buzz(void)
{
P2 = (P2 & 0x1F | 0xA0);
P0 = 0x00;
P2 &= 0x1F;
}
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
//程序主体
void main()
{
cls_buzz();
//初始化部分
P2 = 0xA0;
P0 = 0x00;
P2 = 0X80;
P0 = 0xFF;
while(1)
{
P05 = 0;
Delay500ms();
P05 = 1;
Delay500ms();
}
}
//头文件声明区域
#include
#include
//变量声明区域
//函数定义区域
//关闭蜂鸣器
void cls_buzz(void)
{
P2 = (P2 & 0x1F | 0xA0);
P0 = 0x00;
P2 &= 0x1F;
}
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
//程序主体
void main()
{
cls_buzz();
//初始化部分
P2 = 0xA0;
P0 = 0x00;
P2 = 0X80;
P0 = 0xFF;
while(1)
{
P00 = 0;
P01 = 1;
Delay500ms();
P00 = 1;
P01 = 0;
Delay500ms();
}
}
//头文件声明区域
#include
#include
//变量声明区域
sbit LED2 = P0^1;
//函数定义区域
//关闭蜂鸣器
void cls_buzz(void)
{
P2 = (P2 & 0x1F | 0xA0);
P0 = 0x00;
P2 &= 0x1F;
}
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
//程序主体
void main()
{
cls_buzz();
//初始化部分
P2 = 0xA0;
P0 = 0x00;
P2 = 0X80;
P0 = 0xFF;
while(1)
{
P00 = 0;
LED2 = 1;
Delay500ms();
P00 = 1;
LED2 = 0;
Delay500ms();
}
}
//头文件声明区域
#include
#include
//变量声明区域
unsigned char LED = 0xfe; //LED数据变量
//函数定义区域
//关闭蜂鸣器
void cls_buzz(void)
{
P2 = (P2 & 0x1F | 0xA0);
P0 = 0x00;
P2 &= 0x1F;
}
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
//程序主体
void main()
{
cls_buzz();
//初始化部分
P2 = 0xA0;
P0 = 0x00;
P2 = 0X80;
P0 = 0xFF;
while(1)
{
P00 = 0;P01 = 1;P02 = 1; P03 = 1; P04 = 1;P05 = 1;P06 = 1;P07 =1;
Delay500ms();
P00 = 1;P01 = 0;P02 = 1; P03 = 1; P04 = 1;P05 = 1;P06 = 1;P07 =1;
Delay500ms();
P00 = 1;P01 = 1;P02 = 0; P03 = 1; P04 = 1;P05 = 1;P06 = 1;P07 =1;
Delay500ms();
P00 = 1;P01 = 1;P02 = 1; P03 = 0; P04 = 1;P05 = 1;P06 = 1;P07 =1;
Delay500ms();
P00 = 1;P01 = 1;P02 = 1; P03 = 1; P04 = 0;P05 = 1;P06 = 1;P07 =1;
Delay500ms();
P00 = 1;P01 = 1;P02 = 1; P03 = 1; P04 = 1;P05 = 0;P06 = 1;P07 =1;
Delay500ms();
P00 = 1;P01 = 1;P02 = 1; P03 = 1; P04 = 1;P05 = 1;P06 = 0;P07 =1;
Delay500ms();
P00 = 1;P01 = 1;P02 = 1; P03 = 1; P04 = 1;P05 = 1;P06 = 1;P07 =0;
Delay500ms();
}
}
/头文件声明区域
#include
#include
//变量声明区域
//函数定义区域
//关闭蜂鸣器
void cls_buzz(void)
{
P2 = (P2 & 0x1F | 0xA0);
P0 = 0x00;
P2 &= 0x1F;
}
//程序主体
void main()
{
cls_buzz();
//初始化部分
P2 = 0xA0;
P0 = 0x00;
P2 = 0X80;
P0 = 0xFF;
while(1)
{
P0 = OXFE;// 1111 1110
}
}
//头文件声明区域
#include
#include
//变量声明区域
sfr LED = 0x80;
//函数定义区域
//关闭蜂鸣器
void cls_buzz(void)
{
P2 = (P2 & 0x1F | 0xA0);
P0 = 0x00;
P2 &= 0x1F;
}
//程序主体
void main()
{
cls_buzz();
//初始化部分
P2 = 0xA0;
P0 = 0x00;
P2 = 0X80;
P0 = 0xFF;
while(1)
{
LED = 0x7e;//0111 1110
}
}
sfr = ;
// 是你定义的变量名称,用于访问特殊功能寄存器;
// 是特殊功能寄存器的物理地址。
//头文件声明区域
#include
#include
//变量声明区域
unsigned char LED = 0xfe; //LED数据变量
//函数定义区域
//关闭蜂鸣器
void cls_buzz(void)
{
P2 = (P2 & 0x1F | 0xA0);
P0 = 0x00;
P2 &= 0x1F;
}
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
//程序主体
void main()
{
cls_buzz();
//初始化部分
P2 = 0xA0;
P0 = 0x00;
P2 = 0X80;
P0 = 0xFF;
while(1)
{
P0 = LED;
Delay500ms();
LED = _crol_(LED,1);
Delay500ms();
}
}