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

相关推荐
VBsemi-专注于MOSFET研发定制12 分钟前
奶茶制作机器人功率MOSFET选型方案——高效、精准与可靠驱动系统设计指南
单片机·嵌入式硬件
大前端下的小角色40 分钟前
UE5.6 Cesium 插件编译踩坑记录(UE 5.6 + MSVC 14.38 + CMake 3.31)
c++
feng_you_ying_li2 小时前
c++之哈希表的介绍与实现
开发语言·c++·散列表
水云桐程序员2 小时前
单片机项目从入门到精通
单片机·嵌入式硬件
Wave8452 小时前
STM32 裸机中断与 FreeRTOS 中断管理的四大核心差异
单片机·嵌入式硬件
xh didida2 小时前
C++ -- string
开发语言·c++·stl·sring
m晴朗2 小时前
测试覆盖率从35%到80%:我用AI批量生成C++单元测试的完整方案
c++·gpt·ai
无限进步_2 小时前
【C++&string】大数相乘算法详解:从字符串加法到乘法实现
java·开发语言·c++·git·算法·github·visual studio
若忘即安2 小时前
【硬件电路设计18】WIFI+BlueTooth
单片机·嵌入式硬件
苏纪云3 小时前
蓝桥杯考前突击
c++·算法·蓝桥杯