Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.49 KB | None | 0 0
  1. /*
  2. * main.c
  3. *
  4. * Created on: 16 paź 2019
  5. * Author: grzeg
  6. * #define LED_ON PORTD &= ~LED_PIN //włączenie
  7. #define LED_OFF PORTD |= LED_PIN //wyłączenie
  8. #define LED_TOG PORTD ^= LED_PIN //zmiana stanu
  9. */
  10.  
  11. //1.jedna dioda
  12. /*
  13. #include <avr/io.h>
  14. #include <util/delay.h>
  15.  
  16. #define LED_PIN ( 1 << PD0 )
  17. #define LED_TOG PORTD ^= LED_PIN //zmiana stanu
  18.  
  19. int main (void) {
  20. DDRD |= LED_PIN; //ustawienie portu jako wyjsciowy
  21.  
  22. while(1) {
  23. LED_TOG;
  24. _delay_ms(1000);
  25. }
  26. }
  27. */
  28.  
  29. //2.dwie diody
  30. /*
  31. #include <avr/io.h>
  32. #include <util/delay.h>
  33.  
  34. #define LED_PIN1 ( 1 << PD0 )
  35. #define LED_ON1 PORTD &= ~LED_PIN1 //włączenie
  36. #define LED_OFF1 PORTD |= LED_PIN1 //wyłączenie
  37. #define LED_TOG1 PORTD ^= LED_PIN1 //zmiana stanu
  38.  
  39. #define LED_PIN2 ( 1 << PD1 )
  40. #define LED_ON2 PORTD &= ~LED_PIN2 //włączenie
  41. #define LED_OFF2 PORTD |= LED_PIN2 //wyłączenie
  42. #define LED_TOG2 PORTD ^= LED_PIN2 //zmiana stanu
  43.  
  44. int main (void) {
  45. DDRD |= LED_PIN1;
  46. DDRD |= LED_PIN2;
  47.  
  48. while(1) {
  49. LED_OFF2;
  50. LED_ON1;
  51. _delay_ms(1000);
  52. LED_OFF1;
  53. LED_ON2;
  54. _delay_ms(1000);
  55. }
  56. }
  57. */
  58.  
  59. //3.Diody zapalają się od lewej do prawej
  60. /*
  61. #include <avr/io.h>
  62. #include <util/delay.h>
  63.  
  64. int main (void) {
  65. DDRD = 0xff; //do calego rejestru D ustawiamy 1
  66. PORTD = 0xff; //dla calego portu D ustawiamy 1 czyli gasimy diody bo diody podlaczone katoda
  67.  
  68. while(1) {
  69. for(uint8_t i=0; i<8; i++) {
  70. PORTD =~ ( 1 << i);
  71. _delay_ms(200);
  72. }
  73. }
  74. }
  75. */
  76.  
  77. //4.Diody zapalają się od lewej do prawej i potem od prawej do lewej
  78. /*
  79. #include <avr/io.h>
  80. #include <util/delay.h>
  81.  
  82. int main(void) {
  83. DDRD = 0xff;
  84. PORTD = 0xff;
  85.  
  86. while(1) {
  87. for(uint8_t i=0; i<8; i++) {
  88. PORTD =~ ( 1 << i);
  89. _delay_ms(200);
  90. }
  91. for(uint8_t i=6; i>0; i--) {
  92. PORTD =~ ( 1 << i);
  93. _delay_ms(200);
  94. }
  95. }
  96. }
  97. */
  98.  
  99. //5.Diody gasna od prawej do lewej i potem od lewej do prawej
  100. /*
  101. #include <avr/io.h>
  102. #include <util/delay.h>
  103.  
  104. int main(void) {
  105. DDRD = 0xff;
  106. PORTD = 0xff;
  107.  
  108. while(1) {
  109. for(uint8_t i=0; i<8; i++) {
  110. PORTD = ( 1 << i);
  111. _delay_ms(200);
  112. }
  113. for(uint8_t i=6; i>0; i--) {
  114. PORTD = ( 1 << i);
  115. _delay_ms(200);
  116. }
  117. }
  118. }
  119. */
  120.  
  121. //6.Dioda miga w momencie wcisniecia klawisza
  122. /*
  123. #include <avr/io.h>
  124. #include <util/delay.h>
  125.  
  126. #define LED_PIN (1<<PD0)
  127. #define LED_TOG PORTD ^= LED_PIN //zmiana stanu
  128. #define LED_OFF PORTD |= LED_PIN //wyłączenie
  129. #define KEY_PIN (1<<PB0)
  130. #define KEY_DOWN ! (PINB & KEY_PIN)
  131.  
  132. int main(void) {
  133. DDRD |= LED_PIN;
  134. PORTD |= LED_PIN;
  135. DDRB &= ~KEY_PIN;
  136. PORTB |= KEY_PIN;
  137.  
  138. while(1) {
  139. if(KEY_DOWN) {
  140. _delay_ms(80);
  141. if(KEY_DOWN) {
  142. LED_TOG;
  143. _delay_ms(500);
  144. }
  145. } else LED_OFF;
  146. }
  147. }
  148. */
  149.  
  150. //7.Dioda miga w momencie wcisniecia klawisza odpowiednie funkcje jezyka C
  151. /*
  152. #include <avr/io.h>
  153. #include <util/delay.h>
  154.  
  155. #define LED_PIN (1<<PD0)
  156. #define LED_TOG PORTD ^= LED_PIN //zmiana stanu
  157. #define LED_OFF PORTD |= LED_PIN //wyłączenie
  158. #define KEY_PIN (1<<PB0)
  159. #define KEY_DOWN ! (PINB & KEY_PIN)
  160.  
  161. uint8_t Button_On(void);
  162.  
  163. int main(void) {
  164. DDRD |= LED_PIN;
  165. PORTD |= LED_PIN;
  166. DDRB &= ~KEY_PIN;
  167. PORTB |= KEY_PIN;
  168.  
  169. while(1) {
  170. if(Button_On()) {
  171. LED_TOG;
  172. _delay_ms(500);
  173. } else LED_OFF;
  174. }
  175. }
  176.  
  177. uint8_t Button_On(void) {
  178. if(KEY_DOWN) {
  179. _delay_ms(80);
  180. if(KEY_DOWN) { return 1; }
  181. }
  182. return 0;
  183. }
  184. */
  185.  
  186. //8.Jeden klawisz wlacza miganie diody, drugi wylacza. Oba wcisniete jednoczesnie
  187. /*
  188. #include <avr/io.h>
  189. #include <util/delay.h>
  190.  
  191. #define LED_PIN (1<<PD0)
  192. #define LED_TOG PORTD ^= LED_PIN
  193. #define LED_OFF PORTD |= LED_PIN //wyłączenie
  194. #define KEY_PIN (1<<PC5)
  195. #define KEY_DOWN ! (PINC & KEY_PIN)
  196. #define KEY_PIN1 (1<<PC4)
  197. #define KEY_DOWN1 ! (PINC & KEY_PIN1)
  198.  
  199. uint8_t Button_On(void);
  200. uint8_t Button_Off(void);
  201. void mk_delay_ms( uint16_t ms ) {
  202. while(ms--) { _delay_ms(1); }
  203. }
  204.  
  205. int main(void) {
  206. DDRD |= LED_PIN;
  207. PORTD |= LED_PIN;
  208. DDRC &= ~KEY_PIN;
  209. PORTC |= KEY_PIN;
  210. DDRC &= ~KEY_PIN1;
  211. PORTC |= KEY_PIN1;
  212.  
  213. while(1) {
  214. if( Button_On() == 1 && Button_Off() == 0 ) {
  215. LED_TOG;
  216. mk_delay_ms(500);
  217. }
  218. if( Button_On() == 1 && Button_Off() == 1 ) { LED_OFF; }
  219. if( Button_On() == 0 && Button_Off() == 0 ) { LED_OFF; }
  220. }
  221. }
  222.  
  223. uint8_t Button_On(void) {
  224. if(KEY_DOWN) {
  225. mk_delay_ms(80);
  226. if(KEY_DOWN) return 1;
  227. }
  228. return 0;
  229. }
  230.  
  231. uint8_t Button_Off(void) {
  232. if(KEY_DOWN1) {
  233. mk_delay_ms(80);
  234. if(KEY_DOWN1) return 1;
  235. }
  236. return 0;
  237. }
  238. */
  239.  
  240. //9.Cztery klawisze wszystkie diody
  241. /*
  242. #include <avr/io.h>
  243. #include <avr/interrupt.h>
  244. #include <util/delay.h>
  245.  
  246. #define KEY_PIN (1<<PC5) //Def. pinu do ktorego podlaczony przycisk
  247. #define KEY_DOWN ! (PINC & KEY_PIN) //makro sprawdzajace czy jest stan 0
  248. #define KEY_PIN1 (1<<PC4) //Def. pinu do ktorego podlaczony przycisk
  249. #define KEY_DOWN1 ! (PINC & KEY_PIN1) //makro sprawdzajace czy jest stan 0
  250.  
  251. void mk_delay_ms( uint16_t ms ) {
  252. while(ms--) { _delay_ms(1); }
  253. }
  254.  
  255. volatile uint8_t licznik; //zmienna do do zliczania taktow
  256. uint8_t Lewo_Prawo(void), Flag_Lewo_Prawo = 0, StanBefore = 0, StanNow = 0;
  257. uint8_t Prawo_Lewo(void), Flag_Prawo_Lewo = 0, StanBefore1 = 0, StanNow1 = 0;
  258.  
  259.  
  260. int main(void) {
  261. DDRD = 0xff; //do calego rejestru D ustawiamy 1
  262. PORTD = 0xff; //dla calego portu D ustawiamy 1 czyli gasimy diody bo diody podlaczone katoda
  263. DDRC &= ~KEY_PIN; //kierunek pinu jako wejsciowy
  264. PORTC |= KEY_PIN; //podciagniecie pinu do VCC (wew. rezystor)
  265. DDRC &= ~KEY_PIN1; //kierunek pinu jako wejsciowy
  266. PORTC |= KEY_PIN1; //podciagniecie pinu do VCC (wew. rezystor)
  267. //timer///////////////////////////////////////////////////
  268. //TCCR0 |= (1<<CS02); //preskaler = 256 czyli 1 takt przy 8MHz 31250 timer zlicza impulsy z 8MHz/256= 31250 Hz czyli 0,032 ms
  269. TCCR0 |= (1<<CS02) | (1<<CS00); //1024 czyli 8Mhz/1024= 7812,5 Hz czyli 0,128 ms
  270. TIMSK |= (1<<TOIE0); //Zezwolenie na przerwanie Compare Match
  271. sei();
  272. //timer///////////////////////////////////////////////////
  273. while(1){
  274. StanNow = KEY_DOWN; //obsl. przycisk
  275. if(StanNow != StanBefore) { //wykr. zmiany stanu
  276. mk_delay_ms(80);
  277. if(StanNow != StanBefore) {
  278. if(StanNow == 0) { //zb opadaj. przycisk wcisniety
  279. Flag_Lewo_Prawo = !Flag_Lewo_Prawo;
  280. Flag_Prawo_Lewo = 0;
  281. }
  282. StanBefore = StanNow;
  283. }
  284. }
  285. if(Flag_Lewo_Prawo == 1) { Lewo_Prawo(); }
  286.  
  287. StanNow1 = KEY_DOWN1; //obsl. przycisk
  288. if(StanNow1 != StanBefore1) { //wykr. zmiany stanu
  289. mk_delay_ms(80);
  290. if(StanNow1 != StanBefore1) {
  291. if(StanNow1 == 0) { //zb opadaj. przycisk wcisniety
  292. Flag_Prawo_Lewo = !Flag_Prawo_Lewo;
  293. Flag_Lewo_Prawo = 0;
  294. }
  295. StanBefore1 = StanNow1;
  296. }
  297. }
  298. if(Flag_Prawo_Lewo == 1) { Prawo_Lewo(); }
  299. }
  300. }
  301.  
  302. ISR(TIMER0_OVF_vect) { licznik++; }
  303.  
  304. uint8_t Lewo_Prawo(void) {
  305. for(uint8_t i=0; i<8; i++) {
  306. PORTD =~ ( 1 << i);
  307. mk_delay_ms(200);
  308. }
  309. }
  310.  
  311. uint8_t Prawo_Lewo(void) {
  312. for(uint8_t j=8; j>1; j--) {
  313. PORTD =~ ( 1 << j);
  314. mk_delay_ms(200);
  315. }
  316. }
  317. */
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337. /*
  338. #include <avr/io.h>
  339. #include <avr/interrupt.h>
  340. #include <util/delay.h>
  341.  
  342. #define LED (1<<PD0) //Def. pinu do ktorego jest dioda
  343. #define TOG PORTD ^= LED //zmiana stanu diody 0 na 1, 1 na 0
  344. #define KEY_PIN (1<<PB0) //Def. pinu do ktorego podlaczony przycisk
  345. #define KEY_DOWN ! (PINB & KEY_PIN) //makro sprawdzajace czy jest stan 0
  346.  
  347. volatile uint8_t licznik; //zmienna do do zliczania taktow
  348. uint8_t Miganie = 0;
  349. uint8_t StanBefore = 0; //poprzedni stan przcisku
  350. uint8_t StanNow = 0; //aktualny stan przycisku
  351.  
  352. int main(void){
  353. DDRD |= LED; //LED jako wyjscie
  354. PORTD |= LED; //wygaszenie LED
  355. DDRB &= ~KEY_PIN; //kierunek pinu jako wejsciowy
  356. PORTB |= KEY_PIN; //podciagniecie pinu do VCC (wew. rezystor)
  357. //timer///////////////////////////////////////////////////
  358. //TCCR0 |= (1<<CS02); //preskaler = 256 czyli 1 takt przy 8MHz 31250 timer zlicza impulsy z 8MHz/256= 31250 Hz czyli 0,032 ms
  359. TCCR0 |= (1<<CS02) | (1<<CS00); //1024 czyli 8Mhz/1024= 7812,5 Hz czyli 0,128 ms
  360. TIMSK |= (1<<TOIE0); //Zezwolenie na przerwanie Compare Match
  361. sei();
  362. //timer///////////////////////////////////////////////////
  363. while(1){
  364. StanNow = KEY_DOWN; //obsl. przycisk
  365. if(StanNow != StanBefore) { //wykr. zmiany stanu
  366. _delay_ms(80);
  367. if(StanNow != StanBefore) {
  368. if(StanNow == 0) { //zb opadaj. przycisk wcisniety
  369. Miganie = !Miganie;
  370. }
  371. StanBefore = StanNow;
  372. }
  373. }
  374. if(Miganie == 1){
  375. if(licznik >= 30){
  376. TOG;
  377. licznik = 0;
  378. }
  379. } else PORTD |= LED;
  380. }
  381. }
  382.  
  383. ISR(TIMER0_OVF_vect) { licznik++; }
  384. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement