1位独立按键控制程序运行

为讲述方便,1位独立按键控制程序运行,本文指的是本身带消抖的按键,且按键按下为低电平。

有时用1位独立按键控制程序运行2种(及以上)不同方式可用以下两种方案:

第一种:加标志位法,比如通过按键选择程序运行两种不同的程序,则声明2个标志变量,具体见如下:

unsigned char key1Flag,key2Flag;
unsigned char keyCnt=0;
void main()
{
  //初始化
  //开中断
 while(1)
 {
  if(key1Flag)
  {
  //添加程序1
  }

  if(key2Flag)
  {
  //添加程序2
  }


 }

}
//按键2选一程序
void exint0() interrupt 0       //INT0中断入口
{
	
	if(keyCnt==0)
	{
	  key1Flag=1;
	  key2Flag=0;
	  keyCnt=1;
	  return;
	}
	else
	{
          key1Flag=0;
	  key2Flag=1;
	  keyCnt=0;
	  return;
	}

}

此方案的中断函数2个if条件判断语句中必须加return语句。

 第二种:不加标志位变量,直接加一个unsignde char 变量,对按键输入计数。

#define SECECTION  3
unsigned char keyCnt=0;

void main()
{
  //初始化
  //开中断
 while(1)
 {
  if(keyCnt==1)
  {
  //添加程序1
  }

  if(keyCnt==2)
  {
  //添加程序2
  }
  ...
   if(keyCnt==SECECTION)
  {
  //添加程序N
  }

 }

}
void exint0() interrupt 0       //INT0中断入口
{	
   keyCnt++;
   if(keyCnt>SECECTION) keyCnt=1;
}

 

在51单片机上实现独立按键控制程序运行,通常需要以下几个步骤: 1. **硬件连接**:首先,将按键接入单片机的输入引脚。每个按键对应单片机的一个输入端口,例如P1、P2等。通常会采用中断方式来检测按键,这样可以节省CPU资源。 2. **初始化IO口**:通过设置IO口的工作模式为输入,并打开相应的中断功能。例如,如果按键连接到P1.0,需要编写代码将P1.0设为输入模式并启用INT0中断。 3. **按键扫描**:编写一个主循环,不断读取IO口状态,判断是否按下某个键。这通常涉及到对IO口的状态进行检查,如果某1则表示按键被按下。 4. **处理按键事件**:当检测到按键按下后,进入相应函数处理按键事件,比如执行特定的操作,如改变程序流程、显示字符等。 5. **中断服务程序(ISR)**:在INT0中断服务程序中,确认按键确实被按下,然后清除中断标志,并返回到主循环继续监控。 6. **错误处理和复**:考虑到按键可能会误触发,可能需要添加错误处理机制,例如定时清除状态,防止持续误触发。 以下是简化版的代码示例: ```c #include <reg52.h> void main() { P1 = 0xff; // 设置P1所有管脚为输入 TR0 = 1; // 开启定时器0 while(1) { if(P1^= 0x01) { // 检查P1.0状态 if(!PIN_0_Pressed()) { // 如果不是误触发 ProcessKey(); // 执行按键处理函数 } } // ...其他操作... } } // 中断服务程序 void INT0_vect() { if(P1 & 0x01) { // 按键P1.0仍然按下 PORTA = ~PORTA; // 清除中断标志 return; } } ``` 注意:这个例子假设有一个外部中断源,实际应用中可能需要根据所选单片机的具体型号调整代码。同时,`PIN_0_Pressed()`是一个假设的辅助函数,用于确定按键是否已经被释放。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

armcsdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值