发布网友 发布时间:2022-04-22 00:05
共2个回答
热心网友 时间:2023-12-12 19:02
就是说,按一下,就算一次低电平。如果不松开的话就只算一次?那么如下:
按下按键后有个简单的防抖,按下后必须松开才算能算一次,一直按着程序就原地等待,直到松开。
按下某一按键后,对应的计数器加一,如果和对应的次数相等,就在OUT端输出1,期间,如果有其他按键按下,则前面的计数作废。刚被按下的按键其计数器加一。
#include<Reg51.h> //Fosc=12MHz
//-------------------------------------------------------
#define uchar unsigned char
//-------------------------------------------------------
sbit OUT=P3^0;
sbit in1=P3^1;
sbit in2=P3^2;
sbit in3=P3^3;
sbit in4=P3^4;
uchar c1=0,c2=0,c3=0,c4=0;
//-------------------------------------------------------
void wait(void);
void inc1(void);
void inc2(void);
void inc3(void);
void inc4(void);
//-------------------------------------------------------
void wait(void)
{
uchar i;
for(i=0;i<250;i++);
}
//-------------------------------------------------------
void inc1(void){
c1++;
c2 = 0;
c3 = 0;
c4 = 0;
if(c1==2)
OUT = 1;
c1 = 0;
}
//-------------------------------------------------------
void inc2(void){
c2++;
c1 = 0;
c3 = 0;
c4 = 0;
if(c2==3)
OUT = 1;
c2 = 0;
}
//-------------------------------------------------------
void inc3(void){
c3++;
c1 = 0;
c2 = 0;
c4 = 0;
if(c3==4)
OUT = 1;
c3 = 0;
}
//-------------------------------------------------------
void inc4(void){
c4++;
c1 = 0;
c2 = 0;
c3 = 0;
if(c4==5)
OUT = 1;
c4 = 0;
}
//-------------------------------------------------------
void main(void)
{
OUT = 0;
while(1){
if(in1==0){
wait();
if(in1==0){
while(in1==0);
inc1();
}
}
if(in1==0){
wait();
if(in1==0){
while(in1==0);
inc1();
}
}
if(in2==0){
wait();
if(in2==0){
while(in2==0);
inc2();
}
}
if(in3==0){
wait();
if(in3==0){
while(in3==0);
inc3();
}
}
if(in4==0){
wait();
if(in4==0){
while(in4==0);
inc4();
}
}
}
}
热心网友 时间:2023-12-12 19:02
请简述硬件连接!