Advertisement
Guest User

Untitled

a guest
May 23rd, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.53 KB | None | 0 0
  1. #include <51/AnalogDevices/AduC834.h>
  2. #include <stdio.h>
  3. //at (adres)0xA0 (dyrektywa)sbit (nazwa)LED1
  4.  
  5. at 0xA0 sbit LED1;
  6. at 0xA1 sbit KLAWISZ1;
  7. at 0xA3 sbit KLAWISZ2;
  8. at 0x8000 xdata char LCD_DATA; //xdata - adres uzyty w zewnetrzej pamieci danych
  9. at 0x8001 xdata char LCD_COMMAND;
  10. at 0x8001 xdata volatile char LCD_STATUS;
  11.  
  12. void KLAWIATURA(void) interrupt 0 using 1;
  13.  
  14. char numer = 0;
  15. char flaga = 0;
  16. char flaga2 = 0;
  17. char znak = 0;
  18. char NAPIS[10];
  19.  
  20. void LCD_DATA_WR(char DANE){
  21. LCD_DATA = DANE;
  22. while((LCD_STATUS&0x03)!=0x03);
  23. }
  24.  
  25. void LCD_COMMAND_WR(char rozkaz){
  26. LCD_COMMAND = rozkaz;
  27. while((LCD_STATUS&0x03)!=0x03);
  28. }
  29.  
  30. void INIT_LCD(){
  31. LCD_COMMAND_WR(0x80); //CGRAM + CGROM, TXT + GRAPH
  32.  
  33. LCD_DATA_WR(0x00); // wskazniki ekranu graficznego
  34. LCD_DATA_WR(0x00);
  35. LCD_COMMAND_WR(0x42);
  36.  
  37. LCD_DATA_WR(0x1E); // 30 kolumn graf.
  38. LCD_DATA_WR(0x00);
  39. LCD_COMMAND_WR(0x43);
  40.  
  41. LCD_DATA_WR(0x00); // wskaznik ekranu tekstowego
  42. LCD_DATA_WR(0x10);
  43. LCD_COMMAND_WR(0x40);
  44.  
  45. LCD_DATA_WR(0x1E); // 30 kolumn txt
  46. LCD_DATA_WR(0x00);
  47. LCD_COMMAND_WR(0x41);
  48.  
  49. LCD_COMMAND_WR(0x94); // wyswitlaj txt bez kursora
  50. }
  51.  
  52. int putchar(const int c){
  53. LCD_DATA_WR(c-0x20);
  54. LCD_COMMAND_WR(0xC0); // zapisz znak i zwieksz adres
  55. return c;
  56. }
  57.  
  58. void USTAW_POZYCJE(int adres){
  59. LCD_DATA_WR(adres&0x00FF);
  60. LCD_DATA_WR(adres>>8);
  61. LCD_COMMAND_WR(0x24);
  62. }
  63.  
  64. void POZYCJA(char kolumna, char wiersz)
  65. {
  66. int adres=0x1000+(kolumna+wiersz*60);
  67. LCD_DATA_WR(adres&0x00FF);
  68. LCD_DATA_WR(adres>>8);
  69. LCD_COMMAND_WR(0x24);
  70. }
  71.  
  72. void CLRSCR(){
  73. int i = 0;
  74. USTAW_POZYCJE(0x1000);
  75. for(i; i<255; i++)
  76. {
  77. putchar(0x20);
  78. }
  79. }
  80.  
  81. void ZAPISZ_NAPIS(char* napis)
  82. {
  83. int i;
  84. for(i=0; napis[i]!='\0'; i++){
  85. putchar(napis[i]);
  86. }
  87. }
  88.  
  89. void KLAWIATURA() interrupt 0 using 1
  90. {
  91. switch(numer)
  92. {
  93. case 0:
  94. znak=0;
  95. break;
  96. case 1:
  97. case 2:
  98. case 3:
  99. case 4:
  100. case 5:
  101. case 6:
  102. case 7:
  103. case 8:
  104. if(P1&1) znak=znak|(1<<numer-1);
  105. break;
  106. case 9: break;
  107. case 10:
  108. numer = -1;
  109. flaga = 1;
  110. break;
  111. }
  112. numer++;
  113. }
  114.  
  115. char TLUMACZ(char znak)
  116. {
  117. switch(znak)
  118. {
  119. case 0x1c: return 'a'; break;
  120. case 0x32: return 'b'; break;
  121. case 0x21: return 'c'; break;
  122. case 0x23: return 'd'; break;
  123. case 0x24: return 'e'; break;
  124. case 0x2b: return 'f'; break;
  125. case 0x34: return 'g'; break;
  126. case 0x33: return 'h'; break;
  127. case 0x43: return 'i'; break;
  128. case 0x3b: return 'j'; break;
  129. case 0x42: return 'k'; break;
  130. case 0x4b: return 'l'; break;
  131. case 0x3a: return 'm'; break;
  132. case 0x31: return 'n'; break;
  133. case 0x44: return 'o'; break;
  134. case 0x4d: return 'p'; break;
  135. case 0x15: return 'q'; break;
  136. case 0x2d: return 'r'; break;
  137. case 0x1b: return 's'; break;
  138. case 0x2c: return 't'; break;
  139. case 0x3c: return 'u'; break;
  140. case 0x1d: return 'w'; break;
  141. case 0x2a: return 'v'; break;
  142. case 0x22: return 'x'; break;
  143. case 0x35: return 'y'; break;
  144. case 0x1a: return 'z'; break;
  145. case 0x29: return ' '; break;
  146.  
  147. default: break;
  148.  
  149. }
  150. }
  151.  
  152. char CEZAR2(char znak)
  153. {
  154. switch(znak)
  155. {
  156. case 0x1c: return 'g'; break;
  157. case 0x32: return 'h'; break;
  158. case 0x21: return 'i'; break;
  159. case 0x23: return 'j'; break;
  160. case 0x24: return 'k'; break;
  161. case 0x2b: return 'l'; break;
  162. case 0x34: return 'm'; break;
  163. case 0x33: return 'n'; break;
  164. case 0x43: return 'o'; break;
  165. case 0x3b: return 'p'; break;
  166. case 0x42: return 'q'; break;
  167. case 0x4b: return 'r'; break;
  168. case 0x3a: return 's'; break;
  169. case 0x31: return 't'; break;
  170. case 0x44: return 'u'; break;
  171. case 0x4d: return 'w'; break;
  172. case 0x15: return 'v'; break;
  173. case 0x2d: return 'x'; break;
  174. case 0x1b: return 'y'; break;
  175. case 0x2c: return 'z'; break;
  176. case 0x3c: return 'a'; break;
  177. case 0x1d: return 'b'; break;
  178. case 0x2a: return 'c'; break;
  179. case 0x22: return 'd'; break;
  180. case 0x35: return 'e'; break;
  181. case 0x1a: return 'f'; break;
  182.  
  183. default: break;
  184.  
  185. }
  186. }
  187.  
  188.  
  189.  
  190. int main()
  191. {
  192. //int i = 0;
  193. PLLCON = 0;
  194. IE = 0x81; // 1000 0001 binary - odblokowanie przerwania INT0
  195. IT0 = 1; // zbocze opadające
  196.  
  197. INIT_LCD();
  198. CLRSCR();
  199. USTAW_POZYCJE(0x1000);
  200. ZAPISZ_NAPIS("Tekst:");
  201.  
  202. while(1)
  203. {
  204. if(flaga)
  205. {
  206.  
  207. if((znak!=0xf0) && (flaga2==0)) //znak różny od F0
  208. {
  209. if(KLAWISZ1==1) printf("%c", TLUMACZ(znak));
  210.  
  211. if(KLAWISZ1==0) printf("%c", CEZAR2(znak));
  212.  
  213.  
  214. flaga2=1;
  215. }
  216. else flaga2=0;
  217.  
  218.  
  219.  
  220. flaga=0;
  221.  
  222. }
  223.  
  224. }
  225.  
  226.  
  227.  
  228.  
  229.  
  230. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement