Advertisement
Guest User

exercise1_lab2

a guest
Jan 23rd, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.40 KB | None | 0 0
  1. // Copyright by Adam Kinsman, Henry Ko and Nicola Nicolici
  2. // Developed for the Embedded Systems course (COE4DS4)
  3. // Department of Electrical and Computer Engineering
  4. // McMaster University
  5. // Ontario, Canada
  6.  
  7. #include "io.h"
  8. #include "system.h"
  9. #include "alt_types.h"
  10. #include "sys/alt_stdio.h"
  11. //#include <stdio.h>
  12.  
  13. alt_u16 disp_seven_seg(alt_u8 val) {
  14.     switch (val) {
  15.         case  0 : return 0x40;
  16.         case  1 : return 0x79;
  17.         case  2 : return 0x24;
  18.         case  3 : return 0x30;
  19.         case  4 : return 0x19;
  20.         case  5 : return 0x12;
  21.         case  6 : return 0x02;
  22.         case  7 : return 0x78;
  23.         case  8 : return 0x00;
  24.         case  9 : return 0x18;
  25.         case 10 : return 0x08;
  26.         case 11 : return 0x03;
  27.         case 12 : return 0x46;
  28.         case 13 : return 0x21;
  29.         case 14 : return 0x06;
  30.         case 15 : return 0x0e;
  31.         default : return 0x7f;
  32.     }
  33. }        
  34.  
  35. int main()
  36. {
  37.     alt_8 i;
  38.     alt_8 j;
  39.     alt_8 k;
  40.     alt_u32 switch_val;
  41.     alt_putstr("Experiment 2!\n");
  42.    
  43.     //j = 2;
  44.    // alt_printf("%x", j);
  45.  
  46.     /* Event loop never exits. */
  47.     while (1) {
  48.         switch_val = IORD(SWITCH_I_BASE, 0);
  49.         IOWR(LED_RED_O_BASE, 0, switch_val);
  50.         if (switch_val == 0) {
  51.             IOWR(SEVEN_SEGMENT_N_O_1_BASE, 0,
  52.                 disp_seven_seg(16));
  53.             IOWR(SEVEN_SEGMENT_N_O_0_BASE, 0,
  54.                 disp_seven_seg(16));
  55.         } else {
  56.  
  57.     // THIS IS FIRST PART
  58.  
  59.             for (i = 17; i >= 0; i--) {
  60.                 if (((switch_val >> i) & 0x1) != 0){
  61.                     j = j+1;
  62.                 }
  63.             //  alt_printf("%x", j);
  64.             }
  65.             if(j >= 9){
  66.                 // THIS IS THE SECOND PART INSIDE THE FIRST PART
  67.  
  68.                          // IF SWITCH 17 IS ON AND AT LEAST ONE OTHER SWITCH IS LOW,
  69.                          // THEN DISPLAY BINARY OF MOST SIGNIFICANT SWITCH THAT IS LOW
  70.                             if((switch_val >= 0x20000) && (switch_val < 0x3FFFF)){
  71.                                 for (k = 16; k >= 0; k--) {
  72.                                     if (((switch_val >> k) & 0x1) == 0) {
  73.                                         IOWR(LED_GREEN_O_BASE, 0, 224+k);
  74.                                         k = 0;
  75.                                     }
  76.                                 }
  77.                             }
  78.                          // IF SWITCH 17 IS LOW AND SWITCH 16 IS HIGH THEN DISPLAY
  79.                          // BINARY OF LEAST SIGNIFICANT SWITCH THAT IS LOW
  80.                             else if((switch_val >= 0x10000) && (switch_val < 0x20000)){
  81.                                 for (k = 0; k <= 15; k++) {
  82.                                     if (((switch_val >> k) & 0x1) == 0) {
  83.                                         IOWR(LED_GREEN_O_BASE, 0, 224+k);
  84.                                         k = 15;
  85.                                     }
  86.                                 }
  87.                             }
  88.                          // IF ALL SWITCHES ARE ON THEN ALL GREEN LED'S ARE ON
  89.                             else if(switch_val == 0x3FFFF){
  90.                                 IOWR(LED_GREEN_O_BASE, 0, 255);
  91.                             }
  92.                          // IF SWITCH 17 AND 16 ARE BOTH LOW THEN DISPLAY BINARY
  93.                          // OF THE NUMBER OF SWITCHES THAT ARE HIGH
  94.                             else if(switch_val <= 0xFFFF){
  95.                                 IOWR(LED_GREEN_O_BASE, 0, 224+j);
  96.                             }
  97.                             else {
  98.                                 IOWR(LED_GREEN_O_BASE, 0, 224);
  99.                             }
  100.             }
  101. //------------------------------------------------------------------------------------------------------------------------
  102.     // THIS IS THE SECOND PART
  103.  
  104.          // IF SWITCH 17 IS ON AND AT LEAST ONE OTHER SWITCH IS LOW,
  105.          // THEN DISPLAY BINARY OF MOST SIGNIFICANT SWITCH THAT IS LOW
  106.             else if(switch_val >= 0x20000){
  107.                 for (k = 16; k >= 0; k--) {
  108.                     if (((switch_val >> k) & 0x1) == 0) {
  109.                         IOWR(LED_GREEN_O_BASE, 0, k);
  110.                         k = 0;
  111.                     }
  112.                 }
  113.             }
  114.          // IF SWITCH 17 IS LOW AND SWITCH 16 IS HIGH THEN DISPLAY
  115.          // BINARY OF LEAST SIGNIFICANT SWITCH THAT IS LOW
  116.             else if((switch_val >= 0x10000) && (switch_val < 0x20000)){
  117.                 for (k = 0; k <= 15; k++) {
  118.                     if (((switch_val >> k) & 0x1) == 0) {
  119.                         IOWR(LED_GREEN_O_BASE, 0, k);
  120.                         k = 15;
  121.                     }
  122.                 }
  123.             }
  124.          // IF ALL SWITCHES ARE ON THEN ALL GREEN LED'S ARE ON
  125.             else if(switch_val == 0x3FFFF){
  126.                 IOWR(LED_GREEN_O_BASE, 0, 255);
  127.             }
  128.          // IF SWITCH 17 AND 16 ARE BOTH LOW THEN DISPLAY BINARY
  129.          // OF THE NUMBER OF SWITCHES THAT ARE HIGH
  130.             else if(switch_val <= 0xFFFF){
  131.                 IOWR(LED_GREEN_O_BASE, 0, j);
  132.             }
  133.             else {
  134.                 IOWR(LED_GREEN_O_BASE, 0, 0);
  135.             }
  136.             j = 0;
  137.         }
  138.     }
  139.    
  140.     return 0;
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement