- 使用独立按键的时候需要用跳线帽连接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