kamilosxd678

Swim8 zad3

Apr 17th, 2013
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.90 KB | None | 0 0
  1. /*
  2. * zad2.c
  3. *
  4. * Created: 2013-04-17 11:49:22
  5. * Author: student
  6. */
  7.  
  8. #include <avr/io.h>
  9. #include <lcd.h>
  10. #include <one_wire.h>
  11. #include <util/crc16.h>
  12.  
  13. void init_lcd(void){
  14. _delay_ms(15);
  15. COMM_LCD = 0x30;
  16. _delay_ms(5);
  17. COMM_LCD = 0x30;
  18. _delay_ms(0.2);
  19. COMM_LCD = 0x30;
  20. _delay_ms(30);
  21. COMM_LCD = 0x38;
  22. test_bf();
  23. pisz_com(0x0C);
  24. lcd_clear();
  25. pisz_com(0x06);
  26. lcd_home();
  27. pisz_com(0x48);
  28. pisz_ws(0x00);
  29. pisz_ws(0x00);
  30. pisz_ws(0x11);
  31. pisz_ws(0x00);
  32. pisz_ws(0x00);
  33. pisz_ws(0x11);
  34. pisz_ws(0xFE);
  35. pisz_ws(0x00);
  36.  
  37. }
  38. void disp_txt_P(const char* _adres){
  39. volatile uint8_t al;
  40. for(int i=0;i<16;i++){
  41. al=pgm_read_byte(&_adres[i]);
  42. if(al == 0xFF) break;
  43. pisz_ws(al);
  44. }
  45. }
  46. void disp_txt_D(const char* _adres){
  47. volatile uint8_t al;
  48. for(int i=0;i<16;i++){
  49. al=_adres[i];
  50. if(al == 0x00) break;
  51. pisz_ws(al);
  52. }
  53. }
  54.  
  55.  
  56.  
  57. void iB_send_cmd(char cmd)
  58. {
  59. for (int i = 0; i < 8; i++)
  60. {
  61. iB_send_bit(cmd & 0x01);
  62. cmd >>=1;
  63. }
  64. }
  65.  
  66. void iB_zapal(char led)
  67. {
  68. iB_wy |=_BV(led);
  69. }
  70.  
  71. void iB_zgas(char led)
  72. {
  73. iB_wy &=~_BV(led);
  74. }
  75.  
  76. void iB_init()
  77. {
  78. // Diody: kier. WY
  79. iB_tx |=_BV(iB_RED) |_BV(iB_GREEN);
  80. // Linia 1-Wire: kier. WE (stan HIGH)
  81. iB_tx &=~_BV(iB_LINE);
  82. // Gasi diody
  83. iB_zgas(iB_RED);
  84. iB_zgas(iB_GREEN);
  85. // Linia 1-Wire: przygotowanie stanu LOW dla nadawania
  86. iB_wy &=~_BV(iB_LINE);
  87. }
  88.  
  89. char iB_33h(char* Tab)
  90. {
  91. volatile char al;
  92. iB_send_cmd(0x33);
  93. char crc = 0;
  94. for (int i = 7; i > -1; i--) // 8 bajtów, od LSB
  95. {
  96. al = 0;
  97. for (int k = 0; k < 8; k++) // 8 bitów, od najmłodszego
  98. {
  99. al >>= 1;
  100. al |= iB_recv() << 7; // Bit na pozycji 7
  101. }
  102. crc = _crc_ibutton_update(crc, al);
  103. Tab[i] = al;
  104. }
  105. return(crc);
  106. }
  107.  
  108. void pisz(int znak)
  109. {
  110. char tab[2] = {' ', '\0'};
  111. if(znak < 10)
  112. {
  113. tab[0] = '0'+znak;
  114. }
  115. else
  116. {
  117. tab[0] = 'A'+(znak-10);
  118. }
  119. disp_txt(tab);
  120. }
  121.  
  122. int main(void)
  123. {
  124. MCUCR = _BV(SRE) |_BV(SRW10);
  125. XMCRA = _BV(SRW00) |_BV(SRW01) |_BV(SRW11);
  126. ADMUX = _BV(MUX0);
  127.  
  128. init_lcd();
  129.  
  130. ADCSRA ^= _BV(ADEN);
  131.  
  132. iB_init();
  133.  
  134. //char tab[80];
  135.  
  136. //_iB_33h(tab);
  137.  
  138. char tab[10];
  139.  
  140. while(1)
  141. {
  142. lcd_clear();
  143. pisz_com(0x80);
  144. disp_txt("ACCESS DENIED");
  145. while(1)
  146. {
  147. iB_zapal(iB_RED);
  148. _delay_ms(500);
  149.  
  150. if(iB_reset() == 0x00)
  151. {
  152. iB_33h(tab);
  153. pisz_com(0xC0);
  154. int i;
  155. for(i = 1; i < 7; ++i)
  156. {
  157. pisz((int)((tab[i]&0xf0)>>4));
  158. pisz((int)(tab[i]&0x0f));
  159. }
  160. break;
  161. }
  162.  
  163. iB_zgas(iB_RED);
  164. _delay_ms(500);
  165.  
  166. if(iB_reset() == 0x00)
  167. {
  168. iB_33h(tab);
  169. pisz_com(0xC0);
  170. int i;
  171. for(i = 1; i < 7; ++i)
  172. {
  173. pisz((int)((tab[i]&0xf0)>>4));
  174. pisz((int)(tab[i]&0x0f));
  175. }
  176. break;
  177. }
  178. }
  179. iB_zgas(iB_RED);
  180. //lcd_clear();
  181. pisz_com(0x80);
  182. disp_txt("ACCESS GRANTED");
  183. iB_zapal(iB_GREEN);
  184. _delay_ms(3000);
  185. iB_zgas(iB_GREEN);
  186. }
  187. }
Advertisement
Add Comment
Please, Sign In to add comment