Advertisement
GameNationRDF

C PIC32 Counting

May 7th, 2017
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.00 KB | None | 0 0
  1.  /*
  2.   * Author: Umut Berk Bilgiç
  3.   * Bilkent University Computer Science - CS224 Lab 6
  4.   * Following code demonstrates simple binary counting with variable speed
  5.   *     and orientation controls. PORTs are modifiable as long as they follow
  6.   *     the classic numbering scheme.
  7.   */
  8.  
  9. // decimal int to binary string conversion for use in
  10. // ... reverse/mirrored display.
  11. void decTo8BinStr(int value, char* output)
  12. {
  13.     int i;
  14.     for (i = 7; i >= 0; --i)
  15.     {
  16.         value = value >> 1;
  17.         output[i] = (value & 1) + '0';
  18.     }
  19. }
  20.  
  21. // initialize variables for
  22. int i;
  23. const int max_count = 256;
  24.  
  25. void main() {
  26.      AD1PCFG = 0xFFFF;  // set analog ports to digital
  27.      DDPCON.JTAGEN = 0; // disable jtag
  28.      
  29.      TRISD = 0x0000;    // make PORTD output
  30.      TRISE = 0xFFFF;    // make PORTE input
  31.      
  32.      PORTD = 0xFFFF;    // init PORTD to all zeros
  33.      
  34.      // E4 not pressed: normal
  35.      // E4 pressed: mirrored
  36.      // ** E1: high speed
  37.      // ** E3: low speed
  38.      
  39.      while(1) // main loop
  40.      {
  41.          for (i = 0; i < max_count; i++)
  42.          {
  43.              if (PORTEbits.RE4 != 0) // normal orientation
  44.                  PORTD = ~i;  // set LEDs to current number
  45.              else
  46.              {
  47.                   char s[8];
  48.                   decTo8BinStr(i, s);
  49.                   PORTDbits.RD0 = ~(s[0] - '0');
  50.                   PORTDbits.RD1 = ~(s[1] - '0');
  51.                   PORTDbits.RD2 = ~(s[2] - '0');
  52.                   PORTDbits.RD3 = ~(s[3] - '0');
  53.                   PORTDbits.RD4 = ~(s[4] - '0');
  54.                   PORTDbits.RD5 = ~(s[5] - '0');
  55.                   PORTDbits.RD6 = ~(s[6] - '0');
  56.                   PORTDbits.RD7 = ~(s[7] - '0');
  57.              }
  58.              
  59.              // select delays based on given inputs at PORTE
  60.              if (PORTEbits.RE1 == 0)
  61.                  Delay_ms(250);
  62.              else if (PORTEbits.RE3 == 0)
  63.                  Delay_ms(750);
  64.              else
  65.                  Delay_ms(500);
  66.          }
  67.      }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement