怎么让单片机按一下按键执行一个程序,再按一下执行另一个程序

如题所述

第1个回答  2011-05-16
loop:
call key
jmp loop
key:
jnb p3.0,rel
ret
rel:
call delay20MS
jnb p3.0,rel
第一次这里标志位为0,则执行,第一次按下功能。
第二次按下时,这里标志位为1,则跳过下边的程序,执行另一个程序了。执行完将这个标志位清零。
CLR FLAG.0
RET

第一次按下,会到这里,执行下功能
置起一个标志位。
如SETB FLAG.0
RET

这样就这实现了一键两功能,如果要更多,就设置一个寄存器,每次加1,对比。是那个执行那个程序,最多一个按键可以做到255种功能。当然你肯定用不了这么多。

满意给我加分吧,只能给你思路,给你完整程序是害你的。追问

void main()
{
while(1)
{
if(k1==0) led_no();
if(k2==0) led_off();
}
}

void led_no()
{
P1=0xfe;
for(x=0;x0;x--)
{
delay();
P1=P1>>1|0x80;
delay();
}
_nop_;
}
这是两个按键,我想每次在空指令那里停下来来,怎么改呀?

追答

你执行完子程序功能就退出则OK了

追问

怎么退出呀?

追答

按键检测成功,置个标志位,子程序检测到标志位,则去执行一次,并清除这个标志位,就退出了,要不就一直执行那个程序了。明白不。

追问

谢谢

本回答被提问者采纳

请问单片机怎么用独立按键按一下实现一个功能,按另一个按键实现另一个...
如果这两个功能都是一个死循环,可以考虑用中断,这样就不必在两个独立的功能中插入按键检测了 while(1){ while(flag==1){死循环1} while(flag==2){死循环2} } 如果这两个功能不是死循环,就 简单了 while(1){ if(key1==0) {延时消抖 功能1} if(key2==0) {延时消抖 功能2} }...

...C语言程序怎么改成按钮按一下才执行,再按一下就停止,如此反复...
IO直接作为循环条件即可,如下:如果用户按下键不放会有问题,最好改为用户按下键再弹起为一次输入。

单片机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){...

按键点灯程序,按一下按键灯亮(一直亮),再按一下灭,51单片机。
1、首先打开编程软件Keil uVision4,新建一个工程文件,在菜单栏中Project—— New uVision Project..。2、然后选择单片机型号是 Atmel 公司的 AT89c52,单击OK。3、再单击工具栏上新建按钮,新建一个文档,然后再点击保存,输入保存的路径,输入名字。4、右键单击将这个文件添加到到工程文件夹中。5、打...

...按键来控制LED不同的运行方式,有就是按一次一种运行方式,再按...
从问题上面看,你问的是单片机的问题了 方法有两种:设置一计数器:i,每按一次键,即调用显示程序,显示程序中用:i++;if(i=1){执行闪灯方式1;} elseif(i=2){执行闪灯方式2;} elseif(i=3){执行闪灯方式3;} ...elseif(i=4){执行闪灯方式n} 主程序判断按键方式("."为短按 ...

单片机c语言呢编程问题:我要实现用一个按键控制一个LED的亮灭,按一次...
你没有松手监测呀!就是在按键处理程序后要加一个while(k1!=0);就是只有你松开按键后才认为本次按键执行完毕,不然就会一直重复执行按键按下的程序,那么你的d1一直就会执行亮灭操作!

51单片机如何用一个按键控制一段程序的运行与停止
你的程序有问题,当按下K1后程序就进入死循环了。所以无法停止。你需要把判断条件放入while循环里面。以下是修改过的程序。希望能帮到你,望采纳 include <REG51.h> \/\/通用89C51头文件 sbit LED1 = P1^0; \/\/定义闪烁LED sbit LED2 = P1^1; \/\/定义闪烁LED sbit LED3 = P1^2; \/\/定义闪烁...

51单片机如何用一个按键控制一段程序的运行与停止
1、创建项目文件。2、按键:S1=P3^2,点亮: led=P1^5。3、创建C语言主函数。4、创建循环效果,检测效果。while(1) {}。5、选择输出的效果。6、当按下一个按键时,关闭灯,整个程序运行,再按一次,程序停止。

单片机如何实现一个按键切换两个程序
include<reg51.h>sbit key=P1^0;bit flag=0;void A(void){...}void B(void){...}main(){while(1) { if(key==0) { while(key==0); flag=~flag; } if(flag)B(); else A(); }}

80C51单片机怎么用按键选择两个不同的程序?
要使用按键选择两个不同的程序,您可以按照以下步骤进行操作:1. 首先,您需要连接一个按键到80C51单片机的输入引脚上。假设按键连接到P1口的某个引脚(例如P1.0)。2. 设置P1口的引脚为输入模式,以接收按键的状态。您可以使用P1口的寄存器(例如P1CON)来设置引脚的工作模式。3. 在主程序中,使用...

相似回答