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);
	}
}
相关推荐
niuTaylor1 小时前
大学生机器人比赛实战(三)经验篇
单片机·嵌入式硬件·机器人
promising-w5 小时前
【TI MSPM0】UART学习
嵌入式硬件·学习·ti 单片机
damo王5 小时前
单片机实现多线程的方法汇总
单片机·嵌入式硬件
月阳羊6 小时前
【无人机】PX4 飞控系统架构
嵌入式硬件·系统架构·无人机
基极向上的三极管6 小时前
【51单片机】3-3【定时器/计数器/中断】超声波测距模块测距
单片机·嵌入式硬件·51单片机
LXL_247 小时前
一、STM32简介
笔记·stm32·嵌入式硬件
基极向上的三极管11 小时前
【51单片机】2-8【I/O口】数码管显示矩阵按键值
51单片机
橘猫0.o13 小时前
【STM32】Flash详解
stm32·单片机·嵌入式硬件
charlie11451419114 小时前
IMX6ULL学习整理篇——Linux使用更现代的GPIO操作简单设备
linux·嵌入式硬件·学习·教程·mpu·gpio子系统·pinctl
_Ivan_14 小时前
STM32 HAL库 CANFD配置工具
stm32·单片机·嵌入式硬件