今天参考了网上的一篇关于去抖动的程序,把昨天的改了一下,但并没有实现检测一个键同时按下两次或多次的情况。
/*
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$//
|| FileName: key.c ||
|| Function: 实现一个按键控制一个灯的亮灭 ||
|| Author : Softstone ||
|| Date : 2007/04/21 ||
|| Email : softstonechwch@126.com ||
||$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$//
*/
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define LED P0 //LED接在P0口上,使用低四位,P0^0——P0^3
#define KEY P2
sbit LedCs= P3^7;
//函数声明
void Delay(void);
void KeyScan(void);
void main()
{
KEY = 0xff;
LED = 0xff;
LedCs = 0;
while (1)
{
KeyScan();
}
}
void KeyScan()
{
uchar temp;
while(1)
{
if ( KEY!=0xff )
{
Delay();
if ((KEY != 0xff) && (KEY != LED))
{
switch ( KEY )
{
case 0xfe: LED = 0xfe; break;
case 0xfd: LED = 0xfd; break;
case 0xfb: LED = 0xfb; break;
case 0xf7: LED = 0xf7; break;
default: break;
}
}
while (KEY == 0xff); //等待按键放下
}
}
}
/*############################
延时程序
*/
void Delay()
{
unsigned int kk=0x16ff;
do{_nop_();kk--;}
while(kk!=0);
}