刚学51,搞矩阵键盘加按键音的时候遇到问题了

2019-07-16 05:29发布

程序如下,想加个按键音,结果自己搞了好久搞不定,如果把beep()加到显示函数里,拿一开机就一直响,加到键盘消抖之后,开机不响,但是一按键就一直响,程序都进不到键码的判断里面也就是说无法再按键之后再数码管上显示键值。。大家帮忙看看啊。纠结了一晚上。


#include<reg52.h>
#define uchar unsigned char  //数据类型的宏定义
#define uint  unsigned int         //数据类型的宏定义
sbit P27=P2^7;
sbit fmq=P3^6;
unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF};  
         //共阳数码管显示字型码数组  1011 1111 "-"


void delay500us()
{
    unsigned char k;

      for(k=0;k<57;k++); //0.5ms 基准延时程序
}




void delay1ms(uint i)
{
uchar j;
  while(i--)
   {
    for(j=0;j<115;j++);          //1ms基准延时程序
   }
}


void beep() //无源蜂鸣器发生子程序
{
fmq=0;
delay500us();
fmq=1;
delay500us();
}


uchar t;
void display(unsigned char i)
{
  P27=0;        //选通最有端的数码管显示
  P0=table[i];   //显示i参数传来的字型码
}



void main(void)
{
unsigned char temp;
display(16); //初始显示 "-"
  while(1)
   {

     P1=0xff; //先向P1口写1;端口读状态
     P1=0xf0;
     temp=P1;
      if(temp!=0xf0)
       {
             delay1ms(15);  
           if(temp!=0xf0)
             {
                   P1=0xfe;
                   temp=P1;
                 switch(temp)
                   {
                         case(0xee):display(0);break;
                         case(0xde):display(1);break;
                         case(0xbe):display(2);break;
                         case(0x7e):display(3);break;
                   }

               P1=0xfd;
               temp=P1;
                 switch(temp)
                   {
                         case(0xed):display(4);break;
                         case(0xdd):display(5);break;
                         case(0xbd):display(6);break;
                         case(0x7d):display(7);break;
                   }

               P1=0xfb;
               temp=P1;
                 switch(temp)
                   {
                         case(0xeb):display(8);break;
                         case(0xdb):display(9);break;
                         case(0xbb):display(10);break;
                     case(0x7b):display(11);break;
                   }

               P1=0xf7;
               temp=P1;
                 switch(temp)
                   {
                           case(0xe7):display(12);break;
                         case(0xd7):display(13);break;
                         case(0xb7):display(14);break;
                         case(0x77):display(15);break;
                   }

             }
       }

   }

}

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