单片机---独立按键

[3-1] 独立按键控制LED亮灭_哔哩哔哩_bilibili

按下的时候连接,松开的时候断开。

一头接GND(电源负极),另一头接I/O口。

单片机上电时,所有I/O口为高电平。

按键没有按下,I/O口为高电平。

按键按下,I/O口为低电平。

寄存器会检测I/O口的值,读入寄存器中。

直接读寄存器,值应该为1.

按键按下,寄存器值应该为0.

(1)

直接对位进行操作:

#include <REGX52.H>
#include <INTRINS.H>

void main()
{
	P2_0=0;
	while(1)
	{
	}
}

(2)

按下K1,LED1亮,松开,LED1灭。

#include <REGX52.H>
#include <INTRINS.H>

void main()
{
	while(1)
	{
		if(P3_1==0){
			P2_0=0;
		}
		else{
			P2_0=1;
		}
	}
}

(3) 

按键按下,灯亮,再按下,灯灭:

#include <REGX52.H>
#include <INTRINS.H>

void Delay1ms()		//@11.0592MHz
{
	unsigned char i, j;

	_nop_();
	i = 2;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
}
void Delay_time(int x)//ms
{
	int i;
	for(i=0;i<x;i++)
	{
		Delay1ms();
	}
}
void main()
{
	P2_0=0;//点亮LED1
	while(1)
	{
		if(P3_1==0){
			Delay_time(20);//消抖
			//按键按下
			while(P3_1==0)
			{
			}
			Delay_time(20);//消抖
			P2_0=~P2_0;
		}
	}
}

(4) 

LED1亮,按下按钮,LED2亮,,,再按,LED8亮,然后,LED1亮。

都不亮,1111 1111

LED1亮,1111 1110

LED2亮,1111 1101

LED3亮,1111 1011

LED8亮,0111 1111

#include <REGX52.H>
#include <INTRINS.H>

void Delay1ms()		//@11.0592MHz
{
	unsigned char i, j;

	_nop_();
	i = 2;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
}
void Delay_time(int x)//ms
{
	int i;
	for(i=0;i<x;i++)
	{
		Delay1ms();
	}
}
void main()
{
	P2=0xFE;
	while(1)
	{
		if(P3_1==0){
			Delay_time(20);
			while(P3_1==0)
			{
			}
			Delay_time(20);
			P2<<=1;
			P2=P2|0x01;
			if(P2==0xFF)P2=0xFE;
		}
	}
}

(5) 

LED1亮,按下按钮,LED8亮,按下按钮,LED7亮,,,再按,LED1亮,然后,LED8亮。

都不亮,1111 1111

LED1亮,1111 1110

LED8亮,0111 1111

LED7亮,1011 1111

LED3亮,1111 1011

LED2亮,1111 1101 

LED1--->LED8--->LED7--->LED6--->LED1(逆循环) 

#include <REGX52.H>
#include <INTRINS.H>

void Delay1ms()		//@11.0592MHz
{
	unsigned char i, j;

	_nop_();
	i = 2;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
}
void Delay_time(int x)//ms
{
	int i;
	for(i=0;i<x;i++)
	{
		Delay1ms();
	}
}
void main()
{
	P2=0xFE;
	while(1)
	{
		if(P3_0==0)
		{
			Delay_time(20);
			while(P3_0==0)
			{
			}
			Delay_time(20);
			P2>>=1;
			P2=P2|0x80;
			if(P2==0xFF)P2=0x7F;
	  }
	}
}

(6) 

按下K1,LED1--->LED2--->LED8--->LED1

按下K2,,LED1--->LED8--->LED7--->LED1 

#include <REGX52.H>
#include <INTRINS.H>

void Delay1ms()		//@11.0592MHz
{
	unsigned char i, j;

	_nop_();
	i = 2;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
}
void Delay_time(int x)//ms
{
	int i;
	for(i=0;i<x;i++)
	{
		Delay1ms();
	}
}
void main()
{
	P2=0xFE;
	while(1)
	{
		
		if(P3_1==0){
			Delay_time(20);
			while(P3_1==0)
			{
			}
			Delay_time(20);
			P2<<=1;
			P2=P2|0x01;
			if(P2==0xFF)P2=0xFE;
		}
		
		if(P3_0==0)
		{
			Delay_time(20);
			while(P3_0==0)
			{
			}
			Delay_time(20);
			P2>>=1;
			P2=P2|0x80;
			if(P2==0xFF)P2=0x7F;
	  }
	}
}

(7) 

使用LED8---LED1,8个灯表示数a的二进制形式。

开始时a=0

按下按钮,a++

a=255时,按下按钮,a=0。 

观察8个灯的变化

0000 0000

0000 0001

0000 0010

0000 0011

......

1111 1111

0000 0000

#include <REGX52.H>
#include <INTRINS.H>

void Delay1ms()		//@11.0592MHz
{
	unsigned char i, j;

	_nop_();
	i = 2;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
}
void Delay_time(int x)//ms
{
	int i;
	for(i=0;i<x;i++)
	{
		Delay1ms();
	}
}
void main()
{
	unsigned char a=0x00;
	while(1)
	{
		if(P3_1==0){
			Delay_time(20);
			while(P3_1==0)
			{
			}
			Delay_time(20);
			a=a+1;
			P2=~a;
			if(a==256)a=0x00;
		}
	}
}

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-30 13:08:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-30 13:08:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-30 13:08:02       87 阅读
  4. Python语言-面向对象

    2024-03-30 13:08:02       96 阅读

热门阅读

  1. Ubuntu安装nginx-http-flv,并获取统计信息

    2024-03-30 13:08:02       48 阅读
  2. 《责任链模式(极简c++)》

    2024-03-30 13:08:02       44 阅读
  3. 使用verilog实现俄罗斯方块游戏

    2024-03-30 13:08:02       40 阅读
  4. pyinstaller将文件内容打包到可执行文件本身中

    2024-03-30 13:08:02       40 阅读
  5. Ubuntu服务器搭建 - 环境篇

    2024-03-30 13:08:02       37 阅读
  6. RabbitMQ的部分模式

    2024-03-30 13:08:02       37 阅读
  7. 关于学习编程和技术的自述

    2024-03-30 13:08:02       42 阅读
  8. 每日更新5个Python小技能 | 第六期

    2024-03-30 13:08:02       38 阅读
  9. Hive窗口函数笔试题(面试题)

    2024-03-30 13:08:02       35 阅读
  10. Android studio 老旧版本下载地址

    2024-03-30 13:08:02       44 阅读
  11. leetcode 62.不同路径

    2024-03-30 13:08:02       43 阅读