标题: 为什么我按单片机矩阵按键时,蜂鸣器的功能却都实现不了,求大神看看程序哪里错了 [打印本页]

作者: 用户2111142    时间: 2015-11-29 23:40
标题: 为什么我按单片机矩阵按键时,蜂鸣器的功能却都实现不了,求大神看看程序哪里错了
当每按一次点阵按键的其中一个时,蜂鸣器都会响一次,为什么我按点阵按键时,蜂鸣器的功能却都实现不了,求教。。。。[attach]15813[/attach]


#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar key=0,ke=125,n;
uchar w;
uchar a;
uint j,k,m;

sbit keyin1=P1^0;
sbit keyin2=P1^1;
sbit keyout1=P1^2;
sbit keyout2=P1^3;
sbit s5=P1^7;
uchar code led1[8][8]=          
{

{0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF},
{0xFF,0xFF,0x7F,0x3F,0x7F,0xFF,0xFF,0xFF},
{0xFF,0x7F,0xBF,0x1F,0xBF,0x7F,0xFF,0xFF},
{0xFF,0xBF,0xDF,0x0F,0xDF,0xBF,0xFF,0xFF},
{0xFF,0xDF,0xEF,0x87,0xEF,0xDF,0xFF,0xFF},
{0xFF,0xEF,0xF7,0xC3,0xF7,0xEF,0xFF,0xFF},
{0xFF,0xF7,0xFB,0xE1,0xFB,0xF7,0xFF,0xFF},
{0xFF,0xFB,0xFD,0xF0,0xFD,0xFB,0xFF,0xFF}


};
  uchar code led2[8][8]=          
{

{0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF},
{0xFF,0xFF,0xFE,0xFC,0xFE,0xFF,0xFF,0xFF},
{0xFF,0xFE,0xFD,0xF8,0xFD,0xFE,0xFF,0xFF},
{0xFF,0xFD,0xFB,0xF0,0xFB,0xFD,0xFF,0xFF},
{0xFF,0xFB,0xF7,0xE1,0xF7,0xFB,0xFF,0xFF},
{0xFF,0xF7,0xEF,0xC3,0xEF,0xF7,0xFF,0xFF},
{0xFF,0xEF,0xDF,0x87,0xDF,0xEF,0xFF,0xFF},
{0xFF,0xDF,0xBF,0x0F,0xBF,0xDF,0xFF,0xFF}


};

          

void Delay(unsigned int i )
       
{
        unsigned int k ;
         for (k=0;k<i;k++);

}

uchar  keyscan(void)
  {
        keyout2=0;         keyout1=1;
          if(keyin1==0)
          {
                        Delay(10);
                if(keyin1==0)
                {
                 
                 s5=1;
                Delay(200);
                 s5=0;
                key=1;
                }
          }
          if(keyin2==0)
          {
                Delay(10);
                if(keyin2==0)
                {  
                  s5=0;
                  Delay(200);
                  s5=1;
                  if(ke==5) ke=5;
                  else ke=ke-40;       
                                                   
                }
          }
          while((keyin1==0)||(keyin2==0))        ;
          keyout2=1;         keyout1=0;
          if(keyin1==0)
          {
        Delay(10);
                if(keyin1==0)
                {
                 s5=0;
                 Delay(10);
                 s5=1;
                 key=3;
                }
          }
          if(keyin2==0)
          {
                        Delay(20);
                if(keyin2==0)
                {  
                  s5=1;
                  Delay(200);
                 s5=0;
                 if(ke==245)ke=245;
                 ke=ke+40;
                }
          }
           while((keyin1==0)||(keyin2==0))        ;
            return key;
  }


       


         void  main ()
{  

          while(1)
          {
                key=keyscan();
                  n=key ;
          
          if(n==1)
         {
                   s5=0;
                Delay(10);
                 s5=1;

                 a=0x01;
         
        for (k=0;k<8;k++)

         {       
            
                                 P0=~a;
                a=_crol_(a,1);
                for (m=0;m<20;m++);

         
           for (m=0;m<ke;m++)
      {w=0x01;
          for(j=0;j<8;j++)
          {         if(n==3)break;
                  key=keyscan();
                  n=key ;
            P2=w;
                P3=led2[k][j];
         Delay(50);
                w<<=1;
       
           }

          }
          
       }

         }         


          if(n==3 )
        {
                 s5=0;
                Delay(10);
                 s5=1;

                 a=0x01;
         
        for (k=0;k<8;k++)

         {                  
                                 P0=~a;
                a=_cror_(a,1);
                for (m=0;m<20;m++);

         
           for (m=0;m<ke;m++)
      {w=0x01;
          
          for(j=0;j<8;j++)
          {        if(n==1)break;
          key=keyscan();
                  n=key ;
            P2=w;
                P3=led1[k][j];
         Delay(50);
                w<<=1;
       
           }

          }
                 
       }                   
                    }


       
       
        }
         }


[attach]15813[/attach]


作者: ahshmj    时间: 2015-11-30 11:27
得看你的电路是怎么接的。
作者: 用户2111142    时间: 2015-11-30 20:44
ahshmj 发表于 2015-11-30 11:27
得看你的电路是怎么接的。

图片 传不上去

作者: ahshmj    时间: 2015-12-3 19:07
你那蜂鸣器响的时间太短了吧?而且是当K4是高电平时才响。89c52高电平好像驱动不了这个三极管,否则你一上电他就会不停地响。
作者: ahshmj    时间: 2015-12-3 19:09
你可以改一下,用低电平驱动。
作者: 腾飞的龙    时间: 2015-12-4 12:55
把驱动蜂鸣器的三极管换成pnp型8550
作者: liuzhaoxin1020    时间: 2016-12-31 15:28
结合电路分析
作者: liuzhaoxin1020    时间: 2016-12-31 15:29
换一下三极管试试




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1