Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.83 KB | None | 0 0
  1. // in de header file staan alle function-prototypes en alle defines
  2.  
  3. // de andere commando's zorgen ervoor dat dezelfde header-file
  4. // geen 2keer wordt geïnclude in dezelfde compilatie
  5.  
  6. #ifndef LCD_H_
  7. #define LCD_H_
  8.  
  9.  
  10. #include <system.h>
  11.  
  12. #define E portb.5 // enable
  13. #define RS portb.4 // registery select
  14.  
  15. #define CLR_DISP 0x01 // clear display
  16. #define DISP_ON 0x0C // display on
  17. #define DISP_OFF 0x08 // display off
  18. #define CUR_HOME 0x02 // cursor naar eerste positie, set DDRAM naar adress 0
  19. #define CUR_OFF 0x0C // cursor uit
  20. #define CUR_ON 0x0E // cursor aan
  21. #define CUR_ON_BLINK 0x0F // cursor blinken
  22. #define CUR_LEFT 0x10 // cursor naar links
  23. #define CUR_RIGHT 0x14 // cursor naar rechts
  24. #define CUR_UP 0x80 // set DDRAM adress (lijn 1)
  25. #define CUR_DOWN 0xC0 // set DDRAM adress 2 (lijn 2)
  26. #define ENTER 0xC0 // set DDRAM adress 2 (lijn 2)
  27. #define DD_RAM_ADDR 0x80 // set DDRAM adress (lijn 1)
  28. #define DD_RAM_ADDR2 0xC0 // set DDRAM adress 2 (lijn 2)
  29. //UITBREIDINGEN
  30. #define DISP_SHIFT_LEFT 0x18 // display shift links
  31. #define DISP_SHIFT_RIGHT 0x1C // display shift rechts
  32. #define LINE1 0x80 // lijn 1 schrijven
  33. #define LINE2 0xC0 // lijn 1 schrijven
  34.  
  35.  
  36. void E_Pulse(void) {
  37. E=1;
  38. delay_us(100);
  39. E=0;
  40. }
  41.  
  42. //********************************************************************
  43.  
  44. // Send char to LCD
  45. void LCDSendChar(unsigned char c) {
  46.  
  47. unsigned char data;
  48.  
  49. delay_ms(20);
  50.  
  51. //get upper nibble
  52. data = c & 0b11110000;
  53.  
  54. //set b3-b0
  55. data = data >> 4;
  56.  
  57. //send data to LCD
  58. portb = data;
  59.  
  60. //set LCD to write
  61. //RW=0;
  62.  
  63. //set LCD to data mode
  64. RS=1;
  65.  
  66. //toggle Enable for LCD
  67. E_Pulse();
  68.  
  69. // get lower nibble
  70. data = c & 0b00001111;
  71.  
  72. //send data to LCD
  73. portb = data;
  74.  
  75. //set LCD to write
  76. //RW=0;
  77.  
  78. //set LCD to data mode
  79. RS=1;
  80.  
  81. //toggle Enable for LCD
  82. E_Pulse();
  83. }
  84.  
  85. //********************************************************************
  86.  
  87. // Send command to LCD
  88. void LCDSendCmd(unsigned char c) {
  89.  
  90. unsigned char data;
  91.  
  92. delay_ms(20);
  93.  
  94. //get upper nibble
  95. data = c & 0b11110000;
  96.  
  97. //set b3-b0
  98. data = data >> 4;
  99.  
  100. //send data to LCD
  101. portb = data;
  102.  
  103. //set LCD to write
  104. //RW=0;
  105.  
  106. //set LCD to data mode
  107. RS=0;
  108.  
  109. //toggle E for LCD
  110. E_Pulse();
  111.  
  112. // get lower nibble
  113. data = c & 0b00001111;
  114. portb = data;
  115.  
  116. //set LCD to write
  117. //RW=0;
  118.  
  119. //set LCD to data mode
  120. RS=0;
  121.  
  122. //toggle Enable for LCD
  123. E_Pulse();
  124.  
  125. }
  126.  
  127. //********************************************************************
  128.  
  129. void LCDSendStr(unsigned char* str) {
  130. // string doorsturen: karakter per karakter doorsturen
  131. unsigned int i=0;
  132. while(str[i]) {
  133. LCDSendChar(str[i]);
  134. i++;
  135. }
  136. }
  137.  
  138. //********************************************************************
  139.  
  140. // Init LCD after reset
  141. void InitLCD(void) {
  142.  
  143. intcon = 0x0; // Disable interupt
  144. trisb.5 = 0; // E pin as output
  145. trisb = 0x00; // b0-b3 as output
  146.  
  147.  
  148. RS=0; // instructie
  149. delay_ms(110); // wacht 110ms
  150.  
  151. //onderstaande waarden geinspireerd op ASSEMBLER oefeningen vorig jaar
  152. LCDSendCmd(0b00100000); // LCD-init
  153. delay_ms(20); // wacht 10ms
  154.  
  155. LCDSendCmd(0b00100000); // LCD-init
  156. delay_ms(20); // wacht 10ms
  157.  
  158. LCDSendCmd(0b00100000); // LCD-init
  159. delay_ms(20); // wacht 10ms
  160.  
  161. LCDSendCmd(0b00101000); // function set
  162. // b4=0=dl > 4 bit interface
  163. // b3=0=N > display 1 line
  164. // b2=0=F > 5*8dots
  165. delay_ms(20); // wacht 10ms
  166.  
  167. LCDSendCmd(0b00101000); // display control
  168. // b2=1 > display on
  169. // b1=0 > cursor on
  170. // b0=0 > cursor doesn't blink
  171. delay_ms(20); // wacht 10ms
  172.  
  173. LCDSendCmd(0b00000001); // clear display
  174. delay_ms(20); // wacht 10ms
  175. }
  176.  
  177.  
  178.  
  179. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement