【单片机学习】独立按键的基本操作

题目:

按下s7点亮L1指示灯,松开按键熄灭。s6点亮L2指示灯,s5点亮L2指示灯,s5点亮L2指示灯,都是松开熄灭。按键均作去抖。

1.首先将J5处的跳帽接到2~3引脚,使按键s4~s7四个按键的另一端接地,从而成为4个独立键盘。在扫描按键的过程中,发现有按键触发信号后,先做去抖动处理,当确认为按键按下时,才进行相应的功能处理。

2.判断按键s7是否按下:读P3^0引脚,当P3^0为低电平,则s7按下

#include "reg52.h"

sbit s7=P3^0;
sbit s6=P3^1;
sbit s5=P3^2;
sbit s4=P3^3;

sbit L1=P0^0;
sbit L2=P0^1;
sbit L3=P0^2;
sbit L4=P0^3;


//选择寄存器
void Select_HC573(unsigned char channel)
{
	switch(channel)
	{
		case 4:
			P2=(P2&0x1f)|0x80;  //让Y4输出低电平
		break;
		case 5:
			P2=(P2&0x1f)|0xa0;  //让Y5输出低电平
		break;
		case 6:
			P2=(P2&0x1f)|0xc0;  //让Y6输出低电平
		break;
		case 7:
			P2=(P2&0x1f)|0xe0;  //让Y7输出低电平
		break;
	}
}

//独立按键的延时函数
void Delay_Key(unsigned char t)
{
	while(t--);
}

//独立按键
void ScanKeys_Alone()
{
	if(s7==0)
	{
		Delay_Key(100);  //延时消抖
		if(s7==0)  //按下按键
		{
			L1=0;  //灯亮
			while(s7==0); //当s7为低电平时,L1一直亮;为高电平时,L1灭
			L1=1;  //灯灭
		}
	}
	
	if(s6==0)
	{
		Delay_Key(100);  //延时消抖
		if(s6==0)  //按下按键
		{
			L2=0;  //灯亮
			while(s6==0);  
			L2=1;  //灯灭
		}
	}
	
	if(s5==0)
	{
		Delay_Key(100);  //延时消抖
		if(s5==0)  //按下按键
		{
			L3=0;  //灯亮
			while(s5==0); 
			L3=1;  //灯灭
		}
	}
	
	if(s4==0)
	{
		Delay_Key(100);  //延时消抖
		if(s4==0)  //按下按键
		{
			L4=0;  //灯亮
			while(s4==0); 
			L4=1;  //灯灭
		}
	}
}

void main()
{
	Select_HC573(4);
	while(1)
	{
		ScanKeys_Alone();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值