51单片机学习--独立按键控制LED


功能:按下K1时D1亮,松开时D1灭,P3_1对应K1 , P2_0对应D1

复制代码
#include <REGX52.H>

void main()
{
	while(1) {
		if(P3_1 == 0) //按下K1
		{
			P2_0 = 0;
		}
		else
		{
			P2_0 = 1;
		}
	}

}


按下按钮和松开按钮时会有抖动,所以需要用延时函数来避免抖动造成的影响

功能:每按一次按钮,改变一次D1的状态

在这里如果一直按着按键就无法跳出while,就无法改变灯的状态

复制代码
#include <REGX52.H>
#include <INTRINS.H>

void Delay(unsigned int t)		//@11.0592MHz
{
	unsigned char i, j;
	while(t --)
	{
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
	}
}

void main()
{
	while(1)
	{
		if(P3_1 == 0) //按下K1
		{
			Delay(20); //按下消抖
			while(P3_1 == 0); //按完松开才能执行下一步操作
			Delay(20); //松开消抖
			
			P2_0 = ~P2_0; //亮变灭,灭变亮
		}
	}

}


功能:用LED灯实现二进制,每按一次加1

复制代码
#include <REGX52.H>
#include <INTRINS.H>

void Delay(unsigned int t)		//@11.0592MHz
{
	unsigned char i, j;

	while(t --)
	{
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
	}
}

void main()
{
	unsigned char LedNum = 0; //刚好八位,存P2的状态
	
	while(1)
	{
		if(P3_1 == 0)
		{
			Delay(20);
			while(P3_1 == 0);
			Delay(20);
			
			LedNum ++;
			P2 = ~LedNum;
		}
	}
}


功能:每按一次,LED灯移动一位

复制代码
#include <REGX52.H>
#include <INTRINS.H>

void Delay(unsigned int t);

unsigned char LedNum; //表示移动位数


void main()
{
	
	while(1)
	{
		if(P3_1 == 0) //按下K1
		{
			Delay(20);
			while(P3_1 == 0);
			Delay(20);
			
			LedNum ++;
			if(LedNum == 8) LedNum = 0;
			
			P2 = ~(0x01 << LedNum);
		}
		if(P3_0 == 0) //按下K2
		{
			Delay(20);
			while(P3_0 == 0);
			Delay(20);
			
			if(LedNum == 0) LedNum = 7;
			else LedNum --;
			
			P2 = ~(0x01 << LedNum);
		}
	}
}

void Delay(unsigned int t)
{
	unsigned char i, j;

	while(t --)
	{
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
	}
}
相关推荐
anghost1502 小时前
基于 STM32 的多传感器健康监测系统设计
stm32·单片机·嵌入式硬件
玉~你还好吗2 小时前
【嵌入式电机控制#34】FOC:意法电控驱动层源码解析——HALL传感器中断(不在两大中断内,但重要)
单片机·嵌入式系统·电机控制
STC_USB_CAN_80513 小时前
所有普通I/O口都支持中断的51单片机@Ai8051U, AiCube 图形化配置
单片机·嵌入式硬件·51单片机
正点原子4 小时前
《ESP32-S3使用指南—IDF版 V1.6》第三十四章 RGB触摸实验
单片机·物联网·嵌入式
码小文5 小时前
Altium Designer 22使用笔记(8)---PCB电气约束设置
笔记·嵌入式硬件·硬件工程·ad22
dumpling01205 小时前
新手向:使用STM32通过RS485通信接口控制步进电机
stm32·单片机·嵌入式硬件
hazy1k5 小时前
STM32-FreeRTOS快速入门指南(中)
stm32·单片机·嵌入式硬件
清风6666666 小时前
基于51单片机自动浇花1602液晶显示设计
单片机·嵌入式硬件·mongodb·毕业设计·51单片机·课程设计
古译汉书6 小时前
嵌入式-SPI番外之按钮驱动程序的编写-Day15
c语言·stm32·单片机·嵌入式硬件·mcu·算法
小莞尔11 小时前
【Proteus仿真】【51单片机】基于51单片机密码锁
stm32·单片机·嵌入式硬件·51单片机·proteus