Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.41 KB | None | 0 0
  1. #include <inttypes.h>
  2. #include <avr/io.h>
  3. #include <avr/interrupt.h>
  4. #include <avr/sleep.h>
  5. #include <stdio.h>
  6. #include <util/twi.h>
  7. #include <stdlib.h>
  8. #include <C:\Users\Илья\Desktop\МПСС ЛАБЫ\Курсачи\Катя\i2cmaster.h>
  9. #include <C:\Users\Илья\Desktop\МПСС ЛАБЫ\Курсачи\Катя\uart\uart.h>
  10. #define UART_BAUD_RATE 2400
  11. #include <C:\WinAVR-20100110\avr\include\util\delay.h>
  12.  
  13. unsigned char PortState[] = { 0xEF,0xDF,0xBF };
  14. unsigned char Table[] = {0xD7,0xBE,0xDE,0xEE,0xBD,0xDD,0xED,0xBB,0xDB,0xEB};
  15. unsigned char Digit;
  16. unsigned char i;
  17. unsigned char j;
  18. uint8_t* second =NULL;
  19. uint8_t* minute= NULL;
  20. uint8_t* hour=NULL;
  21. uint8_t* day=NULL;
  22. uint8_t* month=NULL;
  23. uint8_t* year=NULL;
  24. uint8_t s;
  25. uint8_t m;
  26. uint8_t h;
  27. uint8_t d;
  28. uint8_t mh;
  29. uint8_t y;
  30. uint8_t step;
  31. uint8_t clearscreen[] = {254,1};
  32. uint8_t left[] = {254,16};
  33. uint8_t down[] = {254,192};
  34. uint8_t cursorSecond[] = {254,128};
  35. uint8_t cursorMinute[] = {254,132};
  36. uint8_t cursorHour[] = {254,136};
  37. uint8_t cursorMouth[] = {254,196};
  38. unsigned char temp = 0;
  39. ISR (TIMER0_OVF_vect)
  40. {
  41. TCCR0 = 0;
  42. for (j = 0; j <= sizeof(PortState);j++)
  43. {
  44. PORTA = PortState[j];
  45. for (i = 0; i<=sizeof(Table); i++)
  46. {
  47. if (PINA == Table[i])
  48. {
  49. sei();
  50. Digit = i;
  51. temp++;
  52.  
  53. uart_putc(Digit+0x30);
  54. cli();
  55. while(PINA == Table[i]);
  56. }
  57. }
  58. }
  59. switch(temp) {
  60. case 0:
  61. break;
  62. case 1:
  63. if ( step!=0) break;
  64. second = Digit*10;
  65. step++;
  66. break;
  67. case 2:
  68. if ( step!=1) break;
  69. second += Digit;
  70. if (second > 59){
  71. temp = 0;
  72. step=0;
  73. uart_puts(clearscreen);
  74. uart_putc(254);
  75. uart_putc(128);
  76. break;
  77. }
  78. uart_putc(0x53);
  79. uart_putc(0x20);
  80. step++;
  81. break;
  82. case 3:
  83. if ( step!=2) break;
  84. minute = Digit*10;
  85. step++;
  86. break;
  87. case 4:
  88. if ( step!=3) break;
  89. minute += Digit;
  90.  
  91. if (minute > 59) {
  92. temp = 0;
  93. step =0 ;
  94. uart_puts(clearscreen);
  95. uart_putc(254);
  96. uart_putc(128);
  97. break;
  98. }
  99. uart_putc(0x4D);
  100. uart_putc(0x20);
  101.  
  102. step++;
  103. break;
  104. case 5:
  105. if ( step!=4) break;
  106. hour = Digit*10;
  107. step++;
  108. break;
  109. case 6:
  110. if ( step!=5) break;
  111. hour += Digit;
  112. if (hour > 23) {
  113. temp = 0;
  114. step=0;
  115. uart_puts(clearscreen);
  116. uart_putc(254);
  117. uart_putc(128);
  118. break;
  119. }
  120. uart_putc(0x48);
  121. uart_putc(254);
  122. uart_putc(192);
  123. step++;
  124. break;
  125. case 7:
  126. if ( step!=6) break;
  127. day = Digit*10;
  128. step++;
  129. break;
  130. case 8:
  131. if ( step!=7) break;
  132. day += Digit;
  133.  
  134. if (day < 1 || day > 31) {
  135. temp = 0;
  136. step=0;
  137. uart_puts(clearscreen);
  138. uart_putc(254);
  139. uart_putc(128);
  140. break;
  141. }
  142. uart_putc(0x44);
  143. uart_putc(0x20);
  144. step++;
  145. break;
  146. case 9:
  147. if ( step!=8) break;
  148. month = Digit*10;
  149. step++;
  150. break;
  151. case 10:
  152. if ( step!=9) break;
  153. month += Digit;
  154. if (month < 1 || month > 12) {
  155. temp = 0;
  156. step=0;
  157. uart_puts(clearscreen);
  158. uart_putc(254);
  159. uart_putc(128);
  160. break;
  161. }
  162. uart_putc(0x4D);
  163. uart_putc(0x20);
  164. step++;
  165. break;
  166. case 11:
  167. if ( step!=10) break;
  168. year = Digit*10;
  169. step++;
  170. break;
  171. case 12:
  172. if ( step!=11) break;
  173. year += Digit;
  174. step++;
  175. uart_putc(0x59);
  176. break;
  177. default:
  178. break;
  179. }
  180. TCCR0 |= (1<<CS00);
  181. }
  182.  
  183.  
  184. void RTC_Work_Select(void)
  185. {
  186. while (1) if (PINB == ((1<<PB0)|(1<<PB4)|(1<<PB7))) break;
  187. sei();
  188. uart_puts(clearscreen);
  189. uart_putc(254);
  190. uart_putc(128);
  191.  
  192. temp = 0;
  193. step = 0;
  194. TCCR0 |= (1<<CS00);
  195. while (1) if (temp==12) break;
  196. cli();
  197. TCNT0 = 0;
  198. TCCR0 = 0;
  199. ds1307_setdate(year,month,day,hour,minute,second);
  200. }
  201.  
  202. void Alarm(void) {
  203. while (1) if (PINB == ((1<<PB0)|(1<<PB4)|(1<<PB7))) break;
  204. sei();
  205. uart_puts(clearscreen);
  206. uart_putc(254);
  207. uart_putc(128);
  208. temp = 0;
  209. step = 0;
  210. TCCR0 |= (1<<CS00);
  211. while (1) if (temp==12) break;
  212. cli();
  213. TCNT0 = 0;
  214. TCCR0 = 0;
  215. uint8_t s1=second;
  216. uint8_t m1=minute;
  217. uint8_t h1=hour;
  218. uint8_t d1=day;
  219. uint8_t mh1=month;
  220. uint8_t y1=year;
  221. s=second;
  222. m=minute;
  223. h=hour;
  224. d=day;
  225. mh=month;
  226. y=year;
  227. while (1) {
  228. ds1307_getdate(&year,&month,&day,&hour,&minute,&second);
  229. rtc_update();
  230. _delay_ms(200);
  231. if ((m==minute) && (h == hour) && (s == second) && (d == day) && (mh ==month) && (y == year)){
  232. PORTB |= (1<<PB6);
  233. while (PINB != ((1<<PB0)|(1<<PB7)|(1<<PB6)));
  234. PORTB &= ~(1<<PB6);
  235. break;
  236. }
  237. if (PINB == ((1<<PB0)|(1<<PB7))) break;
  238. }
  239. }
  240. void TimerCounter(void){
  241. while (1) if (PINB == ((1<<PB0)|(1<<PB4)|(1<<PB7))) break;
  242.  
  243. }
  244.  
  245. void init(void)
  246. {
  247. ds1307_init();
  248. uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
  249. _delay_ms(1000);
  250. DDRB |= (1<<PB6);
  251. PORTB |= (1<<PB0)|(1<<PB4)|(1<<PB7);
  252. DDRA = 0xf0;
  253. PORTA = 0xff;
  254. TIMSK |= (1<<TOIE0);
  255. TCNT0 = 0;
  256. TCCR0 = 0;
  257. };
  258. void rtc_update(void) {
  259. sei();
  260. uart_puts(clearscreen);
  261. uart_putc(254);
  262. uart_putc(128);
  263. ds1307_getdate(&year,&month,&day,&hour,&minute,&second);
  264. uint8_t p[2];
  265. itoa (second, p, 10);
  266. uart_puts(p);
  267. uart_putc(0x53);
  268. uart_putc(0x20);
  269. itoa (minute, p, 10);
  270. uart_puts(p);
  271. uart_putc(0x4D);
  272. uart_putc(0x20);
  273. itoa (hour, p, 10);
  274. uart_puts(p);
  275. uart_putc(0x48);
  276. uart_putc(254);
  277. uart_putc(192);
  278. itoa (day, p, 10);
  279. uart_puts(p);
  280. uart_putc(0x44);
  281. uart_putc(0x20);
  282. itoa (month, p, 10);
  283. uart_puts(p);
  284. uart_putc(0x4D);
  285. uart_putc(0x20);
  286. itoa (year, p, 10);
  287. uart_puts(p);
  288. uart_putc(0x59);
  289. }
  290. void clav(void)
  291. {
  292. while(1) {
  293. rtc_update();
  294. _delay_ms(250);
  295. if (PINB == ((1<<PB4)|(1<<PB7)))
  296. RTC_Work_Select();
  297. if (PINB == ((1<<PB0)|(1<<PB7)))
  298. Alarm();
  299. if (PINB == ((1<<PB0)|(1<<PB4)))
  300. TimerCounter();
  301. }
  302. };
  303. int main()
  304. {
  305. cli();
  306. init();
  307. clav();
  308. while (1);
  309. return 0;
  310. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement