⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led_matrix.c

📁 freescale badge board 开发板测试 源程序
💻 C
📖 第 1 页 / 共 3 页
字号:
  
  /* Send out Characters */
  if(message_length>COLUMNS) 
  {
      for (c = 0; c < COLUMNS; c++) 
      {
        if (c < COLUMNS/2) 
        {
            PTAD = 0x00;
            PTED = ~(1 << c);
            PTDD = 0xFF;
            PTAD = fb[message_length-COLUMNS+c-1];
            
        }
        else
        {
            PTAD = 0x00;
            PTDD = ~(1 << c - (COLUMNS/2));
            PTED = 0xFF;
            PTAD = fb[message_length-COLUMNS+c-1];            
        }
                   
        // Enter stop mode and wait for RTC wakeup 
        //asm (stop #0x2000);
        for(j=0;j<100;j++)
          asm("nop");
      }     
  } 
  else
  {
      for (c = 0; c < COLUMNS; c++) 
      {
      
        if (c < COLUMNS/2) 
        {
            PTAD=0x00;
            PTED = ~(1 << c);
            PTDD = 0xFF;
            PTAD = fb[c];
        }
        else
        {
            PTAD=0x00;
            PTDD = ~(1 << c - (COLUMNS/2));
            PTED = 0xFF;
            PTAD = fb[c];
        }
                   
        // Enter stop mode and wait for RTC wakeup 
        //asm (stop #0x2000);
        for(j=0;j<100;j++)
          asm("nop");
      }
  }
  
  /* Turn off RTC Interrupt */  
  //RTCSC  = 0x00;
  
  /* Turn off RTC clock */
  //SCGC2_RTC=0; 
}


/*******************************************************************/
/*!
 * Edit the default message
 * If E4 is touched, returns early to avoid saving message
 * E1 increments character
 * E2 decrements character
 * E3 toggles Caps Lock
 * E4 exits without saving message
 * E5 saves character and moves to next one
 * E6 deletes previous character
 * E8 saves message
 */
void 
EditMessage() 
{
  int i; 
  char scrollspeed;
 
  char message[MAX_CHAR_LENGTH];
  unsigned char alphabetpos=0;
  unsigned char messagepos=0;
  unsigned char CapsLock=0;
 
  for(i=0;i<MAX_CHAR_LENGTH;i++) 
  {
    message[i]=0;
  }
  message[0]='a';
  
  while(KeyPressed()) {
  }
  
  /* Continue until Exit */
  while(LastKeyPressed()!=8) 
  {
    if(KeyPressed()) 
    {   
      /* Increment Character */
      if(LastKeyPressed()==1) 
      {
        alphabetpos++;
        /* Roll alphabet position counter over */
        if(alphabetpos>=sizeof(SelectChar)) 
        {
          alphabetpos=0;
        }
        /* If CapsLock is set, use capital character for a-z */
        if(CapsLock==1 && SelectChar[alphabetpos]>='a' && SelectChar[alphabetpos]<='z') 
        {
           message[messagepos]=SelectChar[alphabetpos]-32;       
        } 
        else 
        {
          message[messagepos]=SelectChar[alphabetpos]; 
        }
      }
      
      /* Decrement Character */
      if(LastKeyPressed()==2) 
      {
        /* Roll alphabet position counter over */      
        if(alphabetpos==0) 
        {
          alphabetpos=sizeof(SelectChar)-1;
        } 
        else 
        {
          alphabetpos--;
        }
        /* If CapsLock is set, use capital character for a-z */        
        if(CapsLock==1 && SelectChar[alphabetpos]>='a' && SelectChar[alphabetpos]<='z') 
        {
           message[messagepos]=SelectChar[alphabetpos]-32;       
        } 
        else 
        {
          message[messagepos]=SelectChar[alphabetpos]; 
        }
      }
      
      /* Caps Lock Key */     
      if(LastKeyPressed()==3) 
      {
        if(CapsLock==1) 
        {
          message[messagepos]=SelectChar[alphabetpos];  
          CapsLock=0;
        }
        else 
        {
          if(SelectChar[alphabetpos]>='a' && SelectChar[alphabetpos]<='z') 
          {            
            message[messagepos]=SelectChar[alphabetpos]-32;  
          }
          CapsLock=1;
        }
      }
      
      /* Cancel */
      if(LastKeyPressed()==4) 
      {
        return;
      }
      
      /* Save character */
      if(LastKeyPressed()==5) 
      {
        if(messagepos < (MAX_CHAR_LENGTH - 1)) 
        {

          messagepos++;
       
          if(CapsLock==1 && SelectChar[alphabetpos]>='a' && SelectChar[alphabetpos]<='z') 
          {
            message[messagepos]=SelectChar[alphabetpos]-32;          
          } 
          else
          {
            message[messagepos]=SelectChar[alphabetpos];
          }
        }

      }
      
      /* Delete last character */
      if(LastKeyPressed()==6) 
      {
        if(messagepos>0) 
        {  
          message[messagepos]=0;
          messagepos--;
          //message[messagepos]=0;
        }
      }
      
      /* Wait until Key No Longer Pressed */          
      while(KeyPressed()) 
      {
        LEDWrite(message);
      }
    } 
    else
    {
      LEDWrite(message);
    }
  }
  
  /* Exit hit. Save last character */
  messagepos++;
  message[messagepos]=0;
 
 
  scrollspeed=*SpeedAddress;
  
  /* Write Message to Flash */
  if(message[0]!=0 && message[0]!=' ') 
  {
    SCGC2_FLS=1;
    Flash_SectorErase(MessageAddress);
    Flash_ByteProgram(MessageAddress,message,(MAX_CHAR_LENGTH/4 + 1));
    Flash_ByteProgram(SpeedAddress,&scrollspeed,1); 
    SCGC2_FLS=0;
  }
}

/*******************************************************************/
/*!
 * Change the speed that the message scrolls
 * E1 Speeds Up
 * E2 Slows Down
 * E3 sets to default
 * E8 exits
 */
void ScrollSpeed() 
{
  char message[MAX_CHAR_LENGTH];
  char scrollspeed=*SpeedAddress;
  int i;

  
  /* Wait while button to select this demo is raised */
  while(KeyPressed()) {}
  
  /* Continue until Exit */
  while(LastKeyPressed()!=8) 
  {
    if(KeyPressed()) 
    {
      /* Increase speed */
      if(LastKeyPressed()==1) 
      {
        if(scrollspeed > SCROLL_MAX) 
        {
          scrollspeed--;
          memcpy(message, (void*)MessageAddress, MAX_CHAR_LENGTH);

          SCGC2_FLS=1;
          Flash_SectorErase(MessageAddress);
          Flash_ByteProgram(MessageAddress,message, (MAX_CHAR_LENGTH/4 + 1)); 
          Flash_ByteProgram(SpeedAddress,&scrollspeed,1);
          SCGC2_FLS=0;
        }        
      }
      
      /* Decrease speed */
      if(LastKeyPressed()==2) 
      {
        if(scrollspeed < SCROLL_MIN) 
        {
          scrollspeed++;
          memcpy(message, (void*)MessageAddress, MAX_CHAR_LENGTH);

          SCGC2_FLS=1;
          Flash_SectorErase(MessageAddress);
          Flash_ByteProgram(MessageAddress,message, (MAX_CHAR_LENGTH/4 + 1)); 
          Flash_ByteProgram(SpeedAddress,&scrollspeed,1);
          SCGC2_FLS=0;
        }
      }
      
      /* Set to default speed */
      if(LastKeyPressed()==3) 
      {
          scrollspeed = SCROLL_DEFAULT;
          memcpy(message, (void*)MessageAddress, MAX_CHAR_LENGTH);

          SCGC2_FLS=1;
          Flash_SectorErase(MessageAddress);
          Flash_ByteProgram(MessageAddress,message, (MAX_CHAR_LENGTH/4 + 1)); 
          Flash_ByteProgram(SpeedAddress,&scrollspeed,1);
          SCGC2_FLS=0;
      }

      /* Wait until Key No Longer Pressed */          
      while(KeyPressed()) 
      {
        //LEDScroll("Press E1 to speed up. E2 to slow down");
      }
      
      /* Delay */
      for(i=0;i<30000;i++)
        asm("nop");
        
    }
    else
    {
      LEDScrollTouch("E1 to speed up. E2 to slow down. E3 set to default");
    }
  }
}


/*******************************************************************/
/*!
 * Draw a graphic on the LED screen
 * A '1' turns on the LED, '0' is off
 * display_screen() controls how long each frame is shown
 * Exits if detect a slide down the left hand side buttons
 */
void graphic()
{
  byte gb[MAX_MSG_LENGTH]; 
  char i;
 
  while(KeyPressed()) 
  {
    asm("nop");
  }
 
  /* Turn on RTC Clock */
  SCGC2_RTC=1;
  
  /* Turn on RTC Interrupt */
  rtc_init(8);
  
  for(i=0;i<1;i++) {
    
/* gb[0] is far left column, gb[15] is far right */
  /* The MSB (left side) is bottom row, LSB is the top row */

  gb[0] =  0b00000;
  gb[1] =  0b00000;
  gb[2] =  0b00000;
  gb[3] =  0b00000;
  gb[4] =  0b00000;
  gb[5] =  0b00000;
  gb[6] =  0b00000;
  gb[7] =  0b00000;
  gb[8] =  0b00000;
  gb[9] =  0b00000;
  gb[10] = 0b00000;
  gb[11] = 0b00000;
  gb[12] = 0b00000;
  gb[13] = 0b00000;
  gb[14] = 0b00000;
  gb[15] = 0b00000;
  
  /* Send out to LED Matrix */
  display_screen(gb);    
  
  /* Check for slide left down on buttons */
  if(KeyPressed()) 
    {
      PTAD = 0x00;  
      break;
    } 

  ////////////////////

  gb[0] =  0b00000;
  gb[1] =  0b00000;
  gb[2] =  0b00000;
  gb[3] =  0b00000;
  gb[4] =  0b00000;
  gb[5] =  0b00000;
  gb[6] =  0b00000;
  gb[7] =  0b00100;
  gb[8] =  0b00000;
  gb[9] =  0b00000;
  gb[10] = 0b00000;
  gb[11] = 0b00000;
  gb[12] = 0b00000;
  gb[13] = 0b00000;
  gb[14] = 0b00000;
  gb[15] = 0b00000;
 
  display_screen(gb);    
  if(KeyPressed()) 
    {
      PTAD = 0x00;  
      break;
    } 

  //////////////////////////////
  gb[0] =  0b00000;
  gb[1] =  0b00000;
  gb[2] =  0b00000;
  gb[3] =  0b00000;
  gb[4] =  0b00000;
  gb[5] =  0b00000;
  gb[6] =  0b00100;
  gb[7] =  0b01110;
  gb[8] =  0b00100;
  gb[9] =  0b00000;
  gb[10] = 0b00000;
  gb[11] = 0b00000;
  gb[12] = 0b00000;
  gb[13] = 0b00000;
  gb[14] = 0b00000;
  gb[15] = 0b00000;
  display_screen(gb);    
  if(KeyPressed()) 
    {
      PTAD = 0x00;  
      break;
    } 
  ///////////////////////////
     gb[0] =  0b00000;
  gb[1] =  0b00000;
  gb[2] =  0b00000;
  gb[3] =  0b00000;
  gb[4] =  0b00000;
  gb[5] =  0b00000;
  gb[6] =  0b01110;
  gb[7] =  0b11111;
  gb[8] =  0b01110;
  gb[9] =  0b00000;
  gb[10] = 0b00000;
  gb[11] = 0b00000;
  gb[12] = 0b00000;
  gb[13] = 0b00000;
  gb[14] = 0b00000;
  gb[15] = 0b00000;
  display_screen(gb);    
  if(KeyPressed()) 
    {
      PTAD = 0x00;  
      break;
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -