四、51单片机控制独立按键

这篇具有很好参考价值的文章主要介绍了四、51单片机控制独立按键。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、按键简介

按键相关知识。

1.1、按键工作原理

(1)按键内部是机械结构,也就是内部是没有电路的。按键对外表现位四个引脚,但本质上只是两个,引脚是两两连在一起的。按键按下内部引脚导通,松开内部断开。

四、51单片机控制独立按键

(2)电路连接与原理图中图标。

按键一端接地,一端接单片机IO口。

四、51单片机控制独立按键

 (3)按键作为一个输入设备,单片机如何知道按键被按下?

单片机IO接上拉电阻。上拉是为了让引脚默认是高电平,但是上拉的力量抗不住接地,所以按键没有诞下时单片机IO口为高电平,而按下后为绝对0(GND)。

1.2、CPU如何处理按键

(1)轮询式。所谓轮询就是CPU不停的间隔很小时间去查看有没有按键按下,如果按下就处理按键,如果没有按下就下一时间间隔再来查看。(按键什么时候被按下CPU是无法预知的)

(2)中断式

1.3、按键电路接法分类

(1)独立按键

(2)矩阵按键

2、独立按键原理图

四、51单片机控制独立按键

(1)按键接法是一段接地,一端接IO口。

3、独立按键代码

以K1按键为例,接P0.0  IO口。

3.1、轮询方式处理按键

检测到按键,LED灯状态取反

#include <reg52.h>
#include <intrins.h>

/*实现功能
 *按键每按下一次,LED灯状态取反
 */
 

/*位定义*/
sbit K1 = P0^0;
sbit LED = P0^1;


/*函数声明*/
void Delay15ms();		//@12.000MHz


void main(void)
{

	while(1)
	{
		if(K1 == 0)    /*按键有被按下*/
		{
			Delay15ms();   
			if(K1 == 0)
			{
				if(LED == 1)
				{
					LED = 0;
				}
				else
				{
					LED = 1;        /*点亮LED灯*/
				}
				while(K1 == 0)   		/*等待按键弹起,这里也可以加消抖*/
				{
					Delay15ms();
					while(K1 == 0);
				};   
			}
		}
	}
}


void Delay15ms()		//@12.000MHz
{
	unsigned char i, j;

	i = 30;
	j = 43;
	do
	{
		while (--j);
	} while (--i);
}



3.2、按键消抖

(1)按键按下和弹起会发生电平抖动。如下图所示。

四、51单片机控制独立按键

(2)抖动的危害:在抖动时间范围内引脚的电平变化是不稳定的,如果程序在这一段范围内取判断引脚的电平从而判断有无按键,则有很大可能性会误判。

(3)如何消抖

硬件消抖:在硬件设计上想办法降低抖动的幅度及时间,这是一种主动消抖。如按键并联电容。

软件消抖:硬件上不可能完全消除抖动,软件上可以绕开抖动的那一段,这是一种逃避式的消抖。

也就是通过延时消抖,延时时间一般为10-15毫秒。

3.3、完整的按键检测

(1)一个完整的按键事件检测包括:按键按下、按键保持、按键弹起。

(2)一般都认为一次完整的按键事件后才算用户操作了一次按键,程序也只处理一次按键。

4、中断检测独立按键

中断是指单片机主程序运行过程中,出现某些意外情况需要单片机处理,单片机能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

4.1、为什么需要中断

在实际应用开发中,单片机不可能一直轮询查看按键是否按下,单片机还需要去执行其他任务,因此引出中断。

(1)单片机在mai()函数中的while中执行的程序称为主线任务,中断程序中的程序称为中断任务。

(2)中断发生后CPU暂停主线任务转去处理中断任务,完成后再回来接着执行主线任务。

(3)中断式比轮询式更适合处理异步事件,效率更高。

(4)中断处理的事件特点是:无法预料、处理时间短、响应要求急。

4.2、使用单片机外部中断来处理按键

(1)何为外部中断。中断源来自单片机外部就叫外部中断,每个外部中断对应一个特定的单片机IO引脚(譬如在STC89C52单片机中,INT0对应P3^2。在51单片机中,是单片机设计时就定好的,是无法改变的)。

(2)当硬件产生了一个外部中断时CPU就会收到一个中断信号,从而转去执行外部中断对应的处理程序(这个程序是需要自己去编写的)。

(3)外部中断对应哪个引脚,可参考电路原理图和数据手册。

4.3、程序示例

中断处理按键使LED灯状态取反。

#include <reg52.h>
#include <intrins.h>

/*实现功能
 *按键每按下一次,LED灯状态取反(采用外部中断处理按键)
 */
 

/*位定义*/
sbit K1 = P3^2;   	/*外部中断0对应引脚*/
sbit LED = P0^1;


/*函数声明*/
void Delay15ms();		//@12.000MHz


void main(void)
{
	/*外部中断0初始化*/
	IT0 = 1;   //设置外部中断0出发方式(1:下降沿触发 0:低电平触发)
	EX0 = 1;   //使能外部中断0
	EA = 1;    //打开全局中断开关
	
	
	while(1)
	{
		/*编写主线任务*/
	}
}


/*按键消抖延时函数*/
void Delay15ms()		//@12.000MHz
{
	unsigned char i, j;

	i = 30;
	j = 43;
	do
	{
		while (--j);
	} while (--i);
}

/*
 *功能:外部中断0中断处理程序
 *注意:
 *	exint0:中断函数名,可以任意取
 *	下降延触发中断
 *  该函数不用声明
 */
void exint0() interrupt 0
{
	Delay15ms();     /*按键消抖*/
	if(K1 == 0)
	{
		if(LED == 1)
		{
			LED = 0;
		}
		else
		{
			LED = 1;            /*点亮LED灯*/
		}
		while(K1 == 0)   		/*等待按键弹起,这里也可以加消抖*/
		{
			Delay15ms();
			while(K1 == 0);
		};   
	}
}





4.4、程序解释

(1)IT0这一位用来设置中断的触发模式:下降沿触发(Falling)或者低电平触发(low level)

(2)EX0这一位是INT0的开关。如果EX0等于0则外部中断在单片机内部被关闭,此时CPU无法收到INT0的中断信息所以不会处理INT0;如果需要使用INT0就一定要设置为1。

(3)EA是全局的中断开关。EA如果关掉则整个CPU不能响应中断,所有中断都被关了。光EA打开也不一定能响应中断,还得具体的中断开关打开才行。

(4)IT0、EX0、EA在 <reg52.h> 头文件中定义。文章来源地址https://www.toymoban.com/news/detail-412961.html

到了这里,关于四、51单片机控制独立按键的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在51单片机中使用一个独立按键控制流水灯方向

    用独立按键控制流水灯转向,按下独立按键流水灯向右移动,再按下独立按键流水灯向左移动 此代码用到 逻辑左移:_crol_(移动对象,移动的位数) 逻辑右移:_cror_(移动对象,移动的位数)

    2024年02月07日
    浏览(30)
  • 【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯

    实验内容: 利用所学的单片机知识及电路知识编程实现单片机 I/O 口检测按键输入电平。         1.选中 8 位数码管的其中 1 位数码管,当独立按键 1 每按下一次,数码管加一(按下期间加 1),范围为 0—F;         2.选中 8 位数码管的另 1 位数码管,当独立按键 2

    2024年02月06日
    浏览(32)
  • 51单片机 --独立按键

    前言 前几章介绍的都是IO 口输出的使用,这一教程我们通过独立按键实验来介绍IO 口作为输入的使用。开发板上板载8 个独立按键。本教程所要实现的功能是:通过开发板上的独立按键K1 控制D1 指示灯亮灭。大家可以参考前面的实验内容。 一、按键介绍 按键是一种电子开关

    2024年02月06日
    浏览(45)
  • 单片机C51(STC89C52RC)独立按键控制LED亮灭、状态、显示二进制、位移

    目录 1.独立按键控制LED灯亮灭 2.独立按键控制LED灯状态 3.独立按键控制LED灯显示二进制 4.独立按键控制LED灯位移 5.附录 独立按键控制LED灯状态,在独立按键按下时,LED灯点亮,松手后LED灯熄灭。独立按键按下为0,松开为1,在STC89C52RC芯片上,P2为LED灯IO口,P2_0表示第一个LED灯

    2024年02月01日
    浏览(82)
  • 51单片机——独立按键实验,小白讲解,相互学习

    按键介绍:         按键是一种电子开关,使用时轻轻按开关按钮就可式开关接通,当松手时,开关断开。开发板上使用的按键及内部简易图如下图:         按键管脚两端距离长的表示默认是导通状态,距离短的默认是断开状态,如果按键按下,初始导通状态变为断

    2024年02月04日
    浏览(45)
  • 【51单片机】LED与独立按键(学习笔记)

    LED:发光二极管 补:电阻读数 102 = 10 00 = 1k 473 = 47 000 1、新建工程:Project = New Project Ctrl + Shift + N :新建文件夹 2、选型号:Atmel-AT89C52 3、xxx提示?选否 4、Source Group = 右键 = Add New Item … = C文件\\\"main.c\\\" 5、设置勾选创建HEX File文件 6、编译 CPU通过对寄存器的控制,寄存器通过驱

    2024年02月06日
    浏览(34)
  • 51单片机——秒表(定时器扫描独立按键和数码管)

            这次实验主要是用定时器来定时扫描独立按键和数码管,代替两个模块函数中的延时函数。用定时器定时扫描的好处就是,主函数中的延时并不会影响按键的检测和数码管的扫描,只会影响响应速度。因为定时器是溢出就会执行中断程序,是定时的扫描。 改进的

    2024年02月10日
    浏览(39)
  • 单片机实验三 独立按键控制LED实验

    1.熟悉实验软件和硬件,进行正确的接线; 2.8个不同的按键对应不同的8个灯,按下按键对应的灯就会亮。 1.Keil uVision4 2.PZISP自动下载软件 3.HC6800S开发板 按键实物图 按键按下就会产生一个脉冲信号,检测脉冲信号就可以知道是否有按键被按下去。 按键原理图 按键之间相互独

    2024年02月08日
    浏览(28)
  • C51单片机的电子时钟(数码管显示+独立按键模块修改及暂停时间)

    IMG_1120 通过查看这三个原理图我们可以得知控制K1、K2、K3及K4是通过P31、P30、P32及P33来实现的,控制8个数码管是P22、P23及P24来实现, 控制发光二极管则由P00-P07来实现。 代码分为三部分分别为main.c、key.h、key.c scankey()函数的主要代码,通过软件入手提高系统的可靠性,防止外

    2024年02月05日
    浏览(41)
  • 设计分享|单片机独立按键控制4个LED灯亮灭

    目录 具体实现功能 设计介绍 51单片机简介 设计思路 设计内容 仿真图(protues8.7) 程序(Keil5) 具体实现功能 单片机四个按键分别控制四个LED的亮灭! 设计介绍 51单片机简介 51单片是一种低功耗、高性能CMOS-8位微控制器,具有8K可编程Flash存储器,使得其为众多嵌入式控制应

    2024年02月06日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包