找回密码
 立即注册

QQ登录

只需一步,快速开始

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

初学者跪求大神看看我的流水灯程序主要是矩阵键盘控制弄不成!!

[复制链接]
跳转到指定楼层
楼主
ID:99481 发表于 2015-12-12 21:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
老师给的要求是:1) 开机是点亮12发光二极管,闪烁三下
2) 按照顺时针循环依次点亮发光二极管
3) 通过按键将发光二极管的显示改为顺逆时针方式
我前两条在板子上成功了,用按键控制不知道该怎么弄。。我们发的板子是P3.6 P3.7为两行 P0.5 P0.6 P0.7为三列的矩阵键盘  求大神帮忙了 !妹子在这里感激不尽!!
#include<reg51.h>
#define uchar unsigned char     
#define uint  unsigned int
uchar flag1=0,flag2=0,flag3=0,flag4=0,flag5=0,flag6=0;   
sbit LED1 = P2^0;                 
sbit LED2 = P2^1;                                          
sbit LED3 = P2^2;  
sbit LED4 = P2^3;  
sbit LED5 = P2^4;  
sbit LED6 = P2^5;  
sbit LED7 = P2^6;  
sbit LED8 = P2^7;
sbit LED9 = P3^2;                  
sbit LED10 = P3^3;  
sbit LED11 = P3^4;  
sbit LED12 = P3^5;  
sbit key1 = P0^5;  
void delay(unsigned int factor)       //延时n*1ms
{
       unsigned int i,j;
       for(i=factor;i>0;i--)
              for(j=111;j>0;j--);                 
}
void keyscan(void)
{
        uchar n;

        //扫描第一行
        P3=0xbf;
        n=P3;
        n&=0xf0;
        if(n!=0xf0)
        {
                delay();
                P0=0xbf;
                n=P0;
                n&=0xf0;
                if(n!=0xf0)
                {
                           switch(n)
                        {
                    case(0xd0):flag1=1;break;
                    case(0xb0):flag2=1;break;
                    case(0x70):flag3=1;break;
                    }
                   }
        }
        //扫描第二行
        P3=0x7f;
        n=P3;
        n&=0xf0;
        if(n!=0xf0)
        {
                delay();
                  P0=0x7f;
                  n=P0;
                  n&=0xf0;
                  if(n!=0xf0)
                {
                          switch(n)
                        {
                        case(0xd0):flag4=1;break;
                    case(0xb0):flag5=1;break;
                    case(0x70):flag6=1;break;
                        default:flag1=1;break;
                    }
                   }
        }
       
}


void main()
{
  char i,j;
  int m,n;
  for(j=0;j<3;j++)
  {
  P2=0x00;
  P3=0x00;
  delay(600);
  P2=0xff;
  P3=0xff;
  delay(600);
  }
  while(1)
  { keyscan();
    if(flag1)
        { m=0x80;
      n=0x80;
      for(i=0;i<=8;i++)
    {        P2=~m;
              m=m>>1;
              delay(600);
    }
      LED8=1;
      for(j=0;j<=5;j++)       
    { P3=~n;
            n=n>>1;
          delay(600);
    }
    LED9=1;
    }
        if(flag2)
        {int p,q;
     int i,j;
     while(1)
     { p=0x80;
       q=0x80;
       for(i=0;i<=8;i++)
       {        P2=~p;
                  p=p<<1;
                delay(600);
       }
     LED1=1;
       for(j=0;j<=5;j++)       
       { P3=~q;
                q=q<<1;
             delay(600);
       }
     LED12=1;
     }  
        }
  }


}

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

使用道具 举报

沙发
ID:92873 发表于 2015-12-19 14:43 | 只看该作者
感觉键盘扫描程序有问题
回复

使用道具 举报

板凳
ID:79544 发表于 2015-12-20 12:21 | 只看该作者
必须用矩阵键盘吗,用独立键盘控制写个流水灯的程序不就行啦
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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