51单片机(3)—独立按键

一.认识独立按键

对单片机中独立按键的区域进行学习,位于单片机左下角

 内部构造:

 原理图:按下的时候连接(相当于导线相连),反之断开连接

二.实例学习

 1.独立按键控制LED亮灭

        上一节的控制LED开关是通过对寄存器的操作来实现的,寄存器八个为一组,如果只操作P2的话需要同时为八个赋值,但是现在只想要操作最低位。

进入头文件中

 每位单独的操作,位寄存器

 P2_0 相当于是单片机上的一个端口,这个端口就是链接右边第一个LED灯的,等于左边第七个LED直接不给信号,只给右边第一个一个亮灯的信号

一位的只需要0和1,而不需要和之前的0xEF一样满足进制数

 在stc中运行发现可以达到独立按键K1控制第一个LED灯的开关。

2.独立按键控制LED状态

通过软件来达到消除按键延时的周期,达到按键按下才亮灯的效果,减少按键抖动的效果。

 单片机通电后P2_0,默认为高电平,需要进行取反

3.独立按键控制LED显示二进制

前提准备:独立按键控制功能 延时函数

//延时函数
void Delay(unsigned int xms)
{	
	unsigned char i, j;
    while(xms--)
    {
	    i = 2;
	    j = 239;
	    do
	    {
	    	while (--j);
	    } while (--i);
    }
}

 主函数循环体

不能对P2口直接进行操作,达不到想要的功能,取反有限制,需要引入一个变量来进行操作,再将这个变量给P2口

 最终能实现显示LED二进制

4.独立按键控制LED移位

仍需要延时函数,复制3.独立按键控制LED显示二进制中的延时函数即可

需要左移

 等于8时需要回到0,重新开始

完整代码如下:

#include <REGX52.H>
void Delay(unsigned int xms);
unsigned char LEDNum;

void main()
{	
	P2=~0x01;
	while(1)
	{
		if(P3_1==0)
		{
			Delay(20);
			while(P3_1==0);
			Delay(20);
			
			LEDNum++;
			if(LEDNum>=8)
					LEDNum=0;
			P2=~(0x01<<LEDNum);
		}
	}
}
void Delay(unsigned int xms)		
{
	unsigned char i, j;
	while(xms--)
		{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

 用于初始化,效果是让LED灯从D1开始亮,而不是D2.

 5.如何实现多个按键移位

在4的基础上进行操作,对不同的接口操作。

为什么是左移?

因为每次移位取反后P都是重新赋值0x01再移位取反的。

比如: LEDNum = 0,LEDNum++后LEDNum=1,那P = ~(0x01 << 1)点亮第二个灯

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绝迹刻本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值