Advertisement
GameNationRDF

C PIC32 Seven Segment Dısplay

May 11th, 2017
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.68 KB | None | 0 0
  1.  /*
  2.   * Author: Umut Berk Bilgiç
  3.   * Bilkent University Computer Science - CS224 Lab 6
  4.   * Following code displays the fibonacci sequence on a 4 digit seven segment
  5.   *     display array. It spesifically utilizes a multiplexed seven segment
  6.   *     display aray that is expandable.
  7.   */
  8.  
  9. // init
  10. int i, j, k, temp, cur, speed, counter;
  11. int fib, dig_1, dig_2, dig_3, dig_4;
  12.  
  13. // LUT for seven segment display characters (0 to 9)
  14. unsigned char seg[10]  = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
  15.  
  16. // LUT for anode values {1110, 1101, 1011, 0111}
  17. unsigned char anode[4] = {0x07, 0x0B, 0x0D, 0x0E};
  18.  
  19. // MAIN
  20. void main()
  21. {
  22.     // Set analog ports to digital and disable jtag
  23.     AD1PCFG = 0xFFFF;
  24.     DDPCON.JTAGEN = 0;
  25.    
  26.     // Se TRISx registers for the ports that will be used
  27.     TRISD = 0x0000;
  28.     TRISE = 0x0000;
  29.    
  30.     // Init. ports
  31.     PORTE = 0x0000;
  32.     PORTD = 0xFFFF;
  33.    
  34.     // elements for fibonacci addition
  35.     i = 0;
  36.     j = 1;
  37.    
  38.     // tracks which stage of fibonacci sequence the program is at
  39.     cur = 1;
  40.    
  41.     // speed * 4 (ms) is the update time
  42.     speed = 250;
  43.    
  44.     // counter for resetting the sequence
  45.     counter = 0;
  46.      
  47.     while(1) // main loop
  48.     {
  49.          fib = i + j;
  50.        
  51.          // basic fibonacci calculation
  52.          if (cur == 1)
  53.          {
  54.              i = i + j;
  55.              cur = 0;
  56.          }
  57.          else
  58.          {
  59.              j = i + j;
  60.              cur = 1;
  61.          }
  62.          
  63.          counter++;
  64.          
  65.          // setup a temporary variable for digit calculation
  66.          temp = fib;
  67.          
  68.          // calculate digit indexes
  69.          dig_1 = temp % 10;
  70.          temp = temp / 10;
  71.          
  72.          dig_2 = temp % 10;
  73.          temp = temp / 10;
  74.          
  75.          dig_3 = temp % 10;
  76.          temp = temp / 10;
  77.  
  78.          dig_4 = temp % 10;
  79.  
  80.          // show the same number k times
  81.          for (k = 0; k < speed; k++)
  82.          {
  83.              // digit 1
  84.              PORTD = ~seg[dig_1];
  85.              PORTE = ~anode[0];
  86.              Delay_ms(1);
  87.  
  88.              // digit 2
  89.              PORTD = ~seg[dig_2];
  90.              PORTE = ~anode[1];
  91.              Delay_ms(1);
  92.  
  93.              // digit 3
  94.              PORTD = ~seg[dig_3];
  95.              PORTE = ~anode[2];
  96.              Delay_ms(1);
  97.  
  98.              // digit 4
  99.              PORTD = ~seg[dig_4];
  100.              PORTE = ~anode[3];
  101.              Delay_ms(1);
  102.          }
  103.          
  104.          // reset fibonacci sequence if it gets too big for 4 digits
  105.          if(counter == 19)
  106.          {
  107.              i = 0;
  108.              j = 1;
  109.              cur = 1;
  110.              counter = 0;
  111.          }
  112.      }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement