目录
摘要:本文介绍了基于AT89C51单片机的4种LED控制案例:1)按键状态显示(即时/触发两种模式);2)两排LED灯移位控制(上下左右四个方向);3)LED分组控制(逐个点亮、上下半区控制、全灭);4)4×4矩阵按键控制LED灯带(按键值决定亮灯数量)。所有案例均采用I/O口电平检测控制LED电路,包含完整的电路原理图(含晶振、复位、按键和LED模块)和C语言源代码实现,通过延时函数、位操作和键盘扫描等技术实现交互控制功能。
1案例视频效果展示
1.1例子1:LED灯表示按键状态(两种方式)
例子6:LED灯表示按键状态(两种方式)
1.2例子2:按键控制两排LED小灯闪烁移位
例子7:按键控制两排LED小灯闪烁移位
1.3例子3:按键控制LED灯逐个点亮/分组点亮/全部熄灭
例子8:按键控制LED灯逐个点亮/分组点亮/全部熄灭
1.4例子4:4*4矩阵按键实现带状LED灯控制
例子9:4*4矩阵按键实现带状LED灯控制
2例子1:LED灯表示按键状态(两种方式)
实现功能:K1、K2按下时LED点亮,松开时熄灭, K3、K4按下并释放时LED点亮,再次按下并释放时熄灭。
本质:单片机的某些I/O 口输入高/低电平作为判断条件控制其他I/O 口输出高/低电平,去驱动一个LED。
2.1电路原理图
2.1.1电路组成及接线
名称 |
接线 |
AT89C51单片机 |
XTAL1/XTAL2—>连接晶振电路 RST—>连接复位电路 P0.0-P0.3—>连接共阳极LED小灯电路 P1.4-P1.7—>连接按键电路 |
复位电路 |
|
晶振电路 |
|
按键电路 |
|
共阳极LED小灯电路 |
2.2控制程序
2.2.1控制程序步骤
库文件与引脚定义
延时函数
主程序(按键状态作为输入(判断条件),LED状态作为输出)
2.2.2源代码
//功能:K1、K2按下时LED点亮,松开时熄灭, K3、K4按下并释放时LED点亮,再次按下并释放时熄灭;
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P0^0;
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;
sbit K1=P1^4;
sbit K2=P1^5;
sbit K3=P1^6;
sbit K4=P1^7;
//延时
void DelayMS(uint x)
{
uchar i;
while(x--) for(i=0;i<120;i++);
}
//主程序
void main()
{
P0=0xff;
P1=0xff;
while(1)
{
LED1=K1;
LED2=K2;
if(K3==0)
{
while(K3==0);
LED3=~LED3;
}
if(K4==0)
{
while(K4==0);
LED4=~LED4;
}
DelayMS(10);
}
}