微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求大神来指点一下渣渣啊!按键控制流水灯的问题!

求大神来指点一下渣渣啊!按键控制流水灯的问题!

时间:10-02 整理:3721RD 点击:
今天做单片机实验老师要我写一个关于按键控制流水灯的程序。是这样的,按第一个按键第一个流水灯亮,松开流水灯灭;按第二个按键亮两个流水灯,松开流水灯灭;这样依次到第八个按键。我写了很久但是都无法实现功能,大神快来救救我这个渣渣啊!万分感谢~
程序如下,求大神告诉我错在哪以及该如何写。谢谢啦啦啦啦啦!
#include <reg52.h>                   
#define uchar unsigned char
#define uint unsigned int                
uchar code table[]={
0xfe,0xfc,0xf8,0xf0,
0xe0,0xc0,0x80,0x00};
void delayms(uint xms)                               
{
        uint i,j;
        for(i=xms;i>0;i--)                     
                for(j=110;j>0;j--);
}
void display(uchar num)
{
        P1=table[num];
}
void matrixkeyscan()
{
        uchar temp,key;
    P3=0xfe;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      delayms(10);
          temp=P3;
          temp=temp&0xf0;
          
      if(temp!=0xf0)
      {
        temp=P3;
       
       
        switch(temp)
        {       
           
          case 0xee:
               key=0;
               break;
          case 0xde:
               key=1;
               break;
          case 0xbe:
               key=2;
               break;
          case 0x7e:
               key=3;
               break;
                     while(temp==0xf0)
          {
          
             P1=0xff;
       
          }
                 
         }
         while(temp!=0xf0)
         {
           temp=P3;
           temp=temp&0xf0;
       
                  
         }
        display(key);  
       
      }
         }
    P3=0xfd;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      delayms(10);
      temp=P3;
      temp=temp&0xf0;
         
      if(temp!=0xf0)
      {
        temp=P3;
               
       
        switch(temp)
        {   
       
          case 0xed:
               key=4;
               break;
          case 0xdd:
               key=5;
               break;
          case 0xbd:
               key=6;
               break;
          case 0x7d:
               key=7;
               break;
                           while(temp==0xf0)
          {
          
             P1=0xff;
       
          }
                
                 }
                   while(temp!=0xf0)
         {
           temp=P3;
           temp=temp&0xf0;
         }
       
        display(key);       
      }
       
    }
        }
void main()
{
        P1=0xff;  
  while(1)
  {
        matrixkeyscan();
  }
}

自己顶一下~~~~

沉了惹

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top