谁能帮我写一个简单的按键检测c语言程序 功能,我想用单片机去检测按键在一秒钟内按键被按下了多少次,

谁能帮我写一个简单的按键检测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会亮的,其他是不会亮的

追问

那应该怎么改呢

好的,没问题,谢谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-10
按下的键:
#include<conio.h>
#include<stdio.h>
main()
{
while (kbhit())
{
printf("你按下了");
}
}本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网