Advertisement
Guest User

Untitled

a guest
Dec 15th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.73 KB | None | 0 0
  1. #include<msp430x14x.h>
  2. #include "uart.h"
  3. #include "lcd.h"
  4. #include "portyUart.h"
  5. #include "portyLcd.h"
  6.  
  7. #define true 1
  8. #define false 0
  9.  
  10. #define button1 P4IN & BIT4
  11. #define button2 P4IN & BIT5
  12. #define button3 P4IN & BIT6
  13. #define button4 P4IN & BIT7
  14.  
  15. #define buforSize 30
  16.  
  17. char data[buforSize]; // bufor odczytywanych danych
  18.  
  19. int startData=0;
  20. int endData=0;
  21.  
  22. char data1[16];
  23. char data2[16];
  24.  
  25. void Wyswietl_linie()
  26. {
  27. clearDisplay();
  28. int i = 0 ;
  29. while(true)
  30. {
  31. if(data1[i] != 0)
  32. {
  33. if(data1[i] == 13)break;
  34. putc(data1[i]);
  35. }
  36. i++;
  37. if(i == 16)break;
  38. }
  39.  
  40. gotoSecondLine();
  41. i=0;
  42.  
  43. while(data2[i] != 0)
  44. {
  45. putc(data2[i++]);
  46. if(i == 16)break;
  47. }
  48. }
  49.  
  50. void move()
  51. {
  52. int i=0;
  53. for(i=0; i<16; i++)
  54. {
  55. data1[i] = data2[i];
  56. data2[i] = 0;
  57. }
  58. }
  59.  
  60. void addChar(char z)
  61. {
  62.  
  63. int i = 0 ;
  64. while(data1[i] != 0)
  65. {
  66. if(data1[i] == 13)break;
  67. //if(data1[i] == 16)break;
  68. i++;
  69. if(i == 16)break;
  70. }
  71.  
  72.  
  73. if(i!=16 && data1[i] != 13)
  74. //if(i!=16 && data1[i] != 16)
  75. {
  76. data1[i] = z;
  77. }
  78. else
  79. {
  80. i= 0;
  81. while(data2[i] != 0)
  82. {
  83. if(data2[i] == 13)break;
  84. i++;
  85. if(i == 16)break;
  86. }
  87. if(z == 13)
  88. {
  89. data2[i] = z;
  90. move();
  91. }
  92. else if(i!=16&& data2[i] != 13)
  93. // else if(i!=16&& data2[i] != 15)
  94. {
  95. data2[i] = z;
  96. }
  97. else
  98. {
  99. move();
  100. addChar(z);
  101. }
  102. }
  103. }
  104.  
  105. void Delay (unsigned int a)
  106. {
  107. int k;
  108. for (k=0 ; k != a; ++k)
  109. {
  110. _NOP();
  111. _NOP();
  112. _NOP();
  113. _NOP();
  114. }
  115. }
  116.  
  117. void Delayx100us(unsigned int b)
  118. {
  119. int j;
  120. for (j=0; j!=b; ++j) {
  121. Delay (_100us);
  122. }
  123. }
  124.  
  125. void lcdInit() {
  126. InitPortsLcd(); // inicjalizacja portów LCD
  127. InitLCD(); // inicjalizacja LCD
  128. clearDisplay(); // czyszczenie wyowietlacza
  129. initPortyUart(); // inicjalizacja portow UART
  130. initUart(9600);
  131. }
  132.  
  133. void buttonInit() {
  134. P4DIR &= ~BIT4;
  135. P4DIR &= ~BIT5;
  136. P4DIR &= ~BIT6;
  137. P4DIR &= ~BIT7;
  138. _EINT(); // w31czenie przerwan
  139. }
  140.  
  141. void listenDataIsTransmitted(){
  142. while(endData != startData) // gdy odebrano dane
  143. {
  144. addChar(data[startData]); // wypisanie danych na wyowietlaczu
  145. startData= (++startData)%30; // inkrementowanie znaczika pocz1tka danych
  146. Wyswietl_linie();
  147. }
  148. }
  149.  
  150. void main(void)
  151. {
  152. WDTCTL=WDTPW + WDTHOLD; // wy31czenie WDT
  153.  
  154. lcdInit();
  155. buttonInit();
  156.  
  157. while(true)
  158. {
  159. if((button1)==0) {
  160. UartCharTransmit('Q');
  161. Delayx100us(2000);
  162. }
  163.  
  164. if((button2) == 0) {
  165. UartCharTransmit('W');
  166. Delayx100us(2000);
  167. }
  168.  
  169. if((button3)==0) {
  170. UartCharTransmit('E');
  171. Delayx100us(2000);
  172. }
  173.  
  174. if((button4)==0) {
  175. UartCharTransmit('R');
  176. Delayx100us(2000);
  177. }
  178.  
  179. listenDataIsTransmitted();
  180. }
  181. }
  182.  
  183. #pragma vector=UART0RX_VECTOR // procedura obs3ugi przerwania UART
  184. __interrupt void usart0_rx (void)
  185. {
  186. data[endData]=RXBUF0; // wpisanie odebranych danych
  187. endData=(++endData)%buforSize; // inkrementowanie znacznika konca danych
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement