51单片机学习篇-- --独立按键

开篇先说一句废话····
本旺名字叫萨摩耶,,Please 叫我旺财,,,哈哈,招财进宝嘛!

独立按键

之前是电脑输入,让单片机输出,而这个独立按键则是单片机上输入并作出相应的反应,本旺在学习这一部分内容之前是非常激动的。

那啥是个独立按键呢?轻触开关是一个电子开关,使用的时候轻轻按下按键就会使开关接通,松开手之后开关断开。下面是独立按键的照片。
独立按键根据上图,应该有四个管脚,其中一个在后面,前面的左,中,右三个管脚中,左边和中间的管脚(下图中的3和4)相对较近,中间和右边的管脚(下图中的2和4)相对较远。
在这里插入图片描述相对较远的两个管脚(1和3,2和4)初始是导通的,而相对较近的两个管脚(1和2,3和4)初始是断开的。当把按键按下去的时候,原本断开的管脚现在接通。

在这里插入图片描述这四个按键的同一端都接地,当按键按下去后,低电平接入P3口,所以判断按键是否按下就是判断对应端口是否是低电平(0)。
还有一个问题就是按键的抖动。因为按键是人为按下的,会出现暂时的抖动,然后进入稳定状态。
在这里插入图片描述而消抖的方法有两种,一是:硬件消抖,其实就是在接一个电容,前沿抖动和后沿抖动这段时间用电容的充电和放电来消除;二是:软件消抖,因为前沿和后沿抖动这段时间用延时函数来消抖。

独立按键控制LED的亮灭

当按键按下时,LED亮,再次按下时,LED灭。

#include "reg52.h"

sbit k1=P3^1;    //k1按键
sbit led=P2^0;   //D1
void Delay(u16 n)		//@11.0592MHz
{
	while(n--){
		unsigned char i, j;
	
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
	}
}
void main(){
	if(k1==0){
		Delay(100);  //消抖
		if(k1==0){
			led=~led;
		}
		while(!k1);
	}
}

同理,可以用独立按键控制数码管的显示。

/*
其他同上,只写端口定义和主函数内容
*/
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit k1=P3^1;

void main()
{
	LSA=1;LSB=1;LSC=1;   // 第一个数码管
	while(1)
	{
		if(k1==0)
		{
			Delay(100);
			if(k1==0)
				P0=0x7f;
			else
				P0=0x00;
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值