Advertisement
Guest User

Autopeli

a guest
Mar 3rd, 2015
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.24 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3. #include "lcd.h"
  4. #include <util/delay.h>
  5.  
  6. void add_second();
  7. int valikko(); /* tekee valikon */
  8. int pelaa(); /* pelaa peliä, palauttaa pelituloksen arvon */
  9. void tilastot(); /* näyttää tilastot */
  10. void lcd_gotoxy (unsigned char x, unsigned char y); /* asettaa kursorin haluttuun paikkaan näytöllä */
  11. char seconds = 0;
  12.  
  13. void init(void) {
  14.  
  15.  
  16. /* estetään kaikki keskeytykset */
  17. cli();
  18.  
  19. /* kaiutin pinnit ulostuloksi */
  20. DDRE |= (1 << PE4) | (1 << PE5);
  21. /* pinni PE4 nollataan */
  22. PORTE &= ~(1 << PE4);
  23. /* pinni PE5 asetetaan */
  24. PORTE |= (1 << PE5);
  25.  
  26. /* ajastin nollautuu, kun sen ja OCR1A rekisterin arvot ovat samat */
  27. TCCR1A &= ~( (1 << WGM11) | (1 << WGM10) );
  28. TCCR1B |= (1 << WGM12);
  29. TCCR1B &= ~(1 << WGM13);
  30. /* salli keskeytys, jos ajastimen ja OCR1A rekisterin arvot ovat samat */
  31. TIMSK |= (1 << OCIE1A);
  32.  
  33. /* asetetaan OCR1A rekisterin arvoksi 0x3e (~250hz) */
  34. OCR1AH = 0x00;
  35. OCR1AL = 0x14;
  36.  
  37. /* käynnistä ajastin ja käytä kellotaajuutena (16 000 000 / 1024) Hz */
  38. TCCR1B |= (1 << CS12) | (1 << CS10);
  39.  
  40. /* näppäin pinnit sisääntuloksi */
  41. DDRA &= ~(1 << PA0);
  42. DDRA &= ~(1 << PA2);
  43. DDRA &= ~(1 << PA4);
  44.  
  45. /* rele/led pinni ulostuloksi */
  46. DDRA |= (1 << PA6);
  47.  
  48. /* lcd-näytön alustaminen */
  49. lcd_init();
  50. lcd_write_ctrl(LCD_ON);
  51. lcd_write_ctrl(LCD_CLEAR);
  52.  
  53.  
  54. }
  55.  
  56. int main(void)
  57. {
  58. int i;
  59. init();
  60. sei();
  61. while(1){
  62. i = valikko();
  63. if (i == 1){
  64. pelaa();
  65. i = valikko();
  66. }
  67. if (i == 0){
  68. tilastot();
  69. i = valikko();
  70. }
  71.  
  72.  
  73. }
  74.  
  75. }
  76. int valikko(){
  77. init();
  78. int naytto = 0, valikon_arvo;
  79. while (1) {
  80.  
  81. if (naytto == 0) {
  82. lcd_write_data('P');
  83. lcd_write_data('e');
  84. lcd_write_data('l');
  85. lcd_write_data('i');
  86. lcd_write_data('i');
  87. lcd_write_data('n');
  88. lcd_write_data(':');
  89. lcd_write_data(' ');
  90. lcd_write_data('v');
  91. lcd_write_data('a');
  92. lcd_write_data('s');
  93. lcd_write_data('e');
  94. lcd_write_data('n');
  95. lcd_gotoxy (0, 1);
  96. lcd_write_data('T');
  97. lcd_write_data('i');
  98. lcd_write_data('l');
  99. lcd_write_data('a');
  100. lcd_write_data('s');
  101. lcd_write_data('t');
  102. lcd_write_data('o');
  103. lcd_write_data('t');
  104. lcd_write_data(':');
  105. lcd_write_data(' ');
  106. lcd_write_data('o');
  107. lcd_write_data('i');
  108. lcd_write_data('k');
  109. lcd_write_data('e');
  110. lcd_write_data('a');
  111. naytto = 1;
  112. }
  113. if (!(PINA & (1 << PA3))){
  114. valikon_arvo = 0;
  115. break;
  116. }
  117. if (!(PINA & (1 << PA1))){
  118. valikon_arvo = 1;
  119. break;
  120. }
  121. }
  122. return valikon_arvo;
  123. }
  124.  
  125. int pelaa(){
  126. int kentan_oikea_puoli [16];
  127. int kentan_vasen_puoli [16];
  128. while(1){
  129. add_second();
  130. _delay_ms(800);
  131. }
  132.  
  133. }
  134.  
  135. void tilastot() {
  136. lcd_write_ctrl(LCD_CLEAR);
  137. lcd_write_data('T');
  138. }
  139.  
  140. void lcd_gotoxy (unsigned char x, unsigned char y)
  141. {
  142.  
  143.  
  144. if ( y==0 )
  145. lcd_write_ctrl(LCD_DDRAM | (LCD_START_LINE1+x));
  146. else
  147. lcd_write_ctrl(LCD_DDRAM | (LCD_START_LINE2+x));
  148.  
  149. }
  150. void add_second(void){
  151. char tens_seconds = 0;
  152. /* clear display */
  153. lcd_write_ctrl(LCD_CLEAR);
  154. if (seconds < 1000000000) seconds++;
  155. else seconds = 0;
  156. char temp_seconds = seconds;
  157. /*hard coded to find first digit*/
  158. while (temp_seconds > 9){
  159. temp_seconds -= 10;
  160. tens_seconds++;
  161. }
  162. /*write numbers as chars to display*/
  163. lcd_write_data(tens_seconds + 48);
  164. lcd_write_data(temp_seconds + 48);
  165. }
  166. ISR(TIMER1_COMPA_vect) {
  167. /* vaihdetaan kaiutin pinnien tilat XOR operaatiolla */
  168. PORTE ^= (1 << PE4) | (1 << PE5);
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement