12 51 独立按键

1.按键介绍

2.独立按键原理

3.编写独立按键控制程序

1. 按键介绍

轻触开关是一种电子开关,使用时,轻轻按开关按钮就可使开关接通,当松开手

时,开关断开。我们使用的开关

如下2. 独立按键原理

图:按键在闭合和断开时,触点会存在抖动现象。

硬件消抖电路

  接线图

 


#include "reg51.h"    //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;


sbit k1=P3^1;	 //定义P31口是k1
sbit led=P2^0;	 //定义P20口是led

/*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
	while(i--);
}

/*******************************************************************************
* 函 数 名         : keypros
* 函数功能		   : 按键处理函数,判断按键K1是否按下
*******************************************************************************/
void keypros()
{
	if(k1==0)		  //检测按键K1是否按下
	{	
		delay(1000);   //消除抖动 一般大约10ms
		if(k1==0)	 //再次判断按键是否按下
		{
			led=~led;	  //led状态取反
		}
		while(!k1);	 //检测按键是否松开
	}		
}


void main()
{
	//k1 默认为高电平,led默认为高电平。
	while(1)
	{
	 keypros();
	}
}

//依次按下k1键,数码管依次显示从1到F。

接线图:


#include "reg51.h"    //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;

u16 i = 0;
sbit k1=P3^1;	 //定义P31口是k1
sbit led=P2;	 //定义P20口是led
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示

/*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
	while(i--);
}

/*******************************************************************************
* 函 数 名         : keypros
* 函数功能		   : 按键处理函数,判断按键K1是否按下,按下,i增1,
*******************************************************************************/
void keypros()
{
	
	if(k1==0)		  //检测按键K1是否按下
	{	
		delay(1000);   //消除抖动 一般大约10ms
		if(k1==0)	 //再次判断按键是否按下
		{
		
				P2 = smgduan[i];
				i++;
			
		}
		if (i == 16)
		{
		 i = 0;  //重置i的值
		}
		while(!k1);	 //检测按键是否松开
	}		
}

/*
按k1键,led数码管从1显示到F。
*/
void main()
{
	//k1 默认为高电平,led默认为高电平。
	while(1)
	{
	 keypros();
	}
}
发布了139 篇原创文章 · 获赞 38 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/tjjingpan/article/details/90731111