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);
	}
}
相关推荐
stm 学习ing30 分钟前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
wenchm4 小时前
细说STM32单片机DMA中断收发RTC实时时间并改善其鲁棒性的另一种方法
stm32·单片机·嵌入式硬件
编码追梦人6 小时前
如何实现单片机的安全启动和安全固件更新
单片机
电子工程师UP学堂6 小时前
电子应用设计方案-16:智能闹钟系统方案设计
单片机·嵌入式硬件
飞凌嵌入式6 小时前
飞凌嵌入式T113-i开发板RISC-V核的实时应用方案
人工智能·嵌入式硬件·嵌入式·risc-v·飞凌嵌入式
blessing。。7 小时前
I2C学习
linux·单片机·嵌入式硬件·嵌入式
嵌新程9 小时前
day03(单片机高级)RTOS
stm32·单片机·嵌入式硬件·freertos·rtos·u575
Lin2012309 小时前
STM32 Keil5 attribute 关键字的用法
stm32·单片机·嵌入式硬件
电工小王(全国可飞)9 小时前
STM32 RAM在Memory Map中被分为3个区域
stm32·单片机·嵌入式硬件
maxiumII9 小时前
Diving into the STM32 HAL-----DAC笔记
笔记·stm32·嵌入式硬件