03.按键控制灯

 原理:按键和灯不是我们传统理解的思维,传统按键和灯是在同一个电路中的。而我们单片机编程按键和灯是分开的两个电路,通过单片机作为媒介来处理数据,通过逻辑来实现按键控制灯

怎么知道sw1按键被按下
KEY1 位置和 GND 接通,表现为低电平,值为 0
怎么知道sw1按键没有被按下
KEY1 位置通过上拉电阻到 5V ,表现为高电平,值为 1

key1和key2在单片机中有所对应的引脚,所以地址如下

 

#include "reg52.h"
#include <intrins.h>
sbit key1 = P2^1;
sbit ledOne = P3^7;
sbit key2 = P2^0;


void Delay50ms()		//延时50ms
{
	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 3;
	j = 26;
	k = 223;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{ 
	
	int ledMark = 0; //定义要放第一行
	ledOne = 1;
	
	//查询法检测,是否被按下
	while(1){
		if(key1 == 0)//KEY1位置和GND接通,表现为低电平,值为0
		{
				//感觉被按下,不知道是抖动还是人为,延迟50ms再判断一次
				//软件消除抖动
				Delay50ms();//延迟50ms
				if(key1 == 0)
				{
				//灯亮,给一个P3^7低电平
				ledMark = 1;
				}
		}	
		if(key2 == 0)//KEY2位置和GND接通,表现为低电平,值为0
		{
				 ledMark = 0;//灭
		}
		
		if(ledMark == 0)
		{
			ledOne = 1;
		}else{
			ledOne = 0;
		}
	}
}

为了防止按键抖动使其过于灵敏的亮灯,我们使用延时,使按键按的时间延长,这样就不会发生误差

再定义一个ledMark,让处理起来更加便捷 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值