sbit key_st=P3^6;
void main (void)
{
u8 flagqt=0x5a;
u16 tcnt=0;
while(tcnt<3000)
{
tcnt++;
delay(1);
if(key_st!=0)tcnt=0;
}
i = 0;
aa = 0;
//fang1 = 1;
IO_Init();
tomd ();
tcnt=0;
while(1)
{
key_i ();
EC ();
}
if(key_st==0)
{
tcnt++;
delay(1);
if(tcnt>=3000) ((void(code )(void))0x0000)();
}
else tcnt=0;
}
#include<reg51h>
#define uchar unsigned char
sbit key=P1^0;
sbit close=P1^1;
uchar times=0;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
times++;
if(key==1)times=0;
if(times>60)close=0;
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
EA=1;
close=1;
while(1)
{
if(key==0){TR0=1;times=0;}
if(key==1)TR0=0;
}
}
短按
用电平变换中端口最好
直接if(rb0)判断就行了
长按
if(rb0)
dealy(100ms);
if(rb0)
do;
抖动,就是一个确定的延时检测时间
if(rb0)
delay(10ms);
if(rb0)
do;
就用keydown和keyup
keydown是首次按下一个键(没有释放)
keyup是释放了之后
你在keydown里写的是走路的代码(用一个条件判断)
keyup里就写停止的代码(刚才的条件为false)
大概就这样就可以搞定了
要不你这样吧
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (eKeyCode == KeysD)
textBox1Text = "行走";
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
textBox1Text = "停止";
}
例子而已···更复杂的话那就要另外考虑了
记得设置好Form1的属性
每种协议都是不一样的,比如是日立的协议吧,就是通常说的一种,长按时发的第一个32位是对应的地址码,命令码及其反码,但是按键一直按下时,则每隔固定时间发送的是重复码,这个重复是固定一组编码,与你按键对应的的地址和命令没有任何关系,也就是说任何长按的重复码都是一样的;
而连续按则不同,按键松开后再按,则再次发送对应地址码,命令码及其反码,不发送重复码。
程序可以根据具体的编码时序分支处理,若是连续按,则跳入一个分支,否则跳入长按处理,长按里面判断很简单,则将上一次的结果重复一次即可。
每种协议都是不一样的,比如是日立的协议吧,就是通常说的一种,长按时发的第一个32位是对应的地址码,命令码及其反码,但是按键一直按下时,则每隔固定时间发送的是重复码,这个重复是固定一组编码,与你按键对应的的地址和命令没有任何关系,也就是说任何长按的重复码都是一样的;
而连续按则不同,按键松开后再按,则再次发送对应地址码,命令码及其反码,不发送重复码。
程序可以根据具体的编码时序分支处理,若是连续按,则跳入一个分支,否则跳入长按处理,长按里面判断很简单,则将上一次的结果重复一次即可。
以上就是关于单片机(C51)一个小程序,可以请帮忙在此程序中加入按键长按开机与长按关机功能,谢谢!!!全部的内容,包括:单片机(C51)一个小程序,可以请帮忙在此程序中加入按键长按开机与长按关机功能,谢谢!!!、51单片机设计长按开关机程序、单片机大侠 帮帮我 谢谢了!单片机按键短按,长按,弃抖动,松手检测程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)