求教关于51单片机的独立按键

2019-07-15 08:56发布

求教:为什么这个关于独立按键的程序只能执行一个按键的功能,我明明写了两个按键的执行程序
怎么才能让着两个按键执行程序?而不是再开关一次电源
# include "reg52.h"
# define u16 unsigned int
typedef unsigned char u8;

sbit k1 = P3^1;     //  位定义 k1
sbit k2 = P3^0;     //  位定义 k2

sbit beep = P1^5;    //  定义P1^5为蜂鸣器
sbit a = P2^2;     //   
sbit b = P2^3;
sbit c = P2^4;

u8 h,m;
u8 code n[]={0x7b,0x3e,0x3f,0x38}; // 显示L o v e

# define smg P0     //  宏定义 led
  
void delay(u16 i)  //  延时函数
{
while (i--);
}

void key1()   //  独立按键k1控制数码管动态显示
{
if (k1)
{
  delay(1000);
  if (k1 == 0)
  {
      while (1)
   {
    for(h=0;h<=7;h+=2)
    {
     switch (h)           //  位选,选择点亮的数码管,
     {
      case 0: a=0;b=0;c=0;break; //显示第0位
      case 2: a=0;b=1;c=0;break; //    2
      case 4: a=0;b=0;c=1;break; //    4
      case 6: a=0;b=1;c=1;break; //    6
     }
        m=h/2;         
     smg=n[m];         //  发送段码
     delay(100);
    }
   }
  }
  while (!k1);
}
}

void key2()      //    独立按键k2控制蜂鸣器
{
if (k2 == 0)
{
  delay(1000);
  if (k2 == 0)
  {
   while (1)
   {
    beep=~beep;
    delay(500);
      }
  }
  while (!k2);
}
}

void main()
{
while (1)
{
   key1();
   key2();
}
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。