蓝桥杯单片机模块-按键

目录

前言:

按键底层代码

使用方法:


前言:

本篇介绍了蓝桥杯单片机按键模块

按键底层代码

#include <STC15F2K60S2.H>

unsigned char ScanKey()
{
	unsigned char Temp=0;
	P44=0;P34=P35=P42=1;
	if(P33==0)Temp=4;
	if(P32==0)Temp=5;
	if(P31==0)Temp=6;
	if(P30==0)Temp=7;
	P42=0;P34=P35=P44=1;
	if(P33==0)Temp=8;
	if(P32==0)Temp=9;
	if(P31==0)Temp=10;
	if(P30==0)Temp=11;
	P35=0;P34=P44=P42=1;
	if(P33==0)Temp=12;
	if(P32==0)Temp=13;
	if(P31==0)Temp=14;
	if(P30==0)Temp=15;
	P34=0;P44=P35=P42=1;
	if(P33==0)Temp=16;
	if(P32==0)Temp=17;
	if(P31==0)Temp=18;
	if(P30==0)Temp=19;
	return Temp;
}
/*
unsigned char ScanKey()
{
	unsigned char temp = 0;
	if(P33 == 0) temp = 4;
	if(P32 == 0) temp = 5;
	if(P31 == 0) temp = 6;
	if(P30 == 0) temp = 7;
	return temp;
}
*/


​

三行代码消抖(具体原理不清楚的可以去搜索,这里就不做解释了) ,按键不同的两种触发方式

void Key_Loop()
{
	Key_Val=ScanKey();
	Key_Down=Key_Val&(Key_Old^Key_Val);
	Key_Up=~Key_Val&(Key_Old^Key_Val);
	Key_Old=Key_Val;
}

定时器扫描:每10ms扫描一次有效避免了因为使用Delay延时造成的不便

void ServiceTimer0() interrupt 1
{
	static unsigned char count1=0;

	TH0=(65535-1000)/256;
	TL0=(65535-1000)%256;
	count1++;
	if(count1==10)
	{
		count1=0;
		Key_Loop();
	}

使用方法:

在Key_Loop函数内直接用Key_Down或Key_Up读取键值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值