Advertisement
Guest User

Untitled

a guest
May 20th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.87 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #define F_CPU 16000000
  5. #include <util/delay.h>
  6. #include <avr/interrupt.h>
  7.  
  8. void Inicjalizacja(void); //deklaracja funkcji inicjalizacji LCD
  9. void Wyswietlanie(char*, int8_t); //deklaracja funkcji wyswietlania na LCD
  10. void Wyswietlanie_nizej(char*, int8_t); //deklaracja funkcji wyswietlania nizej na LCD
  11. void Zapis(int8_t); //deklaracja funkcji zapisu na wyswietlaczu LCD
  12.  
  13. int licznik = 0;
  14.  
  15. char tab0[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
  16. char tab1[16] = {'o' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
  17. char tab2[16] = {'l' , 'o', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
  18. char tab3[16] = {'l' , 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
  19. char tab4[16] = {'a' , 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
  20. char tab5[16] = {'H', 'a', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
  21. char tab6[16] = {' ' ,'H', 'a', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
  22. char tab7[16] = {' ' , ' ', 'H', 'a', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
  23. char tab8[16] = {' ' , ' ', ' ', 'H', 'a', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
  24. char tab9[16] = {' ' , ' ', ' ', ' ', 'H', 'a', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
  25. char tab10[16] = {' ' , ' ', ' ', ' ', ' ', 'H', 'a', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' '};
  26. char tab11[16] = {' ' , ' ', ' ', ' ', ' ', ' ', 'H', 'a', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' '};
  27. char tab12[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', 'H', 'a', 'l', 'l', 'o', ' ', ' ', ' ', ' '};
  28. char tab13[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'H', 'a', 'l', 'l', 'o', ' ', ' ', ' '};
  29. char tab14[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'H', 'a', 'l', 'l', 'o', ' ', ' '};
  30. char tab15[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'H', 'a', 'l', 'l', 'o', ' '};
  31. char tab16[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'H', 'a', 'l', 'l', 'o'};
  32. char tab17[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'H', 'a', 'l', 'l'};
  33. char tab18[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'H', 'a', 'l'};
  34. char tab19[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'H', 'a'};
  35. char tab20[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'H'};
  36.  
  37. volatile uint8_t keystate_forward;
  38. volatile uint8_t keystate_backward;
  39. volatile uint8_t keystate_stop;
  40.  
  41. int tablice = 0;
  42. int flaga = 0;
  43.  
  44. int main(void)
  45. {
  46. TCCR0 |= (1<<WGM01) | (0<<WGM00); // wybor timera
  47. TCCR0 |= (1<<CS02) | (0<<CS01) | (1<<CS00); // tutaj dzielnik
  48. OCR0 = 50; // liczenie do tej wartosci
  49. TIMSK |= (1<<OCIE0);
  50. sei();
  51.  
  52.  
  53. PORTC = 0xFF; // wlaczanie rezystora
  54.  
  55.  
  56. Inicjalizacja();
  57. for(;;){
  58. if(keystate_forward == 2){
  59. tablice++;
  60. flaga = 0;
  61. if(tablice == 32){
  62. licznik++;
  63. tablice = 0;
  64. }
  65. keystate_forward = 3;
  66. }
  67. if(keystate_backward == 2){
  68. tablice--;
  69. flaga = 0;
  70. if(tablice == -1){
  71. tablice = 31;
  72. }
  73. keystate_backward = 3;
  74. }
  75. if(keystate_stop == 2){
  76. flaga = 1;
  77. keystate_stop = 3;
  78. }
  79.  
  80. switch(tablice){
  81. case 0:
  82. Zapis(1); //czyszczenie wyswietlacza
  83. _delay_ms(1.64);
  84. Wyswietlanie(tab5,16);
  85. Wyswietlanie_nizej(tab0,16);
  86. break;
  87.  
  88. case 1:
  89. Zapis(1); //czyszczenie wyswietlacza
  90. _delay_ms(1.64);
  91. Wyswietlanie(tab6,16);
  92. Wyswietlanie_nizej(tab0,16);
  93. break;
  94.  
  95. case 2:
  96. Zapis(1); //czyszczenie wyswietlacza
  97. _delay_ms(1.64);
  98. Wyswietlanie(tab7,16);
  99. Wyswietlanie_nizej(tab0,16);
  100. break;
  101.  
  102. case 3:
  103. Zapis(1); //czyszczenie wyswietlacza
  104. _delay_ms(1.64);
  105. Wyswietlanie(tab8,16);
  106. Wyswietlanie_nizej(tab0,16);
  107. break;
  108.  
  109. case 4:
  110. Zapis(1); //czyszczenie wyswietlacza
  111. _delay_ms(1.64);
  112. Wyswietlanie(tab9,16);
  113. Wyswietlanie_nizej(tab0,16);
  114. break;
  115.  
  116. case 5:
  117. Zapis(1); //czyszczenie wyswietlacza
  118. _delay_ms(1.64);
  119. Wyswietlanie(tab10,16);
  120. Wyswietlanie_nizej(tab0,16);
  121. break;
  122.  
  123. case 6:
  124. Zapis(1); //czyszczenie wyswietlacza
  125. _delay_ms(1.64);
  126. Wyswietlanie(tab11,16);
  127. Wyswietlanie_nizej(tab0,16);
  128. break;
  129.  
  130. case 7:
  131. Zapis(1); //czyszczenie wyswietlacza
  132. _delay_ms(1.64);
  133. Wyswietlanie(tab12,16);
  134. Wyswietlanie_nizej(tab0,16);
  135. break;
  136.  
  137. case 8:
  138. Zapis(1); //czyszczenie wyswietlacza
  139. _delay_ms(1.64);
  140. Wyswietlanie(tab13,16);
  141. Wyswietlanie_nizej(tab0,16);
  142. break;
  143.  
  144. case 9:
  145. Zapis(1); //czyszczenie wyswietlacza
  146. _delay_ms(1.64);
  147. Wyswietlanie(tab14,16);
  148. Wyswietlanie_nizej(tab0,16);
  149. break;
  150.  
  151. case 10:
  152. Zapis(1); //czyszczenie wyswietlacza
  153. _delay_ms(1.64);
  154. Wyswietlanie(tab15,16);
  155. Wyswietlanie_nizej(tab0,16);
  156. break;
  157.  
  158. case 11:
  159. Zapis(1); //czyszczenie wyswietlacza
  160. _delay_ms(1.64);
  161. Wyswietlanie(tab16,16);
  162. Wyswietlanie_nizej(tab0,16);
  163. break;
  164.  
  165. case 12:
  166. Zapis(1); //czyszczenie wyswietlacza
  167. _delay_ms(1.64);
  168. Wyswietlanie(tab17,16);
  169. Wyswietlanie_nizej(tab1,16);
  170. break;
  171.  
  172. case 13:
  173. Zapis(1); //czyszczenie wyswietlacza
  174. _delay_ms(1.64);
  175. Wyswietlanie(tab18,16);
  176. Wyswietlanie_nizej(tab2,16);
  177. break;
  178.  
  179. case 14:
  180. Zapis(1); //czyszczenie wyswietlacza
  181. _delay_ms(1.64);
  182. Wyswietlanie(tab19,16);
  183. Wyswietlanie_nizej(tab3,16);
  184. break;
  185.  
  186. case 15:
  187. Zapis(1); //czyszczenie wyswietlacza
  188. _delay_ms(1.64);
  189. Wyswietlanie(tab20,16);
  190. Wyswietlanie_nizej(tab4,16);
  191. break;
  192.  
  193. case 16:
  194. Zapis(1); //czyszczenie wyswietlacza
  195. _delay_ms(1.64);
  196. Wyswietlanie(tab0,16);
  197. Wyswietlanie_nizej(tab5,16);
  198. break;
  199.  
  200. case 17:
  201. Zapis(1); //czyszczenie wyswietlacza
  202. _delay_ms(1.64);
  203. Wyswietlanie(tab0,16);
  204. Wyswietlanie_nizej(tab6,16);
  205. break;
  206.  
  207. case 18:
  208. Zapis(1); //czyszczenie wyswietlacza
  209. _delay_ms(1.64);
  210. Wyswietlanie(tab0,16);
  211. Wyswietlanie_nizej(tab7,16);
  212. break;
  213.  
  214. case 19:
  215. Zapis(1); //czyszczenie wyswietlacza
  216. _delay_ms(1.64);
  217. Wyswietlanie(tab0,16);
  218. Wyswietlanie_nizej(tab8,16);
  219. break;
  220.  
  221. case 20:
  222. Zapis(1); //czyszczenie wyswietlacza
  223. _delay_ms(1.64);
  224. Wyswietlanie(tab0,16);
  225. Wyswietlanie_nizej(tab9,16);
  226. break;
  227.  
  228. case 21:
  229. Zapis(1); //czyszczenie wyswietlacza
  230. _delay_ms(1.64);
  231. Wyswietlanie(tab0,16);
  232. Wyswietlanie_nizej(tab10,16);
  233. break;
  234.  
  235. case 22:
  236. Zapis(1); //czyszczenie wyswietlacza
  237. _delay_ms(1.64);
  238. Wyswietlanie(tab0,16);
  239. Wyswietlanie_nizej(tab11,16);
  240. break;
  241.  
  242. case 23:
  243. Zapis(1); //czyszczenie wyswietlacza
  244. _delay_ms(1.64);
  245. Wyswietlanie(tab0,16);
  246. Wyswietlanie_nizej(tab12,16);
  247. break;
  248.  
  249. case 24:
  250. Zapis(1); //czyszczenie wyswietlacza
  251. _delay_ms(1.64);
  252. Wyswietlanie(tab0,16);
  253. Wyswietlanie_nizej(tab13,16);
  254. break;
  255.  
  256. case 25:
  257. Zapis(1); //czyszczenie wyswietlacza
  258. _delay_ms(1.64);
  259. Wyswietlanie(tab0,16);
  260. Wyswietlanie_nizej(tab14,16);
  261. break;
  262.  
  263. case 26:
  264. Zapis(1); //czyszczenie wyswietlacza
  265. _delay_ms(1.64);
  266. Wyswietlanie(tab0,16);
  267. Wyswietlanie_nizej(tab15,16);
  268. break;
  269.  
  270. case 27:
  271. Zapis(1); //czyszczenie wyswietlacza
  272. _delay_ms(1.64);
  273. Wyswietlanie(tab0,16);
  274. Wyswietlanie_nizej(tab16,16);
  275. break;
  276.  
  277. case 28:
  278. Zapis(1); //czyszczenie wyswietlacza
  279. _delay_ms(1.64);
  280. Wyswietlanie(tab1,16);
  281. Wyswietlanie_nizej(tab17,16);
  282. break;
  283.  
  284. case 29:
  285. Zapis(1); //czyszczenie wyswietlacza
  286. _delay_ms(1.64);
  287. Wyswietlanie(tab2,16);
  288. Wyswietlanie_nizej(tab18,16);
  289. break;
  290.  
  291. case 30:
  292. Zapis(1); //czyszczenie wyswietlacza
  293. _delay_ms(1.64);
  294. Wyswietlanie(tab3,16);
  295. Wyswietlanie_nizej(tab19,16);
  296. break;
  297.  
  298. case 31:
  299. Zapis(1); //czyszczenie wyswietlacza
  300. _delay_ms(1.64);
  301. Wyswietlanie(tab4,16);
  302. Wyswietlanie_nizej(tab20,16);
  303. break;
  304. }
  305.  
  306. //Przesuwanie(20);
  307. }
  308. return 0;
  309. }
  310.  
  311. void Inicjalizacja() //definicja funkcji inicjalizacji
  312. {
  313. DDRB=0xff; //wyjscie do lcd
  314. DDRA |= (1<<PA4)|(1<<PA6); //wyjscie do sterowania
  315.  
  316. PORTB = (PORTB & 0x0F); //PB7..0 <-0
  317. PORTA &= ~(1<<PA4); //slowa sterujace
  318. PORTA &= ~(1<<PA6); //E <- 0
  319. _delay_ms(40);
  320. PORTA |= (1<<PA6); //E<-1
  321. PORTB = 0b00110000; //1-sza sekwencja 0011****
  322. PORTA &= ~(1<<PA6); //E <-0
  323. _delay_ms(4.1);
  324. PORTA |= (1<<PA6); //E<- 1
  325. //2 sekwencja 0011****
  326. PORTA &= ~(1<<PA6); //E<-0
  327. _delay_ms(100);
  328. PORTA |= (1<<PA6); // E<-1
  329. //3 sekwencja 0011****
  330. PORTA &= ~(1<<PA6); // E<-0
  331. _delay_ms(100);
  332. Zapis(0b00101000); //wywolanie funkcji zapis do LCD
  333. //8 bitowe slowo, 2 wiersze, matryca 5x10
  334. Zapis(0b00001100); //wlaczanie wyswietlacza, kursor aktywny i miga
  335.  
  336. Zapis(1); //czyszczenie wyswietlacza
  337. _delay_ms(1.64);
  338. Zapis(0b00000110); //adres inkrementowany, przesuwanie kursora
  339. }
  340.  
  341. void Wyswietlanie(char * co, int8_t ile) //definicja funkcji wyświetlania
  342. {
  343. int wew_flag = 0;
  344. int8_t k = 0;
  345. PORTA |= (1<<PA4); //RS <-1 teraz znaki
  346.  
  347. while(k<ile)
  348. {
  349. if(flaga == 1 && wew_flag == 1){
  350. Zapis(licznik + 48);
  351. wew_flag = 0;
  352. }
  353. else
  354. Zapis(co[k]); //wyslanie znakow "Fajnie?" na wyswietlacz
  355. if(co[k] == 'o') wew_flag = 1;
  356. k++;
  357. }
  358.  
  359. PORTA &= ~(1<<PA4);
  360. }
  361.  
  362. void Wyswietlanie_nizej(char * co, int8_t ile) //definicja funkcji wyświetlania
  363. {
  364. int wew_flag = 0;
  365. int8_t k = 0;
  366.  
  367. //PORTA &= ~(1<<PA4);
  368. Zapis(0b11000000);
  369. PORTA |= (1<<PA4); //RS <-1 teraz znaki
  370.  
  371. while(k<ile)
  372. {
  373. if(flaga == 1 && wew_flag == 1){
  374. Zapis(licznik + 48);
  375. wew_flag = 0;
  376. }
  377. else
  378. Zapis(co[k]); //wyslanie znakow "Fajnie?" na wyswietlacz
  379. if(co[k] == 'o') wew_flag = 1;
  380. k++;
  381. }
  382. PORTA &= ~(1<<PA4);
  383. }
  384.  
  385. void Zapis(int8_t bajt) //definicja funkcji zapisu
  386. {
  387. PORTA |=(1<<PA6); //E<-1
  388. PORTB = (bajt & 0xF0)|(PORTB & 0x0F);
  389. PORTA &= ~(1<<PA6);
  390.  
  391. asm volatile("nop"); //male opoznienie
  392.  
  393. PORTA |=(1<<PA6); //E<-1
  394. PORTB = ((bajt & 0x0F)<<4)|(PORTB & 0x0F);
  395. PORTA &= ~(1<<PA6); //E<-0 zapis opadajacym zboczem
  396.  
  397. _delay_us(40);
  398. }
  399.  
  400.  
  401. ISR(TIMER0_COMP_vect){
  402.  
  403. //obsluga klawisza
  404.  
  405. switch(keystate_forward){
  406. case 0: if((PINC & 0x01) == 0) keystate_forward = 1;
  407. break;
  408.  
  409. case 1: if((PINC & 0x01) == 0) keystate_forward = 2;
  410. else keystate_forward = 0;
  411. break;
  412.  
  413. case 2: break;
  414.  
  415. case 3: if((PINC & 0x01) != 0) keystate_forward = 4;
  416. break;
  417.  
  418. case 4: if((PINC & 0x01) != 0) keystate_forward = 0;
  419. else keystate_forward = 3;
  420. break;
  421. }
  422.  
  423. switch(keystate_backward){
  424. case 0: if((PINC & 0x02) == 0) keystate_backward = 1;
  425. break;
  426.  
  427. case 1: if((PINC & 0x02) == 0) keystate_backward = 2;
  428. else keystate_backward = 0;
  429. break;
  430.  
  431. case 2: break;
  432.  
  433. case 3: if((PINC & 0x02) != 0) keystate_backward = 4;
  434. break;
  435.  
  436. case 4: if((PINC & 0x02) != 0) keystate_backward = 0;
  437. else keystate_backward = 3;
  438. break;
  439. }
  440.  
  441. switch(keystate_stop){
  442. case 0: if((PINC & 0x04) == 0) keystate_stop = 1;
  443. break;
  444.  
  445. case 1: if((PINC & 0x04) == 0) keystate_stop = 2;
  446. else keystate_stop = 0;
  447. break;
  448.  
  449. case 2: break;
  450.  
  451. case 3: if((PINC & 0x04) != 0) keystate_stop = 4;
  452. break;
  453.  
  454. case 4: if((PINC & 0x04) != 0) keystate_stop = 0;
  455. else keystate_stop = 3;
  456. break;
  457. }
  458.  
  459.  
  460. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement