A. 单片机问题,如何编程实现按键长按和短按的识别如果没有电路图,如何编程找出LED数码管的段码
判断按键长短要用到定时器,当判断按键后马上启动定时器,并随时检查按键状态,就可以知道按键的长短了,另外段码会用查表法来做,看程序就知道了
B. 51单片机如何实现按键的长按与短按功能,尝试过很多方法都不行,请高手多赐教,多谢了(想是简单,做是难)
这个真心不难,就是简单的c语言判定就行了,《C程序设计语言》,实在看不了就看谭总写的那本c语言。给你写过伪代码,
if(key=ReadKey())//读取按键,判断有无按键按下去,没按键按下,这里返回0值是不进入这个函数的
{
delay(x);//延时一段时间,写过循环就行了
if(!ReadKey())//在次读取按键值,实际上按下去按键是低电平(原理图一般都是这样做的)
{
return 已经松手了( 这里是高电平了返回0了)
C. 单片机按键短按和长按的程序
设置定时器100毫秒中断a值自家1
设置按键值位变量k
设置按键端口k1
if (!k1)按键按下
{
delay(20);去痘
if (!k1)确认按下
a=0;计时数清0 确保长按时间精准
while(!k1)按钮没释放 死循环检测按下时间
if(a>30)达到3000毫秒
k=!k按键值取反 没按前为0 长按3秒后为1 短案无效
}
D. 51单片机,矩阵按键,长按短按判断
/*网友反映长键结束后会送出短键值,特作更改2019.03.29*/
//1,再写一个长短键判断函数,调用那个按键扫描函数
unsignedcharKEY_process(void)
{
staticunsignedcharOld_key=0;//上次按键值
staticunsignedcharKey_buf=0;//按键有效保存
staticunsignedcharPress_CNT=0;//按键按下时间,根据调用时间间隔确定
=0;//长键有效标记变量
unsignedcharNew_key=0;//当前按键值
unsignedcharKEY=0;//待返回的按键值
New_key=keyscan();
if(New_key==Old_key)
{
if(New_key!=0)//建议keyscan返回0的那个值改为其他值,方便这里判断
{
Key_buf=New_key;
if(Press_CNT<0xff)
{
Press_CNT++;
}
if(Press_CNT>=100)//调用时间间隔确定*100为长按时间,
{
KEY=Key_buf+100;//将短键+100作长键区分
Press_CNT=0;//按键时间清0
Key_buf=0;//按键缓冲清0
bPreKeyIsLong=1;//长键有效标记
}
}
else//按键弹起
{
if(Key_buf&&(bPreKeyIsLong==0))//仅在长键无效时
{
KEY=Key_buf;//将缓冲值送将返回的值
Key_buf=0;//清按键缓冲
}
Press_CNT=0;//按键弹起或按其他按键,将长按时间清0
bPreKeyIsLong=0;//长键有效标记清0
}
}
Old_key=New_key;//将新按键赋给下一次的旧按键值
returnKEY;//0代表无按键
}
//2,弹起不返回已确定的值,则在keyscan最后加一句判断
if((P3&0X0F)==0X0F)//按键已经弹起
{
keyvalue=MY_key;//使按键等于一个自定义的值
}
E. 51单片机实现按键长短扫描
当按下键用定时器定时,松开键停止计时,根据时间长短区分,如超过3秒为长按,少于1秒为短按。
F. 单片机按键功能
按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。
2.输入原理
在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,键信息输入是与软件结构密切相关的过程。
对于一组键或一个键盘,总有一个接口电路与CPU相连。CPU可以采用查询或中断方式了解有无将键输入,并检查是哪一个键按下,将该键号送入累加器ACC,然后通过跳转指令转入执行该键的功能程序,执行完后再返回主程序
G. 51单片机 按键长按短按效果
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit key=P1^0;
sbit LED1=P1^4;
sbit LED2=P1^5;
uchar code ledtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uint dat,cnt;
uchar dis[4],disscan=0;
bit flags,flagl;
void t0isr() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
cnt++;
if(cnt>=200)
{
flagl=1;
flags=0;
if((cnt%5)==0)dat++;
}
}
void t1isr() interrupt 3
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
P2=1<<disscan;
P0=ledtab[dis[disscan]];
disscan++;
disscan%=4;
}
main()
{
TMOD=0x11;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
TR1=1;
ET0=1;
ET1=1;
PT1=1;
EA=1;
P1=0xff;
while(1)
{
if(key==0)TR0=1;
if(key)
{
if(cnt<200 && TR0==1){flags=1;flagl=0;dat++;}
if(cnt>=200){flagl=1;flags=0;}
cnt=0;
TR0=0;
}
if(flags){LED1=0;LED2=1;}
if(flagl){LED1=1;LED2=0;}
if(flags==0 && flagl==0) {LED1=1;LED2=1;}
dis[0]=dat/1000;
dis[1]=(dat%1000)/100;
dis[2]=(dat%100)/10;
dis[3]=dat%10;
}
}
H. 合泰背单片机在程序中如何实现按键,短按加一,长按快加拜教高手,谢谢先!
合泰背?没听过,不过没所谓,算法都一样,按键少的时候可以直接挂在IO口上,另一端接地,程序中检测IO状态,若有0则说明有按键按下,此时变量加1,然后进入松手检测,在其中设置时间标志,若经过几秒钟还是按下状态,则变量一直加,祝成功~~
I. 单片机一个按键实现短按 中长按 更长按 也就是三种功能 程序怎么写
按键按下和抬起之间有防抖动延时,只要把防抖动延时时间设置大小不同就可以了。短按你设ms,中按搞个1-3s,长按弄个5-10s。我觉着这么行。
J. 用一个轻触开关实现单片机短按开机,长按关机
不需要单片机,使用双稳态触发器配合轻触开关,当轻触开关每按动一次,给双稳态一个输入脉冲,双稳态两个输出端轮流输出,利用此一个输出端控制开机继电器接通电源,即可在按动下一次时因双稳态转向另一端输出而切断电源。