谁能帮我写一个简单的按键检测c语言程序 功能,我想用单片机去检测按键在一秒钟内按键被按下了多少次,
功能,我想用单片机去检测按键在一秒钟内按键被按下了多少次,然后单片机检测一秒钟内按下的次数来点亮对应的LED,比如一秒钟内检测按键按下了3次那么就点亮LED1,一秒钟内检测到5次就点亮LED2,检测到7次就点亮LED3,检测到9次就点亮LED4,检测到11次就点亮LED5,检测到一秒按下13次就点亮LED6,如果检测到次数不是3,5,7,9,11,13的就视为无效,不点亮任何一个LED。只有一秒内检测到3,5,7,9,11,13的次数才点亮对应的LED。请大侠帮忙写一个完整的程序,就是直接就可以使用的,IO口没关系你随便用就可以了,到时我再改一下就可以了,用c语言,注释一下最好,以便我能够读懂,小弟再此跪谢了。 展开
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1 = P2^0;//定义管脚;
sbit led2 = P2^1;
sbit led3 = P2^2;
sbit led4 = P2^3;
sbit led5 = P2^4;
sbit led6 = P2^5;
sbit key = P1^0;
uchar tcount=0,count=0;//定义时间变量和按键计数变量;
void Delay(uchar i)//机械延时;
{
while(--i);
}
void LedLight(void)//LED控制函数;
{
switch(count)
{
case 3 : led1 = 0;break;//3下时,LED1亮;
case 5 : led2 = 0;break;//5下时,LED2亮;
case 7 : led3 = 0;break;//7下时,LED3亮;
case 9 : led4 = 0;break;//9下时,LED4亮;
case 11: led5 = 0;break;//11下时,LED5亮;
case 13: led6 = 0;break;//13下时,LED6亮;
default: P2 = 0xff;break;//其余的都不亮;
}
}
void InitTimer0(void)//定时器0初始化;
{
TMOD = 0x00;
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
TR0 = 1;
}
void main(void)//主函数
{
InitTimer0();
while(1)//无限循环;
{
if(key==0)//检查按键是否按下;
{
Delay(10);//机械延时;
if(key==0){count++;}//按键计数;
while(key==0);
}
if(TF0==1)//复位定时器0;
{
TF0=0;
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
tcount++;
if(tcount==20)//1秒的时间;
{
LedLight();
Delay(100);
count=0;//复位按键计数变量;
}
}
}
}
还有一点补充一下,就是只点亮对应的LED前面,对应LED的后面不需要点亮。
我这个可以的,我已经仿真过,你在一秒内按多少下对应的LED会亮的,其他是不会亮的