找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4710|回复: 7
打印 上一主题 下一主题
收起左侧

为什么我按单片机矩阵按键时,蜂鸣器的功能却都实现不了,求大神看看程序哪里错了

[复制链接]
跳转到指定楼层
楼主
当每按一次点阵按键的其中一个时,蜂鸣器都会响一次,为什么我按点阵按键时,蜂鸣器的功能却都实现不了,求教。。。。


#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;
       
           }

          }
                 
       }                   
                    }


       
       
        }
         }




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7485 发表于 2015-11-30 11:27 | 只看该作者
得看你的电路是怎么接的。
回复

使用道具 举报

板凳
ID:83671 发表于 2015-11-30 20:44 | 只看该作者
ahshmj 发表于 2015-11-30 11:27
得看你的电路是怎么接的。

图片 传不上去
回复

使用道具 举报

地板
ID:7485 发表于 2015-12-3 19:07 | 只看该作者
你那蜂鸣器响的时间太短了吧?而且是当K4是高电平时才响。89c52高电平好像驱动不了这个三极管,否则你一上电他就会不停地响。
回复

使用道具 举报

5#
ID:7485 发表于 2015-12-3 19:09 | 只看该作者
你可以改一下,用低电平驱动。
回复

使用道具 举报

6#
ID:79544 发表于 2015-12-4 12:55 | 只看该作者
把驱动蜂鸣器的三极管换成pnp型8550
回复

使用道具 举报

7#
ID:153199 发表于 2016-12-31 15:28 | 只看该作者
结合电路分析
回复

使用道具 举报

8#
ID:153199 发表于 2016-12-31 15:29 | 只看该作者
换一下三极管试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表