Advertisement
k_vychodilova

PRACKA

Nov 29th, 2018
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.14 KB | None | 0 0
  1. /*
  2. * Copyright (c) 2015, Freescale Semiconductor, Inc.
  3. * All rights reserved.
  4. *
  5. * Redistribution and use in source and binary forms, with or without modification,
  6. * are permitted provided that the following conditions are met:
  7. *
  8. * o Redistributions of source code must retain the above copyright notice, this list
  9. * of conditions and the following disclaimer.
  10. *
  11. * o Redistributions in binary form must reproduce the above copyright notice, this
  12. * list of conditions and the following disclaimer in the documentation and/or
  13. * other materials provided with the distribution.
  14. *
  15. * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
  16. * contributors may be used to endorse or promote products derived from this
  17. * software without specific prior written permission.
  18. *
  19. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
  20. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  21. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  22. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
  23. * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  24. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  25. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  26. * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  27. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  28. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29. */
  30.  
  31. #include "MKL25Z4.h"
  32. #include "drv_lcd.h"
  33. #include "drv_gpio.h"
  34.  
  35. #define SWITCH_PIN (4) // A4
  36. #define SWITCH_PIN2 (5) // A5
  37.  
  38. #define VODA (0) // E0 - 15
  39. #define BUBEN_PRAVA (5) // E5 - 11
  40. #define BUBEN_LEVA (1) // E5 - 11
  41.  
  42. #define TOPENI (1) // E1 - 16
  43. #define HLADINA_50 (6)
  44. #define TOPENI_60 (2)
  45. #define TOPENI_40 (16)
  46. #define CERPADLO (0)
  47. #define OTACKY_ZVYSENE (4)
  48. #define while_true (1)
  49.  
  50. static int i = 0;
  51. void init(void);
  52. static inline int IsKeyPressed(int pin);
  53. void program1();
  54. void program2();
  55.  
  56. void delay(void);
  57.  
  58. int main(void) {
  59. /* Write your code here */
  60. // Initialize the pins
  61. init();
  62. // Wait for the user to press switch SW1. When pressed, continue with the next step.
  63. while (while_true) {
  64. if (IsKeyPressed(SWITCH_PIN2)) {
  65. program2();
  66. } else if (IsKeyPressed(SWITCH_PIN)) {
  67. program1();
  68. }
  69. }
  70.  
  71. /* Never leave main */
  72. return 0;
  73. }
  74.  
  75. void init(void) {
  76. // Enable clock for ports A and B
  77. SIM->SCGC5 |= (SIM_SCGC5_PORTA_MASK | SIM_SCGC5_PORTE_MASK
  78. | SIM_SCGC5_PORTC_MASK | SIM_SCGC5_PORTD_MASK);
  79. PORTA->PCR[SWITCH_PIN] = PORT_PCR_MUX(1);
  80. PORTA->PCR[SWITCH_PIN2] = PORT_PCR_MUX(1);
  81.  
  82. PORTE->PCR[OTACKY_ZVYSENE] = PORT_PCR_MUX(1);
  83. PTE->PDDR |= (1 << OTACKY_ZVYSENE); // SV1 is output - valve 1
  84.  
  85. PORTE->PCR[VODA] = PORT_PCR_MUX(1);
  86. PTE->PDDR |= (1 << VODA); // SV1 is output - valve 1
  87. PORTE->PCR[TOPENI] = PORT_PCR_MUX(1);
  88. PTE->PDDR |= (1 << TOPENI); // SV1 is output - valve 1
  89. PORTC->PCR[HLADINA_50] = PORT_PCR_MUX(1);
  90. PORTD->PCR[TOPENI_60] = PORT_PCR_MUX(1);
  91. PORTD->PCR[CERPADLO] = PORT_PCR_MUX(1);
  92. PTD->PDDR |= (1 << CERPADLO); // SV1 is output - valve 1
  93.  
  94. PORTE->PCR[BUBEN_PRAVA] = PORT_PCR_MUX(1);
  95. PORTC->PCR[BUBEN_LEVA] = PORT_PCR_MUX(1);
  96. PTE->PDDR |= (1 << BUBEN_PRAVA); // SV1 is output - valve 1
  97. PTC->PDDR |= (1 << BUBEN_LEVA); // SV1 is output - valve 1
  98.  
  99. LCD_initialize();
  100. // 2. Smazeme displej. Kurzor bude na radku 1, sloupci 1.
  101. LCD_clear();
  102. }
  103. static inline int IsKeyPressed(int pin) {
  104. if ((PTA->PDIR & (1 << pin)) == 0)
  105. return 1;
  106. else
  107. return 0;
  108. }
  109.  
  110. void program1() {
  111. // Zapnuti programu
  112. LCD_clear();
  113.  
  114. LCD_set_cursor(1, 1);
  115. LCD_puts("Program 1 spusten!");
  116.  
  117. PTE->PSOR = PTE->PSOR | (1 << BUBEN_PRAVA);
  118. delay();
  119. PTE->PCOR = PTE->PCOR | (1 << BUBEN_PRAVA);
  120.  
  121. PTE->PSOR = PTE->PSOR | (1 << VODA);
  122. while ((PTC->PDIR & (1 << HLADINA_50)) == 0)
  123. ;
  124. PTE->PCOR = PTE->PCOR | (1 << VODA);
  125.  
  126. PTE->PSOR = PTE->PSOR | (1 << TOPENI);
  127. while ((PTD->PDIR & (1 << TOPENI_60)) == 0)
  128. ;
  129. PTE->PCOR = PTE->PCOR | (1 << TOPENI);
  130.  
  131. PTE->PSOR = PTE->PSOR | (1 << BUBEN_PRAVA);
  132. delay();
  133. PTE->PCOR = PTE->PCOR | (1 << BUBEN_PRAVA);
  134. PTC->PSOR = PTE->PSOR | (1 << BUBEN_LEVA);
  135. delay();
  136. PTC->PCOR = PTE->PCOR | (1 << BUBEN_LEVA);
  137. PTE->PSOR = PTE->PSOR | (1 << BUBEN_PRAVA);
  138. delay();
  139. PTE->PCOR = PTE->PCOR | (1 << BUBEN_PRAVA);
  140. PTD->PSOR = PTE->PSOR | (1 << CERPADLO);
  141. delay();
  142. PTD->PCOR = PTE->PCOR | (1 << CERPADLO);
  143. PTE->PSOR = PTE->PSOR | (1 << OTACKY_ZVYSENE);
  144. PTC->PSOR = PTE->PSOR | (1 << BUBEN_LEVA);
  145. delay();
  146. PTC->PCOR = PTE->PCOR | (1 << BUBEN_LEVA);
  147. PTE->PCOR = PTE->PCOR | (1 << OTACKY_ZVYSENE);
  148.  
  149. // Zapnuti programu
  150. LCD_clear();
  151.  
  152. LCD_set_cursor(1, 1);
  153. LCD_puts("Dekujeme za");
  154.  
  155. LCD_set_cursor(2, 1);
  156. LCD_puts("pouziti pracky!");
  157.  
  158. }
  159.  
  160. void program2() {
  161. // Zapnuti programu
  162. LCD_set_cursor(1, 1);
  163. LCD_puts("Program 2 spusten!");
  164.  
  165. PTE->PSOR = PTE->PSOR | (1 << BUBEN_PRAVA);
  166. delay();
  167. PTE->PCOR = PTE->PCOR | (1 << BUBEN_PRAVA);
  168.  
  169. PTE->PSOR = PTE->PSOR | (1 << VODA);
  170. while ((PTC->PDIR & (1 << HLADINA_50)) == 0)
  171. ;
  172. PTE->PCOR = PTE->PCOR | (1 << VODA);
  173.  
  174. PTE->PSOR = PTE->PSOR | (1 << TOPENI);
  175. while ((PTD->PDIR & (1 << TOPENI_40)) == 0)
  176. ;
  177. PTE->PCOR = PTE->PCOR | (1 << TOPENI);
  178.  
  179. PTE->PSOR = PTE->PSOR | (1 << BUBEN_PRAVA);
  180. delay();
  181. PTE->PCOR = PTE->PCOR | (1 << BUBEN_PRAVA);
  182. PTC->PSOR = PTE->PSOR | (1 << BUBEN_LEVA);
  183. delay();
  184. PTC->PCOR = PTE->PCOR | (1 << BUBEN_LEVA);
  185. PTE->PSOR = PTE->PSOR | (1 << BUBEN_PRAVA);
  186. delay();
  187. PTE->PCOR = PTE->PCOR | (1 << BUBEN_PRAVA);
  188. PTD->PSOR = PTE->PSOR | (1 << CERPADLO);
  189. delay();
  190. PTD->PCOR = PTE->PCOR | (1 << CERPADLO);
  191. PTE->PSOR = PTE->PSOR | (1 << OTACKY_ZVYSENE);
  192. PTC->PSOR = PTE->PSOR | (1 << BUBEN_LEVA);
  193. delay();
  194. PTC->PCOR = PTE->PCOR | (1 << BUBEN_LEVA);
  195. PTE->PCOR = PTE->PCOR | (1 << OTACKY_ZVYSENE);
  196.  
  197. // Zapnuti programu
  198. LCD_clear();
  199.  
  200. LCD_set_cursor(1, 1);
  201. LCD_puts("Dekujeme za");
  202.  
  203. LCD_set_cursor(2, 1);
  204. LCD_puts("pouziti pracky!");
  205.  
  206. }
  207. void delay(void) {
  208. // 5 sec
  209. unsigned long n = 16666666;
  210. while (n--)
  211. ;
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement