独立按键
独立按键的原理图:
其中,S4,S5,S6,S7是独立按键,需要用跳线帽接右边:
一 只有短按的代码:
key.h
#ifndef _KEY_H_
#define _KEY_H_
#include <STC15F2K60S2.H>
sbit k4=P3^3;
sbit k5=P3^2;
sbit k6=P3^1;
sbit k7=P3^0;
extern unsigned char k4_press;
extern unsigned char k5_press;
extern unsigned char k6_press;
extern unsigned char k7_press;
void key_read(void);
void key_control(void);
#endif
key.c
/*独立按键采用了定时器扫描法*/
/*代码写的比较复杂,但是比较好看懂吧*/
#include <key.h>
unsigned char k4_press,k5_press,k6_press,k7_press;
unsigned char key_sum;
void key_read(void)
{
static unsigned char k4_time=0,k5_time=0,k6_time=0,k7_time=0; //一定要是static
key_sum=0;
/**********K4**********/
if(k4==0) //如果K4按下
{
k4_time++; //k4_time用来判断按了多久
if(k4_time==1) //如果是一次的话
{
key_sum=4; //得到key_sum为4,到key_control();函数中生成对应的press
}
else if(k4_time==20) //在定时器中断中30ms扫描一次,大概是按下0.6秒后
{
k4_time=1; //只有短按,然他执行k4_time=1时候的操作
key_sum=0; //并且此时没有sum值
}
}
else
k4_time=0; //没有按下按键则对应的time为0
if(k5==0)
{
k5_time++;
if(k5_time==1)
{
key_sum=5;
}
else if(k5_time==20)
{
k5_time=1;
key_sum=0;
}
}
else
k5_time=0;
if(k6==0)
{
k6_time++;
if(k6_time