单片机/MCUwilliam hill官网
直播中

biangbiang面

10年用户 54经验值
擅长:嵌入式技术
私信 关注
[问答]

这个程序的原理怎么看不明白?蜂鸣器为什么会响?

就是这个
#include

#define uchar unsigned char

uchar a0=16,b0=16,c0=16,d0=16,e0=16,f0=16,wei,temp,key,i,j,k;
***it dula=P2^6;
***it wela=P2^7;
***it beep=P2^3;

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

void delay(uchar i)
{
        for(j=i;j>0;j--)
        for(k=125;k>0;k--);
}
void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f)
{
   dula=0;
   P0=table[a];
   dula=1;
   dula=0;

   wela=0;
   P0=0xfe;
   wela=1;
   wela=0;
   delay(5);

   P0=table[b];
   dula=1;
   dula=0;

   P0=0xfd;
   wela=1;
   wela=0;
   delay(5);

   P0=table[c];
   dula=1;
   dula=0;

   P0=0xfb;
   wela=1;
   wela=0;
   delay(5);

   P0=table[d];
   dula=1;
   dula=0;

   P0=0xf7;
   wela=1;
   wela=0;
   delay(5);

   P0=table[e];
   dula=1;
   dula=0;

   P0=0xef;
   wela=1;
   wela=0;
   delay(5);

   P0=table[f];
   dula=1;
   dula=0;

   P0=0xdf;
   wela=1;
   wela=0;
   delay(5);
}

void keyscan()
{
  {       
    P3=0xfe;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      delay(10);
      if(temp!=0xf0)
      {       
        temp=P3;
        switch(temp)
        {
          case 0xee:
               key=0;
                           wei++;
               break;

          case 0xde:
               key=1;
                           wei++;
               break;

          case 0xbe:
               key=2;
                           wei++;
               break;

          case 0x7e:
               key=3;
                           wei++;
               break;
         }
         while(temp!=0xf0)
        {
           temp=P3;
           temp=temp&0xf0;
           beep=0;
         }
         beep=1;
      }
    }
    P3=0xfd;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      delay(10);
      if(temp!=0xf0)
      {
        temp=P3;
        switch(temp)
        {
          case 0xed:
               key=4;
                           wei++;
               break;

          case 0xdd:
               key=5;
                           wei++;
               break;

          case 0xbd:
               key=6;
                           wei++;
               break;

          case 0x7d:
               key=7;
                           wei++;
               break;
         }
         while(temp!=0xf0)
         {
           temp=P3;
           temp=temp&0xf0;
           beep=0;
         }
         beep=1;
      }
      }
    P3=0xfb;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      delay(10);
      if(temp!=0xf0)
      {
        temp=P3;
        switch(temp)
        {
          case 0xeb:
               key=8;
                           wei++;
               break;

          case 0xdb:
               key=9;
                           wei++;
               break;
                          
          case 0xbb:
               key=10;
                           wei++;
               break;

          case 0x7b:
               key=11;
                           wei++;
               break;
         }
        while(temp!=0xf0)
         {
           temp=P3;
           temp=temp&0xf0;
           beep=0;
         }
         beep=1;
      }
      }
              P3=0xf7;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      delay(10);
      if(temp!=0xf0)
      {
        temp=P3;
        switch(temp)
        {
          case 0xe7:
               key=12;
                           wei++;
               break;

          case 0xd7:
               key=13;
                           wei++;
               break;

          case 0xb7:
               key=14;
                           wei++;
               break;

          case 0x77:
               key=15;
                           wei++;
               break;
         }
         while(temp!=0xf0)
         {
           temp=P3;
           temp=temp&0xf0;
           beep=0;
         }
         beep=1;
      }
    }
}
}
  void main()
  {
          while(1)
        {
          keyscan();
        if(key!=20)
        {
        switch(wei)
                {
                        case 1: a0=key;
                                        b0=16;
                                        c0=16;
                                        d0=16;
                                        e0=16;
                                        f0=16;
                                        break;
                        case 2: b0=key;
                                        c0=16;
                                        d0=16;
                                        e0=16;
                                        f0=16;
                                        break;
                        case 3: c0=key;
                                        d0=16;
                                        e0=16;
                                        f0=16;
                                        break;
                        case 4: d0=key;
                                        e0=16;
                                        f0=16;
                                        break;
                        case 5: e0=key;
                                        f0=16;
                                        break;
                        case 6: f0=key;
                                        wei=0;
                                        break;
        }
        key=20;
        }
        display(a0,b0,c0,d0,e0,f0);
}
}

回帖(6)

阿信509

2014-9-21 19:09:39
你先找找动态扫描的文档看看原理,应该有说明的
举报

biangbiang面

2014-9-21 21:12:08
已经看了,但是没有找出问题来
举报

biangbiang面

2014-9-21 22:30:39
哎呀,刚刚灵光一闪,我看懂了,我真机智{:12:}
举报

阿信509

2014-9-22 10:16:29
恭喜啊,这个东西就是要多看多想才行
举报

biangbiang面

2014-9-23 11:42:32
请问,看懂一个单片机程序有哪些步骤?
举报

史永刚

2017-8-7 08:59:33
a0到f0的初始值为哈设为16 还有后面那个判断为啥key等于20
举报

更多回帖

发帖
×
20
完善资料,
赚取积分