02_蓝桥杯_独立按键

按键

  • 使用独立按键的时候需要用跳线帽连接J5的23引脚,让S7,S6S,S5,S4一端连接GND,
  • 且连接s7,s6,s5,s4按键对应的引脚分别是p30,p31…,要使用按键 必须先让四个引脚拉高(单片机默认高电平),然后按下按键后,对应的引脚连接GND,被拉低。

然后我们实现用四个按键分别点亮led四种流水灯的流转模式

#include "stc15f2k60s2.h"
#include <intrins.h>
#define uchar unsigned char 
#define uint unsigned int 
uchar moshi =0;
uint led_n=0;
void buzz_init()
{
	P2=((P2&0X1F)|0XA0);  //初始化 暂时不讲
	P0=0X00;
	P2&=0X1F;
	
	P2=((P2&0X1F)|0X80);
	P0=0Xff;	
	P2&=0X1F;
	
	P2=((P2&0X1F)|0XC0);
	P0=0Xff;
	P2&=0X1F;
	
	P2=((P2&0X1F)|0XE0); //Y7位选
	P0=0Xff;
	P2&=0X1F;	
}
void Delaynms(int ms)	//@11.0592MHz
{
	unsigned char i, j;
	for(i = 2;i>0;i--)
		for(j = 199;j>0;j--)
			for(;ms>0;ms--);
}
void Itnt_led( )  //led流转模式
{
	switch (moshi)
		{

		case 1 :
						P2=((P2&0X1F)|0X80);  //开led锁存器
						P0=~(0x01<<led_n);//点亮第led_n个灯
						P2&=0X1F;          //关闭锁存器
						led_n++;				//led_n加1  每进入一次加一
						if(led_n==8){led_n=0;}   //等于8  则led_n=0
						Delaynms(1000);
			break;
		case 2:
				P2=((P2&0X1F)|0X80);
				P0=~(0x80>>led_n);
				P2&=0X1F;
				led_n++;
				if(led_n==8){led_n=0;}
				Delaynms(1000);
			break;
		case 3:
				P2=((P2&0X1F)|0X80);
				P0=~((0x80>>led_n)|(0x01<<led_n));
				P2&=0X1F;
				led_n++;
				if(led_n==4){led_n=0;}
	
			break;
		case 4:
			P2=((P2&0X1F)|0X80);
			P0=~((0x08>>led_n)|(0x10<<led_n));
			P2&=0X1F;
			led_n++;
			if(led_n==4){led_n=0;}
			Delaynms(1000);
			break;
		}		
}

uchar  key_sanf()  //按键输入
{

	if(P30==0)
	{
		Delaynms(10);
		if(P30==0)
		{
			moshi =1;
			led_n=0;
		}
		while(!P30);
	}
	else if(P31==0)
	{
		Delaynms(10);
		if(P31==0)
		{
			moshi =2;
			led_n=0;	
		}
		while(!P31);
	}
	else if(P32==0)
	{
		Delaynms(10);
		if(P32==0)
		{
			moshi =3;
		led_n=0;
		}
		while(!P32);
	}
	else if(P33==0)
	{
		Delaynms(10);
		if(P33==0)
		{
			moshi =4;
			led_n=0;
		}
		while(!P33);
	}
	return moshi ;
}

void main()
{
buzz_init(); //初始化,关闭led,关闭蜂鸣器,数码管
while(1)
		{  
			key_sanf();
			Itnt_led();
		}
}

  • 在蓝桥杯历届考题中 按键属于必考部分,而且考官已经不满足简单的考按键了,已经开始让考生实现长按短按 连击之类的功能,这些功能后面在讲,程序部分大家可以多多练习。
  • 测验,四个按键分别点亮四个led
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值