51单片机——按键控制LED流水灯

引言

在电子制作和嵌入式系统学习中,51 单片机是一个经典且入门级的选择。按键控制 LED 流水灯是 51 单片机的一个基础应用,通过这个实例,我们可以深入了解单片机的输入输出控制原理。

51 单片机简介

51 单片机是对所有兼容 Intel 8051 指令系统的单片机的统称。它具有体积小、成本低、功能强等特点,广泛应用于各种控制领域。其内部包含中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、定时 / 计数器和多种 I/O 接口等部件。

按键控制 LED 流水灯的功能及作用

功能

通过按键控制 LED 灯按照一定顺序依次点亮和熄灭,形成流水灯效果。按下按键时,流水灯开始工作;再次按下按键,流水灯停止工作。

作用

  1. 学习单片机基础:这个项目是学习单片机 I/O 口控制的绝佳实例,能帮助初学者熟悉单片机的基本编程和硬件连接。
  2. 状态指示:在实际应用中,LED 流水灯可以作为设备状态的可视化指示,例如显示系统的运行状态、数据传输状态等。
  3. 人机交互:按键作为输入设备,实现了人与单片机系统的交互,为更复杂的人机交互设计打下基础。

硬件连接

  1. 单片机:选择常见的 STC89C52 单片机作为核心控制单元。
  2. 按键:一端连接到单片机的 I/O 口(如 P3.2),另一端接地。按键按下时,对应的 I/O 口电平被拉低。
  3. LED 灯:多个 LED 灯的阴极分别连接到单片机的不同 I/O 口(如 P1.0 - P1.7),阳极通过限流电阻连接到电源正极。当 I/O 口输出低电平时,对应的 LED 灯点亮。

软件编程

开发环境

使用 Keil C51 作为开发工具,编写 C 语言代码。

代码实现:

#include <REGX51.H>
#include <intrins.h>


unsigned char Keynumber,LEDMode;

//延时函数
void delay(unsigned int t)
{
	unsigned char i;
	while(t--)
	{
		for(i=0;i<120;i++);
	}
}

//定时器0初始化
void Timer0Init(void)		
{
	TMOD &= 0xF0;		
	TMOD |= 0x01;		
	TL0 = 0x18;		
	TH0 = 0xFC;		
	TF0 = 0;		
	TR0 = 1;		
	EA=1;
	ET0=1;
}


//独立按键模块
unsigned int Key()
{
	unsigned char KeyNum=0;
	
	if(P3_0==0){delay(20);while(P3_0==0);delay(20);KeyNum=1;}
	if(P3_1==0){delay(20);while(P3_1==0);delay(20);KeyNum=2;}
	if(P3_2==0){delay(20);while(P3_2==0);delay(20);KeyNum=3;}
	if(P3_3==0){delay(20);while(P3_3==0);delay(20);KeyNum=4;}
	return KeyNum;
}


void main()
{
	P2=0xFE;
	Timer0Init();
	while(1)
	{
		Keynumber=Key();
		if(Keynumber)
		{
			if(Keynumber==1)
			{
				LEDMode++;
				if(LEDMode>=2)LEDMode=0;
			}
		}
	}
}

void Timer0() interrupt 1
{
	static unsigned int T0count;
	TL0 = 0x18;		//??????
	TH0 = 0xFC;		//??????
	T0count++;
	if(T0count>=1000)
	{
		T0count=0;
		if(LEDMode==0)
		{
			P2=_crol_(P2,1);
		}
		if(LEDMode==1)
		{
			P2=_cror_(P2,1);
		}
		
	}
}

总结

通过本文介绍的 51 单片机按键控制 LED 流水灯项目,我们学习了单片机的基本硬件连接和软件编程方法。这个项目不仅是一个有趣的电子制作,更是深入学习嵌入式系统的基石。希望读者通过实践,能够掌握更多单片机应用技巧,开启电子世界的探索之旅。

相关推荐
Hunter_pcx39 分钟前
[C++技能提升]插件模式
开发语言·c++
云山工作室1 小时前
基于物联网的风机故障检测装置的设计与实现
单片机·物联网·毕业设计·毕设
小关1231 小时前
STM32补充——IAP
stm32·单片机·嵌入式硬件
左手の明天1 小时前
【C/C++】C++中使用vector存储并遍历数据
c语言·开发语言·c++
PaLu-LI1 小时前
ORB-SLAM2源码学习:Initializer.cc(13): Initializer::ReconstructF用F矩阵恢复R,t及三维点
c++·人工智能·学习·线性代数·ubuntu·计算机视觉·矩阵
呆呆珝1 小时前
RKNN_C++版本-YOLOV5
c++·人工智能·嵌入式硬件·yolo
十月旧城2 小时前
51单片机入门_01_单片机(MCU)概述(使用STC89C52芯片)
单片机·嵌入式硬件·51单片机
c++初学者ABC2 小时前
蓝桥杯LQ1044 求完数
c++·算法·lq蓝桥杯
_GR3 小时前
2013年蓝桥杯第四届C&C++大学B组真题及代码
c语言·数据结构·c++·算法·蓝桥杯
CodeClimb4 小时前
【华为OD-E卷 - VLAN资源池 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od