51单片机如何连续按动一个按键执行循环,长时间不按则跳出??
先根据你要显示数字的个数定义一个unsigned char型的字符数组,调用扫描键盘函数,扫描到哪个键被按下的同时将键值存进对应的数组元素中,再调用液晶显示程序显示,液晶显示程序中显示的位数可变,可以
while(1)语句只能用在主程序,而且只要用一次。如果子程序也用,必须有条件判断语句,跟一个return语句返回。
再说你的三个子程序,既然用for控制了循环次数了,为什么要用while(1)呢?而且明明知道是死循环还用?三个子程序都把那个while(1)删掉就行了!
定义一个全局变量 cnt,一个全局标记变量flg
每进入一次cnt加1,超过一定值后flg=1;你要的循环中对flg进行判断,若flg==0继续循环,flg==1则先清flg,再跳出循环
按键外部中断中按下一次清零一次cnt
单片机怎么实现按1显示1再按2显示12再按3显示123按4显示1234。。。_百...
K_ED: ;有键按下 MOV 60H, R2 ;保存按键号码 CALL DELAY ;消除抖动 WAIT:MOV P1, #0F0H MOV A, P1 CJNE A, #0F0H, WAIT ;等待释放 CLR A RET KEY_TAB: ;键码表 DB 07EH, 0BEH, 0DEH, 0EEH DB 07DH, 0BDH, 0DDH, 0EDH DB 07BH, 0BBH, 0DBH, ...
单片机如何实现用一个按键一直按下控制数码管数字连续加1?
判断按键按着没放,就使数码管显示的数字连续加1就可以了,不过,加1次需适当延时几十毫秒
怎么让单片机按一下按键执行一个程序,再按一下执行另一个程序
第一次这里标志位为0,则执行,第一次按下功能。第二次按下时,这里标志位为1,则跳过下边的程序,执行另一个程序了。执行完将这个标志位清零。CLR FLAG.0 RET 第一次按下,会到这里,执行下功能 置起一个标志位。如SETB FLAG.0 RET 这样就这实现了一键两功能,如果要更多,就设置一个...
求一单片机C语言程序:两个按键控制两个LED KEY1按一下LED1亮 再按一...
void Delay(unsigned int x){ unsigned int i, j;for(i = 0; i < x; i++) for(j = 0; j <= 148; j++);} \/\/KEY1按一下LED1亮 再按一下LED1灭 \/\/KEY2按下LED2亮 LED1灭 main(){ while(1) { if (!key2) { led1 = 1; led2 = 0;} else { if(!key1) { ...
单片机C语言如何实现按键按一下的时候加一,长按的时候连加。_百度知...
这个可以通过定时器来实现,比如当按键时间小于2秒时,按一次加1,当超过2秒时,没50毫秒加1实现连加功能。例程如下:include<reg51.h> unsigned int a;unsigned char times;sbit key=P1^0;void t0isr() interrupt 1 { TH0=(65536-50000)\/256;TL0=(65536-50000)%256;times++;if(times>40){...
单片机怎么用键盘中断实现按住按键,使内部RAM中的一个数据不停加1?
当时间达到某一个值(如:200ms)我们就让计数寄存器加1,以此类推,当时间达到另一个值时(如:400ms),再将计数据器加1。不过,当主程序中再次读到位变量被置1时,我们要停止计时。并判断时间是否达到设定值,如果比设定值小的话,就视为干扰信号。这时清除计时器。这样就能实现连续加1的功能。...
单片机一个按键实现短按 中长按 更长按 也就是三种功能 程序怎么写...
按键按下和抬起之间有防抖动延时,只要把防抖动延时时间设置大小不同就可以了。短按你设ms,中按搞个1-3s,长按弄个5-10s。我觉着这么行。
此单片机代码,怎么实现按下key1后一直执行,而不是松开就不执行了_百...
if(key2) break; \/\/ 如果检测到KEY2没有按下,则跳出while循环 } } } 如果想实现KEY1和KEY2的显示内容切换显示,即任何时刻LED都有显示。显示最后一次释放按键对应的内容。则见如下代码:include<reg51.h> sbit led1=P2^0;sbit led2=P2^1;sbit key1=P3^0;sbit key2=P3^1;void led_...
一个51单片机如何同时响应两个以上按键输入信号
所谓的同时响应是不可能的,无论是扫描还是中断都有分先后。你的问题可以参考以下解决方法:扫描时先记录KEY1的状态,如果为按下则无论下次扫描到什么状态都不执行动作,如果是放开的记录为放开,再次扫描到如果为按下则执行动作。这个扫描可以同时应用于KEY2两个不相冲突。
单片机中怎样用一个按键按一下实现一种功能,连续按2下实现一种功能
用计数器,每点一下计数器中加1,将计数器中的值转到另一个,再对这个处理。
真苗障眼: 开启定时器 定义一个全局变量 cnt,一个全局标记变量flg 每进入一次cnt加1,超过一定值后flg=1;你要的循环中对flg进行判断,若flg==0继续循环,flg==1则先清flg,再跳出循环 按键外部中断中按下一次清零一次cnt
华县19714981029: 51单片机中如何按下按键时数码管正常显示而不闪烁,并且实现长按连续 - ?
真苗障眼: 你好,我也遇到这样的问题,经过一周的研究,问之前的前辈得出结果,希望对你有帮助 char scan_k(char k) { int i=0;//定义一个变量用来累计长按的时间 if((KEY1&&KEY2&&KEY3&&KEY4&&KEY5&&KEY6)==0)//如果有按键按下 { while(!KEY...
华县19714981029: 求51单片机按键的连击的处理的程序 - ?
真苗障眼: 简单的,但不稳定:以双击为例,为每个按键设置一个KeyCountX变量,每次按键按下KeyCount变量加一,当KeyCount=2时处理双击事件(注意延时防抖).自我感觉稳定的,未试验:每个按键设置一个KeyJudgeX和一个KeyCountX和一个...
华县19714981029: 51单片机怎样用两个以上按键同时控制相应程序的执行 - ?
真苗障眼: 按键按下,给一标志位,子函数 通过识别 标志位,判断是否 执行流水.猜测:又一个受 郭大侠荼毒的孩子!
华县19714981029: 51单片机矩阵多个按键同时按下如何写程序 - ?
真苗障眼: 用数组啊,如果是指定位数的就比较简单 当第一次输入时i=0,第一个数6放a[0],i=1,第二个数7放a[1],显示就是 OUT= a[0] * 10 + a[1] * 1 数组用之前初始化为0,a[2] = {0} //这个好用点,递推 if(key_data)//有按键按下 {for(i = key_count ;i>0;i--;){a[i+1] = a[i];}a[0] = key_data;key_count ++;} //显示调用,根据你的输入最大数定数组的位数Sprint = a[3] * 1000 + a[2] * 100 + a[1] * 10 + a[0] * 1 ;
华县19714981029: 51单片机4*4矩阵键盘如何同时实现单击+双击的功能? - ?
真苗障眼: 一般地,我们的键盘检测都有一个按键码存储字节,一般情况下,只要检测到有效按键,那么这个存储字节的按键码就有效,也就是单击.何为双击呢?双击就是在监测到该按键后在该按键要有作用(这个作用就是单击)之前又检测到该按键,然后就当作了双击.那怎么实现这一判断呢?我们只要加一个软计数器,当检测到有效按键后,该计数器开始向下计数,如果计数器自然减到了0那么就是单击生效;如果在该计数器值没有减到0之前又检测到该按键,那么就是双击立马有效同时计数器归零.这个计数器肯定是ms级的,也就是要在定时器里工作,只要它不为0,那么定时器中断服务就对它减1操作,因此计数器本身同时就是一个开关量,而触发它的是检测到有效按键.
华县19714981029: 51单片机,4乘4矩阵键盘,每一个按键都有一个一直循环运行的程序.现在想要我按一个按键,执行对应的 - ?
真苗障眼: 4乘4矩阵键盘,必须和中断输入端,连上线.这样,按键后,才能发生中断.
华县19714981029: 51单片机连续按键怎么实现 - ?
真苗障眼: 你的问题是连续按键如何采样?可以在程序里建立一个按键队列
华县19714981029: 单片机51,出现按一次按键,得到多次按键的情况,怎么解决 - ?
真苗障眼: 单片机51,出现按一次按键,得到多次按键的情况,是由于没有做“消抖”处理的结果,在软件上做一些延时消抖处理后,一般就可以解决这个问题.比如:keyscan() { if(key==0)// 当按键按下 { delay(10);//延时消抖 if(key==0)//如果按键任然按下 { while(key==0);//等待按键抬起 ....... } } }
华县19714981029: 在51单片机中,按一下按键1,执行一个程序功能1,按按键2,执行程序功能2,按键3,执行功能3 - ?
真苗障眼: 设置外部中断,再中断函数里设置一个flag, 若按键1触发中断则,flag=1:其它两个类似 再主函数里设置 while(1) {if(flag==1){ } else if(flag==2){ } else if(flag==3){ } }