Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.50 KB | None | 0 0
  1. #include <msp430x14x.h>
  2. #define set_bit(var,bitNo) ((var)|=1<<(bitNo)) //ustawienie bitu na pozycji bitNo
  3. #define clr_bit(var,bitNo) ((var)&=~(1<<(bitNo))) //czyszczenie bitu na pozycji bitNo
  4. #define E 3 //P2.3
  5. #define RS 2 //P2.2
  6. #define DISPLAY P2OUT // wyswietlacz pod3aczony do portu P2
  7. #define _50ms 2000
  8. #define _5ms 200
  9. #define _50us 2
  10. #define _2ms 80
  11. #define _200us 8
  12. #define CLR_DISP 0x01 // clear display
  13. #define CUR_HOME 0x02 // return home
  14. #define ENTRY_INC 0x06 // entry mode increment
  15. #define ENTRY_INC_ROL 0x07 // entry mode increment with rol data
  16. #define ENTRY_DEC 0x04 // entry mode decrement
  17. #define ENTRY_DEC_ROL 0x05 // entry mode decrement witch rol dat
  18. #define DISP_OFF 0x08 // all display off
  19. #define DISP_ON 0x0c // all display on
  20. #define DATA_ROL_LEFT 0x18 // rol data left
  21. #define DATA_ROL_RIGHT 0x1c // rol data right
  22. #define CUR_SHIFT_LEFT 0x10 // shift coursor left
  23. #define CUR_SHIFT_RIGHT 0x14 // shift coursor right
  24. #define DD_RAM_ADDR 0x80 // set DD_RAM 1 line
  25. #define DD_RAM_ADDR2 0xc0 // set DD_RAM 2 line
  26. #define DD_RAM_ADDR3 0x28 //
  27. #define CG_RAM_ADDR 0x40 // set CG_RAM
  28.  
  29. //polecenia steruj1ce wyowietlaczem
  30.  
  31. #define ON_LCD 0x0c // wlaczenie wyswietlania
  32. #define CLR_LCD 0x01 // czyszczenie wyswietlacza
  33. #define ROW 0x40 // jeden wiersz
  34.  
  35. const unsigned char message[]="HELLO WORLD !!!";
  36.  
  37. void ini_display(void);
  38. void send_char (unsigned char c);
  39. void send_cmd(unsigned char cmd);
  40. void toggle_E(void);
  41. void wait_25us(void);
  42. void wait (unsigned int n);
  43. void zad1();
  44. void zad2();
  45. void zad3();
  46.  
  47. void main (void)
  48. {
  49. WDTCTL = WDTPW + WDTHOLD;
  50. P2DIR=~BIT0; //linia P2.O pozostaje jako wejocie
  51. ini_display();
  52. P4DIR &= ~0x10;
  53. //inicjalizacja wyswietlacza
  54.  
  55.  
  56.  
  57. //zad1();
  58. //zad2();
  59. zad3();
  60.  
  61. }
  62.  
  63. void ini_display(void)
  64. {
  65. wait(_50ms); // czekaj na ustabilizowanie napiecia
  66. DISPLAY=0x30; // procedura inicjalizacyjna
  67. toggle_E();
  68. wait(_5ms);
  69. toggle_E();
  70. wait(_200us);
  71. toggle_E();
  72. wait(_200us); //koniec inicjalizacji
  73. DISPLAY&=~BIT4; //interfejs 4-bitowy
  74. toggle_E();
  75. send_cmd(ROW);
  76. send_cmd(ON_LCD);
  77. send_cmd(CLR_LCD);
  78. wait(_2ms);
  79. }
  80.  
  81. void send_char (unsigned char c)
  82. {
  83. unsigned char temp;
  84.  
  85. //wysylanie starszego polbajtu
  86.  
  87. temp=c&0xf0;
  88. DISPLAY&=0x0f;
  89. DISPLAY|=temp;
  90. set_bit(DISPLAY,RS); //wysylane beda dane
  91. toggle_E();
  92. //wait(_0,5us) - stosowac przy wiekszych czestotliwosciach zegara
  93.  
  94. //wysylanie mlodszej polowki bajtu
  95.  
  96. temp=c&0x0f;
  97. temp=temp<<4;
  98. DISPLAY&=0x0f;
  99. DISPLAY|=temp;
  100. toggle_E();
  101. //wait(_05us);
  102. wait (_50us);
  103. }
  104.  
  105. void send_cmd(unsigned char cmd)
  106. {
  107. unsigned char temp;
  108. temp=cmd&0xf0;
  109. DISPLAY&=0x0f;
  110. DISPLAY|=temp;
  111. clr_bit(DISPLAY,RS);
  112. toggle_E();
  113. //wait(_0.5us);
  114. temp=cmd&0x0f;
  115. temp=temp<<4;
  116. DISPLAY&=0x0f;
  117. DISPLAY|=temp;
  118. toggle_E();
  119. // wait(_0.5us);
  120. wait (_50us);
  121. }
  122.  
  123. void toggle_E(void)
  124. {
  125. set_bit (DISPLAY,E);
  126. wait_25us (); //min 0,25us
  127. clr_bit(DISPLAY,E);
  128. }
  129.  
  130. void wait_25us(void) // 2 cykle (przekazanie arg.)+5(call)+1(i=1)+3(i<n)+3(i++)+3(i<n)+3(ret)=20cykli
  131. { // 20*1/800kHz=25us
  132. unsigned int i;
  133. for(i=0;i<1;i++);
  134. }
  135.  
  136. void wait(unsigned int n)
  137. {
  138. unsigned int i;
  139. for(i=0;i<n;i++)
  140. wait_25us();
  141. }
  142.  
  143. //----------ZADANIE1--------------
  144. void zad1(){
  145. while(1){
  146. int i =0;
  147. if( (P4IN & 0x10) == 0){
  148. send_cmd(CLR_DISP);
  149. wait(50);
  150. i = 0;
  151. send_cmd(DD_RAM_ADDR2);
  152. while (message[i])
  153. {
  154. send_char(message[i]);
  155. i++;
  156. }
  157. }
  158. if((P4IN & 0x20) == 0){
  159. send_cmd(CLR_DISP);
  160. wait(50);
  161. i = 0;
  162. send_cmd(DD_RAM_ADDR);
  163. while (message[i])
  164. {
  165. send_char(message[i]);
  166. i++;
  167. }
  168. }
  169. }
  170. }
  171.  
  172. //----------ZADANIE 2--------------
  173. void zad2(){
  174.  
  175. while(1){
  176. int i =0;
  177. if( (P4IN & 0x10) == 0){
  178. send_cmd(CLR_DISP);
  179. wait(50);
  180. i = 0;
  181. send_cmd(DD_RAM_ADDR2);
  182. while (message[i])
  183. {
  184. send_char(message[i]);
  185. i++;
  186. }
  187. }
  188. if((P4IN & 0x20) == 0){
  189. send_cmd(CLR_DISP);
  190. wait(50);
  191. i = 0;
  192. send_cmd(DD_RAM_ADDR);
  193. while (message[i])
  194. {
  195. send_char(message[i]);
  196. i++;
  197. }
  198. }
  199. if((P4IN & 0x40) == 0){
  200. send_cmd(DATA_ROL_LEFT);
  201. wait(500);
  202. }
  203. if((P4IN & 0x80) == 0){
  204. send_cmd(DATA_ROL_RIGHT);
  205. wait(500);
  206. }
  207. }
  208. }
  209.  
  210. //-----------ZADANIE 3----------
  211. void zad3(){
  212. int i = 0;
  213. send_cmd(CLR_DISP);
  214. wait(50);
  215. i = 0;
  216. send_cmd(DD_RAM_ADDR);
  217. while (message[i])
  218. {
  219. send_char(message[i]);
  220. i++;
  221. }
  222. int a = strlen(message)- 1;//sizeof(message)/sizeof( unsigned char);
  223.  
  224. while(1){
  225. i = 0;
  226. if((P4IN & 0x40) == 0){
  227. send_cmd(DATA_ROL_LEFT);
  228. a--;
  229. wait(500);
  230. }
  231.  
  232. if((P4IN & 0x80) == 0){
  233. send_cmd(DATA_ROL_RIGHT);
  234. a++;
  235. wait(500);
  236. }
  237.  
  238. i = (strlen(message)- 1) - a;
  239.  
  240. if(a < strlen(message)- 1){
  241. send_cmd(DD_RAM_ADDR2);
  242. while (i!=0)
  243. {
  244. send_char(message[i]);
  245. i--;
  246. }
  247. wait(500);
  248. }
  249. }
  250. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement