Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <inttypes.h>
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #include <avr/sleep.h>
- #include <stdio.h>
- #include <util/twi.h>
- #include <stdlib.h>
- #include <C:\Users\Илья\Desktop\МПСС ЛАБЫ\Курсачи\Катя\i2cmaster.h>
- #include <C:\Users\Илья\Desktop\МПСС ЛАБЫ\Курсачи\Катя\uart\uart.h>
- #define UART_BAUD_RATE 2400
- #include <C:\WinAVR-20100110\avr\include\util\delay.h>
- unsigned char PortState[] = { 0xEF,0xDF,0xBF };
- unsigned char Table[] = {0xD7,0xBE,0xDE,0xEE,0xBD,0xDD,0xED,0xBB,0xDB,0xEB};
- unsigned char Digit;
- unsigned char i;
- unsigned char j;
- uint8_t* second =NULL;
- uint8_t* minute= NULL;
- uint8_t* hour=NULL;
- uint8_t* day=NULL;
- uint8_t* month=NULL;
- uint8_t* year=NULL;
- uint8_t s;
- uint8_t m;
- uint8_t h;
- uint8_t d;
- uint8_t mh;
- uint8_t y;
- uint8_t step;
- uint8_t clearscreen[] = {254,1};
- uint8_t left[] = {254,16};
- uint8_t down[] = {254,192};
- uint8_t cursorSecond[] = {254,128};
- uint8_t cursorMinute[] = {254,132};
- uint8_t cursorHour[] = {254,136};
- uint8_t cursorMouth[] = {254,196};
- unsigned char temp = 0;
- ISR (TIMER0_OVF_vect)
- {
- TCCR0 = 0;
- for (j = 0; j <= sizeof(PortState);j++)
- {
- PORTA = PortState[j];
- for (i = 0; i<=sizeof(Table); i++)
- {
- if (PINA == Table[i])
- {
- sei();
- Digit = i;
- temp++;
- uart_putc(Digit+0x30);
- cli();
- while(PINA == Table[i]);
- }
- }
- }
- switch(temp) {
- case 0:
- break;
- case 1:
- if ( step!=0) break;
- second = Digit*10;
- step++;
- break;
- case 2:
- if ( step!=1) break;
- second += Digit;
- if (second > 59){
- temp = 0;
- step=0;
- uart_puts(clearscreen);
- uart_putc(254);
- uart_putc(128);
- break;
- }
- uart_putc(0x53);
- uart_putc(0x20);
- step++;
- break;
- case 3:
- if ( step!=2) break;
- minute = Digit*10;
- step++;
- break;
- case 4:
- if ( step!=3) break;
- minute += Digit;
- if (minute > 59) {
- temp = 0;
- step =0 ;
- uart_puts(clearscreen);
- uart_putc(254);
- uart_putc(128);
- break;
- }
- uart_putc(0x4D);
- uart_putc(0x20);
- step++;
- break;
- case 5:
- if ( step!=4) break;
- hour = Digit*10;
- step++;
- break;
- case 6:
- if ( step!=5) break;
- hour += Digit;
- if (hour > 23) {
- temp = 0;
- step=0;
- uart_puts(clearscreen);
- uart_putc(254);
- uart_putc(128);
- break;
- }
- uart_putc(0x48);
- uart_putc(254);
- uart_putc(192);
- step++;
- break;
- case 7:
- if ( step!=6) break;
- day = Digit*10;
- step++;
- break;
- case 8:
- if ( step!=7) break;
- day += Digit;
- if (day < 1 || day > 31) {
- temp = 0;
- step=0;
- uart_puts(clearscreen);
- uart_putc(254);
- uart_putc(128);
- break;
- }
- uart_putc(0x44);
- uart_putc(0x20);
- step++;
- break;
- case 9:
- if ( step!=8) break;
- month = Digit*10;
- step++;
- break;
- case 10:
- if ( step!=9) break;
- month += Digit;
- if (month < 1 || month > 12) {
- temp = 0;
- step=0;
- uart_puts(clearscreen);
- uart_putc(254);
- uart_putc(128);
- break;
- }
- uart_putc(0x4D);
- uart_putc(0x20);
- step++;
- break;
- case 11:
- if ( step!=10) break;
- year = Digit*10;
- step++;
- break;
- case 12:
- if ( step!=11) break;
- year += Digit;
- step++;
- uart_putc(0x59);
- break;
- default:
- break;
- }
- TCCR0 |= (1<<CS00);
- }
- void RTC_Work_Select(void)
- {
- while (1) if (PINB == ((1<<PB0)|(1<<PB4)|(1<<PB7))) break;
- sei();
- uart_puts(clearscreen);
- uart_putc(254);
- uart_putc(128);
- temp = 0;
- step = 0;
- TCCR0 |= (1<<CS00);
- while (1) if (temp==12) break;
- cli();
- TCNT0 = 0;
- TCCR0 = 0;
- ds1307_setdate(year,month,day,hour,minute,second);
- }
- void Alarm(void) {
- while (1) if (PINB == ((1<<PB0)|(1<<PB4)|(1<<PB7))) break;
- sei();
- uart_puts(clearscreen);
- uart_putc(254);
- uart_putc(128);
- temp = 0;
- step = 0;
- TCCR0 |= (1<<CS00);
- while (1) if (temp==12) break;
- cli();
- TCNT0 = 0;
- TCCR0 = 0;
- uint8_t s1=second;
- uint8_t m1=minute;
- uint8_t h1=hour;
- uint8_t d1=day;
- uint8_t mh1=month;
- uint8_t y1=year;
- s=second;
- m=minute;
- h=hour;
- d=day;
- mh=month;
- y=year;
- while (1) {
- ds1307_getdate(&year,&month,&day,&hour,&minute,&second);
- rtc_update();
- _delay_ms(200);
- if ((m==minute) && (h == hour) && (s == second) && (d == day) && (mh ==month) && (y == year)){
- PORTB |= (1<<PB6);
- while (PINB != ((1<<PB0)|(1<<PB7)|(1<<PB6)));
- PORTB &= ~(1<<PB6);
- break;
- }
- if (PINB == ((1<<PB0)|(1<<PB7))) break;
- }
- }
- void TimerCounter(void){
- while (1) if (PINB == ((1<<PB0)|(1<<PB4)|(1<<PB7))) break;
- }
- void init(void)
- {
- ds1307_init();
- uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
- _delay_ms(1000);
- DDRB |= (1<<PB6);
- PORTB |= (1<<PB0)|(1<<PB4)|(1<<PB7);
- DDRA = 0xf0;
- PORTA = 0xff;
- TIMSK |= (1<<TOIE0);
- TCNT0 = 0;
- TCCR0 = 0;
- };
- void rtc_update(void) {
- sei();
- uart_puts(clearscreen);
- uart_putc(254);
- uart_putc(128);
- ds1307_getdate(&year,&month,&day,&hour,&minute,&second);
- uint8_t p[2];
- itoa (second, p, 10);
- uart_puts(p);
- uart_putc(0x53);
- uart_putc(0x20);
- itoa (minute, p, 10);
- uart_puts(p);
- uart_putc(0x4D);
- uart_putc(0x20);
- itoa (hour, p, 10);
- uart_puts(p);
- uart_putc(0x48);
- uart_putc(254);
- uart_putc(192);
- itoa (day, p, 10);
- uart_puts(p);
- uart_putc(0x44);
- uart_putc(0x20);
- itoa (month, p, 10);
- uart_puts(p);
- uart_putc(0x4D);
- uart_putc(0x20);
- itoa (year, p, 10);
- uart_puts(p);
- uart_putc(0x59);
- }
- void clav(void)
- {
- while(1) {
- rtc_update();
- _delay_ms(250);
- if (PINB == ((1<<PB4)|(1<<PB7)))
- RTC_Work_Select();
- if (PINB == ((1<<PB0)|(1<<PB7)))
- Alarm();
- if (PINB == ((1<<PB0)|(1<<PB4)))
- TimerCounter();
- }
- };
- int main()
- {
- cli();
- init();
- clav();
- while (1);
- return 0;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement