51单片机怎样用两个以上按键同时控制相应程序的执行

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-29
一个51单片机如何同时响应两个以上按键输入信号

所谓的同时响应是不可能的,无论是扫描还是中断都有分先后。

你的问题可以参考以下解决方法:
扫描时先记录KEY1的状态,如果为按下则无论下次扫描到什么状态都不执行动作,如果是放开的记录为放开,再次扫描到如果为按下则执行动作。这个扫描可以同时应用于KEY2两个不相冲突。

定义个全局变量,每次按键后检查值,执行对应的函数,改变值

按键按下,给一标志位,子函数 通过识别 标志位,判断是否 执行流水。

猜测:又一个受 郭大侠荼毒的孩子!

int btnst;
btnst=P3;
if (btnst==0x01)//P3.0按下
{
P2程序
}
if (btnst==0x02)//P3.1按下
{
P1程序
}
if (btnst==0x03)//P3.0、P3.1都按下
{
P2P1程序
}

你的按键是查询检测还是中断检测??

  • 51单片机流水灯如何通过两个按键启动和停止 ,怎么停止
    答:// 改了一下试试 include<reg52.h> //包含 reg52.h 这个头文件 include<intrins.h> define led P2// char i;sbit k1=P3^6; //启动按键 sbit k2=P3^7;//停止按键 bit s=0; // 启停标志 char a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //LED灯的数组 void...
  • 51单片机4*4矩阵键盘如何同时实现单击+双击的功能?
    答:那怎么实现这一判断呢?我们只要加一个软计数器,当检测到有效按键后,该计数器开始向下计数,如果计数器自然减到了0那么就是单击生效;如果在该计数器值没有减到0之前又检测到该按键,那么就是双击立马有效同时计数器归零。这个计数器肯定是ms级的,也就是要在定时器里工作,只要它不为0,那么定时器...
  • 51单片机 2个独立按键控制一个led
    答://k3是总开关,k1是二级开关。//先按下k3,然后按下 k1,灯亮灭交替。//--- //应该先检测二级开关 K1。//发现 K1 按下后,再检测 K3 是不是已经在按着。if(!k1) { //先检测二级开关 delay1(10); //消抖 if(!k1) { while(!k1); //等待松开 //松开后,再检测 k3:...
  • 单片机编写两个按键控制两个LED灯的程序,要求当按下任何一个按键并松开...
    答:include"reg51.h"define K p0^7 define LED_BLUE p0^0 define LED_RED p0^4 void scan_key(void);//用来控制LED_RED void DelayMS(unsigned int x);void main(){ while(1){ if(K==0)LED_BLUE=1;scan_key();else LED_BLUE=0;} } void scan_key(void){ unsigned int i;for(i=...
  • 51单片机实现多按键输入
    答:至于程序吗,也很简单,你想,交叉布局的话,当一个按键按下后,单片机的经纬线中,各有一根是通过按键导通的,当有两个按键按下时,最少会有三根线导能,等等,这就需要你列个表,计算好,算出每种按键组合后,它反应到单片机的I/O口上会是什么状态,就可以计算出单片机读到哪个数据时,就该是这个组合....
  • 关于51单片机的问题,独立键盘和矩阵键盘怎么同时使用?懂的来帮帮忙啊...
    答:你是不是按下下方的四个按键也会让1,2,3,4灯亮起来?你可以不要定义在同一个引脚上连起来一个引脚的四个按键,你试试控制8个单片机不同引脚上的按键编程一下试一试。程序上,你的独立按键程序和矩阵键盘程序要分开,独立键盘的程序高低四位判断是相反的,这个一定要注意。你可以让独立按键在那里...
  • 51单片机C语言对键控双向流水灯编程。用两个按键,中端来做。
    答:include<reg51.h> define uchar unsigned char uchar num,temp,times,led;t0isr() interrupt 1 { TH0=(65536-50000)/256;TL0=(65536-50000)%256;times++;if(times>=10){ times=0;P0=led;if(key1==0){ num++;num&=0x07;} else if(key2==0){ if(num>0)num--;else(num=7;} le...
  • 一个51单片机同时控制2个步进电机的C语言程序
    答:sbit P32=P3^2;sbit P33=P3^3;sbit P35=P3^5;define uchar unsigned char define uint unsigned int unsigned char h,Pos ;unsigned int R,NX,NY;unsigned char key;code unsigned char KeyTable[] = { // 键码定义 0x0f, 0x0b, 0x07, 0x03,0x0e, 0x0a, 0x06, 0x02,0x0d, 0x...
  • 51单片机。。。2个单片机,两个LED灯,两个开关,两个开关,怎样编程序使 ...
    答:两个定时器使用没有什么特殊设置,但是有一个经验你必须明白,中断里面重新对定时器赋值的操作必须放在中断处理的头端,否则会有一个整个中断处理的时间延时。如:void timer1()interupt3 using1 { ... //如果这里的...程序段太长,那么每次中断就慢了处理这段程序的时间 TH1=0X..TL1=0X......
  • 单片机C51,三个内容。一个最小系统带一个流水灯。两个按键控制两个灯...
    答:流水灯:#include<reg51.h>#include<intrins.h>void delay(uchar a){uchar i;while(a--)for(i=0;i<120;i++);}main(){P0=0xfe;while(1) { P0=_crol_(P0,1); delay(200); }}按键控制两个灯#include<reg51.h>sbit led1=P1^0;sbit led2=P1^1;void ext0() inte...