Advertisement
Sothian

Untitled

Oct 13th, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.68 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <io.h>
  3. #include <system.h>
  4.  
  5. /* Przełączniki */
  6. #define  SW0 0x00000001
  7. #define  SW1 0x00000002
  8. #define  SW2 0x00000004
  9. #define  SW3 0x00000008
  10. #define  SW4 0x00000010
  11. #define  SW5 0x00000020
  12. #define  SW6 0x00000040
  13. #define  SW7 0x00000080
  14. #define  SW8 0x00000100
  15. #define  SW9 0x00000200
  16. #define  SW10 0x00000400
  17. #define  SW11 0x00000800
  18. #define  SW12 0x00001000
  19. #define  SW13 0x00002000
  20. #define  SW14 0x00004000
  21. #define  SW15 0x00008000
  22. #define  SW16 0x00010000
  23. #define  SW17 0x00020000
  24.  
  25. /* PushButtony */
  26. #define  KEY1 0x00000002
  27. #define  KEY2 0x00000004
  28. #define  KEY3 0x00000008
  29.  
  30. /* Ledy */
  31. #define  LED0 0x00000001
  32. #define  LED1 0x00000002
  33. #define  LED2 0x00000004
  34. #define  LED3 0x00000008
  35. #define  LED4 0x00000010
  36. #define  LED5 0x00000020
  37. #define  LED6 0x00000040
  38. #define  LED7 0x00000080
  39. #define  LED8 0x00000100
  40. #define  LED9 0x00000200
  41. #define  LED10 0x00000400
  42. #define  LED11 0x00000800
  43. #define  LED12 0x00001000
  44. #define  LED13 0x00002000
  45. #define  LED14 0x00004000
  46. #define  LED15 0x00008000
  47. #define  LED16 0x00010000
  48. #define  LED17 0x00020000
  49.  
  50. /* Segmenty HEX */
  51. #define  SEGA 0x01
  52. #define  SEGB 0x02
  53. #define  SEGC 0x03
  54. #define  SEGD 0x04
  55. #define  SEGE 0x08
  56. #define  SEGF 0x10
  57. #define  SEGG 0x20
  58.  
  59. int main() {
  60.     printf("Hello from Nios II!\n");
  61.  
  62.     /* Litery i cyfry z hex 7 segmentowych */
  63.     int HEX0 = SEGA|SEGB|SEGC|SEGD|SEGE|SEGF;
  64.     int HEX1 = SEGB|SEGC;
  65.     int HEX2 = SEGA|SEGB|SEGG|SEGE|SEGD;
  66.     int HEX3 = SEGA|SEGB|SEGC|SEGD|SEGG;
  67.     int HEX4 = SEGF|SEGG|SEGB|SEGC;
  68.     int HEX5 = SEGA|SEGF|SEGG|SEGC|SEGD;
  69.     int HEX6 = SEGA|SEGF|SEGG|SEGC|SEGD|SEGE;
  70.     int HEX8 = SEGA|SEGB|SEGC|SEGD|SEGE|SEGF|SEGG;
  71.     int HEX9 = SEGA|SEGB|SEGC|SEGD|SEGF|SEGG;
  72.     int HEXE = SEGA|SEGF|SEGG|SEGE|SEGD;
  73.     int HEXr = SEGE|SEGG;
  74.  
  75.     /* Stan do sprawdzenia jaki przycisk jest wciśnięty */
  76.     int state = 0;
  77.  
  78.     /* Pętla nieskończona w której działa program */
  79.     while(1) {
  80.         /* Pobranie panelu switchów */
  81.         int switches = IORD(SW_SLIDERS_BASE,0);
  82.         /* Odczyt który slajder został użyty */
  83.         state = switches & (SW0|SW1|SW2|SW3|SW4|SW5);
  84.  
  85.         /* Robienie czegoś w zależności jaki slider został użyty */
  86.         switch(state) {
  87.             case 0:
  88.                 /* Reset wszystkich diod i segmentów, żaden slider nie został użyty*/
  89.                 /* !!!UWAGA!!!
  90.                     Jeśli jest jakiś problem z odczytywanie tych nazw LEDS_GREEN itp to używamy adresów typu 0x00000030, które można odczytać w Qsys lub z pliku system.h znajdującego się w bibliotece BSP danego projektu)
  91.                 */
  92.                 IOWR(LEDS_GREEN_BASE,0,0);
  93.                 IOWR(LEDS_RED_BASE,0,0);
  94.                 IOWR(HEX_3_BASE,0,0);
  95.                 break;
  96.             case 1:
  97.                 /* Zapala diode na pozycji 0 przy uzyciu slidera na pozycji 0 */
  98.                 IOWR(LEDS_GREEN_BASE,0,LEDG0);
  99.  
  100.                 /* Instrukcja segmentów HEX:
  101.                         Pierwszy z lewej: Po prostu nazwa zdefiniowanej cyfry lub liczby HEX__
  102.                         Drugi od lewej: (HEX__ << 8)
  103.                         Trzeci z lewej: (HEX__ << 16)
  104.                         Czwarty z lewej: (HEX__ << 24)
  105.                     Na przykład:
  106.                     IOWR(HEX_3_BASE, (HEX3 << 24) | (HEX2 <<16) | (HEX1 <<8) |HEX0);
  107.                     Wyświetli: |0|1|2|3|
  108.                 */
  109.                 break;
  110.             case 2:
  111.                 IOWR(LEDS_GREEN_BASE,0,LEDG1);
  112.                 break;
  113.             case 4:
  114.                 IOWR(LEDS_GREEN_BASE,0,LEDG2);
  115.                 break;
  116.             case 8:
  117.                 IOWR(LEDS_GREEN_BASE,0,LEDG3);
  118.                 break;
  119.             case 16:
  120.                 IOWR(LEDS_GREEN_BASE,0,LEDG4);
  121.                 break;
  122.             case 32:
  123.                 IOWR(LEDS_GREEN_BASE,0,LEDG5);
  124.                 break;
  125.             default:
  126.                 /* Reset diod niebieskich, zapalenie ostatniej diody czerwonaj i wyświetlenie na HEX "Err"*/
  127.                 IOWR(HEX_3_BASE,0,((HEXE<<16) | (HEXr<<8) | HEXr));
  128.                 IOWR(LEDS_GREEN_BASE,0,0);
  129.                 IOWR(LEDS_RED_BASE,0,LEDR17);
  130.                 break;
  131.         }
  132.     }
  133.  
  134.     return 0;
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement