11:按键

1、按键的相关知识

分为独立按键和矩阵按键

在这里插入图片描述

在这里插入图片描述

2、独立按键

在这里插入图片描述由图得独立按键右边接地,左边独立连接到插座JP5。
但我们的独立按键和单片机连接时如下图:
在这里插入图片描述

(1)按键电路接法、上拉电阻。上拉是为了让引脚默认是高电平,但是上拉的力量扛不住接地,所以按键没有按下时上拉的力量保证了IO引脚输入为1而按下后IO引脚输入绝对为0
(2)按键这个设备对我们的意义:按键对于我们CPU来说是一个输入设备,输入的是人的操作。CPU通过监测按键连接的IO引脚的电平输入是1还是0就知道外部有没有人按下这个按键。相当于人通过按按键给CPU输入了一个信号,这个信号可以被CPU监测到从而指导CPU去做一定的工作。

3、CPU如何处理按健

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

4、编程测试(用LED1作为指示)

(1)使用轮询法来处理独立按键K1,单片机在循环中每隔很短的时间就检测K1对应的P1.0引脚的输入电平是1还是0,如果是1则表示按键没有按下,延时等待下一次检验;如果是,表示按键己经按下了,点亮一颗LED1作为指示。

#include <REGX51.H>

sbit K1 = P1^0;
sbit LED1 = P0^0;


void main (void)
{
	while(1)
	{
		if(K1 == 0)//K1按下
		{
			LED1 = 0X01;//LED1亮
		}
		else
			LED1 = 0;
	}
}

5 、编程测试(用8个LED作为指示)

按下K1时LED1亮,按下K2时LED2亮,以此类推。

#include <REGX51.H>


void main (void)
{
	while(1)
	{
		if (P1 == 0xFE)      //K1按下
			 P0 = 0X01;      //LED1亮
        else if(P1 == 0xFD)  //K2按下
			 P0 = 0X02;      //LED2亮
        else if(P1 == 0xFB)  //K3按下
		   P0 = 0X04;        //LED3亮
	    else if(P1 == 0xF7)  //K4按下
			 P0 = 0X08;      //LED4亮
		else if(P1 == 0xEF)  //K5按下
		   P0 = 0X10;        //LED5亮
		else if(P1 == 0xDF)  //K6按下
			 P0 = 0X20;      //LED6亮
		else if(P1 == 0xBF)  //K7按下
		   P0 = 0X40;        //LED7亮
		else if(P1 == 0x7F)  //K8按下
		   P0 = 0X80;        //LED8亮
		else
			 P0 = 0X00;	
	}
}		

代码改进;

#include <REGX51.H>

void main (void)
{
	unsigned char i;

	while(1)
	{
		for (i=0; i<=7; i++)
		{
			if((P1 & (0x01<<i))	== 0) //位与运算,判断是否按下							
	        {
	          P0 = (0X01 << i);
	          break;
            }
            else
                P0 = 0X00;			
		}		
		
	 }
}


  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值