Beruflich Dokumente
Kultur Dokumente
Chip type
: ATmega16
Program type
: Application
Clock frequency
: 8.000000 MHz
Memory model
: Small
: 256
*****************************************************/
#include <mega16.h>
#include <delay.h>
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=1
.equ __scl_bit=0
#endasm
#include <i2c.h>
#ifndef cbi
#define cbi(port, bit)
#endif
#ifndef sbi
#define sbi(port, bit)
#endif
PORTD
5
#define LEVEL0
0x0F41 //-1
#define LEVEL1
0x0A2C
#define LEVEL2
0x0516
#define LEVEL3
0x0001 //+1
DDRC
#define LED_PORT
PORTC
#define LED_SET_PORT
0xF0
#define LED1_PIN
#define LED2_PIN
#define LED3_PIN
#define LED4_PIN
#define LED_PORT_7
PORTA
/*----external interrupt---*/
#define INT1
#define INT0
#define TOIE2
#define OCIE2
#define TOIE0
#define OCIE0
/*-------ADC Bits-------*/
#define REFS0
#define AVCC_MODE
(1<<REFS0)
#define ADC_VFF_TYPE
AVCC_MODE
#define ADEN
#define ADSC
#define ADIE
#define ADPS2
#define ADPS1
#define ADPS0
#define _24H_MODE
0x40
#define AM_PM
0x20
#define DO
#define C
0
1
typedef enum
{
TEM_LEVEL1=35, // nho hon 35 oC
typedef enum
{
OFF,
ON,
CURRENT_ON
}ON_OFF_ENUM;
typedef enum
{
Change_All,
Change_Second,
Change_Min,
Change_Hour,
Change_Date,
Change_Month,
Change_Year
} CHANGE_ENUM;
//TIME_STRUCT time_info;
CHANGE_ENUM change;
ON_OFF_ENUM alarm,on,off;
uint16_t temp_level_curent;
uint16_t on_level;
int8_t second;//giay
int8_t min;//phut
int8_t hour;//gio
//int8_t hour;//gio
// int8_t day;
int8_t date;//ngay
int8_t month;//thang
int8_t year;//nam
int8_t alarm_min;
int8_t on_min;//phut
int8_t off_min;//phut
int8_t alarm_hour;
int8_t on_hour;//phut
int8_t off_hour;//phut
uint8_t temp;//nhiet do
void Lcd_TurnOn(void);
void Delay_500ms(void);
{
// Place your code here
++val1;
if(alarm==CURRENT_ON)
{
if((++status_alarm)&1)
if(!(val1%19)) PORTD.5^=1;
if(second==45)
{
alarm=OFF;
PORTD.5=0;
}
}
if(val1==100)
{
val1=0;
if(status!=8) status=2;
PORTD.3^=1;
if(++lcd_switch>20) PORTD.6=0;
}
Led_Scan_Time();
TCNT0=0xD9;
}
{
// Place your code here
++val1;
if(alarm==CURRENT_ON)
{
if((++status_alarm)&1)
if(!(val1%19)) PORTD.5^=1;
}
if(val1==200)
{
val1=0;
PORTD.3^=1;
if(status!=8) status=2;
if(++lcd_switch>20) PORTD.6=0;
}
if((scan)&1)
Led_Scan_Temp();
else
Led_Scan_Date();
TCNT0=0xD9;
}
val3++;
if(!(val3%15))
{
if(val3==15)
{
Lcd_Display_Set1();
}
else {Lcd_Display_Set2(); }
if(val3==30) val3=0;
}
TCNT2=0x00;
}
} */
uint16_t level;
adc_data=ADCW;
temp=Compute_Temp(adc_data);
level=Fan_Adjust(temp);
if(level!=temp_level_curent)
{
temp_level_curent=level;
Timer1_Init(temp_level_curent);
}
}
void main(void)
{
/*----doan du lieu----*/
uint8_t val;
// Port A initialization
PORTA=0xFE;
DDRA=0xFE;
// Port B initialization
PORTB=0x00;
DDRB=0xFF;
// Port C initialization
PORTC=0xFF;
DDRC=0xFC;
// Port D initialization
PORTD=0xDF;
DDRD=0x78;
lcd_init(16);
Timer0_Init();
//cai dat timer1
temp_level_curent=LEVEL1;
Timer1_Init(temp_level_curent);
Timer2_Init();
//khoi tao I2C
i2c_init();
//khoi tao rtc
//rtc_init(0,1,0);//xung ra 1Hz
Int_Init();
Adc_Init();
val=rtc_read(0);
val&=0x7F;
rtc_write(0,val);
change=Change_All;
// LCD module initialization
#asm("sei")
while (1)
{
switch(status)
{
case 8: {Set_Timer(); status=0;} break;
case 2:{
Time_Update();status=0;
}
}
}
}
/*---timer0 init---*/
void Timer0_Init(void)
{
TCNT0=0xD9;
TCCR0=0x05;//prescaler=1024
OCR0=0xFF;
TIMSK|=(1<<TOIE0);
}
/*---timer1 init----*/
void Timer1_Init(unsigned int level)
{
TCCR1A=0x32;
TCCR1B=0x1D;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x0F;
ICR1L=0x42;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=(uint8_t)(level>>8);
OCR1BL=(uint8_t)level;
}
/*----Timer2 Init---*/
void Timer2_Init(void)
{
ASSR=0x00;
TCCR2=0x07;
TCNT2=0x00;
OCR2=0x00;
// TIMSK|=(1<<TOIE2);//|(1<<OCIE2);
}
{
//falling edge
GICR|=(1<<INT0);;//enable interrupt flag
MCUCR=0x0A; //xay ra ngat khi co canh xuong tren chan INT1,INT0
MCUCSR=0x00;
GIFR=0x00;//co ngat
}
void Adc_Init(void)
{
ADMUX=ADC_VFF_TYPE&0xff;
ADCSRA|=(1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
}
}
else
{
return LEVEL0;
}
}
}
void Led_Scan_Temp(void)
{
static char index1;
uint8_t chuc,don_vi;
//dua tat ca ve 0
sbi(LED_PORT,LED1_PIN);
sbi(LED_PORT,LED2_PIN);
sbi(LED_PORT,LED3_PIN);
sbi(LED_PORT,LED4_PIN);
switch(index1++)
{
case 0:{
chuc=temp/10;
LED_PORT_7=chr[chuc];
cbi(LED_PORT,LED1_PIN);
}break;
case 1:{
case 2:{
/*---hien thi phut-hang chuc----*/
LED_PORT_7=font_temp[0];
cbi(LED_PORT,LED3_PIN);
} break;
case 3:{
/*---hien thi phut hang don vi---*/
LED_PORT_7=font_temp[1];
cbi(LED_PORT,LED4_PIN);
index1=0;
}
}
}
void Led_Scan_Time(void)
{
static char index;
uint8_t chuc,don_vi;
//dua tat ca ve 0
sbi(LED_PORT,LED1_PIN);
sbi(LED_PORT,LED2_PIN);
sbi(LED_PORT,LED3_PIN);
sbi(LED_PORT,LED4_PIN);
switch(index++)
{
case 0:{
chuc=hour/10;
LED_PORT_7=chr[chuc];
cbi(LED_PORT,LED1_PIN);
}break;
case 1:{
cbi(LED_PORT,LED2_PIN);
}break;
case 2:{
/*---hien thi phut-hang chuc----*/
chuc=min/10;
LED_PORT_7=chr[chuc];
cbi(LED_PORT,LED3_PIN);
} break;
case 3:{
/*---hien thi phut hang don vi---*/
don_vi=min%10;
LED_PORT_7=chr[don_vi];
cbi(LED_PORT,LED4_PIN);
index=0;
}
}
}
void Led_Scan_Date(void)
{
static char index3;
uint8_t chuc,don_vi;
//dua tat ca ve 0
sbi(LED_PORT,LED1_PIN);
sbi(LED_PORT,LED2_PIN);
sbi(LED_PORT,LED3_PIN);
sbi(LED_PORT,LED4_PIN);
switch(index3++)
{
case 0:{
chuc=date/10;
LED_PORT_7=chr[chuc];
cbi(LED_PORT,LED1_PIN);
}break;
case 1:{
case 2:{
/*---hien thi phut-hang chuc----*/
chuc=month/10;
LED_PORT_7=chr[chuc];
cbi(LED_PORT,LED3_PIN);
} break;
case 3:{
/*---hien thi phut hang don vi---*/
don_vi=month%10;
LED_PORT_7=chr[don_vi];
cbi(LED_PORT,LED4_PIN);
index3=0;
}
}
}
time=hour;//r&0x1F;
delay_ms(1);
lcd_putchar(time/10+'0');
delay_ms(1);
lcd_putchar(time%10+'0');
delay_ms(1);
lcd_putchar(':');
delay_ms(1);
time=(min)&0x7F;
lcd_putchar(time/10+'0');
delay_ms(1);
lcd_putchar(time%10+'0');
delay_ms(1);
lcd_putchar(':');
delay_ms(1);
lcd_putchar(second/10+'0');
delay_ms(1);
lcd_putchar(second%10+'0'); delay_ms(1);
//hien thi ngay thang
lcd_gotoxy(3,1);
lcd_putchar(date/10+'0'); delay_ms(1);
lcd_putchar((date%10)+'0'); delay_ms(1);
lcd_putchar('/');
lcd_putchar(month/10+'0');delay_ms(1);
lcd_putchar(month%10+'0'); delay_ms(1);
lcd_putchar('/');delay_ms(1);
lcd_putchar(0x32);
lcd_putchar(0x30);
lcd_putchar(year/10+'0');delay_ms(1);
lcd_putchar(year%10+'0'); delay_ms(1);
} break;
case Change_Year:
{
lcd_gotoxy(12,1); delay_ms(1);
lcd_putchar(year/10+'0');delay_ms(1);
lcd_putchar(year%10+'0'); delay_ms(1);
}
case Change_Month:
{
lcd_gotoxy(7,1); delay_ms(1);
lcd_putchar(month/10+'0');delay_ms(1);
lcd_putchar(month%10+'0'); delay_ms(1);
}
case Change_Date:
{
lcd_gotoxy(3,1); delay_ms(1);
lcd_putchar(date/10+'0'); delay_ms(1);
lcd_putchar((date%10)+'0'); delay_ms(1);
}
case Change_Hour:
{
lcd_gotoxy(2,0);delay_ms(1);
lcd_putchar(hour/10+'0'); delay_ms(1);
lcd_putchar(hour%10+'0');delay_ms(1);
}
case Change_Min:
{
lcd_gotoxy(5,0); delay_ms(1);
lcd_putchar(min/10+'0');delay_ms(1);
lcd_putchar(min%10+'0');delay_ms(1);
}
case Change_Second:
{
lcd_gotoxy(8,0);delay_ms(1);
lcd_putchar(second/10+'0');delay_ms(1);
lcd_putchar(second%10+'0');
lcd_putchar(' ');
lcd_putchar(temp/10+'0');
lcd_putchar(temp%10+'0');
lcd_putsf("oC");
lcd_gotoxy(0,1);
if(alarm==ON) lcd_putchar('A');
lcd_gotoxy(14,1);
if(on==ON) lcd_putchar('O');
else lcd_putchar(' ');
if(off==ON) lcd_putchar('F');
else lcd_putchar(' ');
}
void Lcd_Display_Set1(void)
{
switch(val2)
{
case 1:
case 2:
case 3:
{
lcd_clear();
lcd_gotoxy(2,0);
lcd_puts(set_time);
lcd_gotoxy(4,1);//lcd_putchar('a');
lcd_putchar(hour/10+'0');
lcd_putchar(hour%10+'0');
lcd_putchar(':');
lcd_putchar(min/10+'0');
lcd_putchar(min%10+'0');
lcd_putchar(':');
lcd_putchar(second/10+'0');
lcd_putchar(second%10+'0');
}
break;
case 4:
case 5:
case 6:
{
lcd_clear();
lcd_gotoxy(2,0);
lcd_puts(set_time);
lcd_gotoxy(2,1);
lcd_putchar(date/10+'0');
lcd_putchar(date%10+'0');
lcd_putchar('/');
lcd_putchar(month/10+'0');
lcd_putchar(month%10+'0');
lcd_putchar('/');
lcd_putchar(0x32);
lcd_putchar(0x30);
lcd_putchar(year/10+'0');
lcd_putchar(year%10+'0');
}
break;
case 7:
{
lcd_clear();
//lcd_gotoxy(2,0);
lcd_puts(set_alarm);
lcd_gotoxy(6,1);
if(alarm==ON) lcd_putsf("ON");
else if(alarm==OFF) lcd_putsf("OFF");
} break;
case 8:
case 9:
{
lcd_clear();
//lcd_gotoxy(2,0);
lcd_puts(set_alarm);
lcd_gotoxy(6,1);
lcd_putchar(alarm_hour/10+'0');
lcd_putchar(alarm_hour%10+'0');
lcd_putchar(':');
lcd_putchar(alarm_min/10+'0');
lcd_putchar(alarm_min%10+'0');
}
break;
case 10:
{
lcd_clear();
lcd_gotoxy(2,0);
lcd_puts(set_on);
lcd_gotoxy(6,1);
if(on==ON) lcd_putsf("ON");
else if(on==OFF) lcd_putsf("OFF");
} break;
case 11:
case 12:
{
lcd_clear();
lcd_gotoxy(2,0);
lcd_puts(set_on);
lcd_gotoxy(6,1);
lcd_putchar(on_hour/10+'0');
lcd_putchar(on_hour%10+'0');
lcd_putchar(':');
lcd_putchar(on_min/10+'0');
lcd_putchar(on_min%10+'0');
}
break;
case 13:
{
lcd_clear();
lcd_gotoxy(2,0);
lcd_puts(set_on);
lcd_gotoxy(4,1);
lcd_putsf("LEVEL:");
lcd_putchar(on_level+'0');
}break;
case 14:
{
lcd_clear();
lcd_gotoxy(2,0);
lcd_puts(set_off);
lcd_gotoxy(6,1);
if(off==ON) lcd_putsf("ON");
else if(off==OFF) lcd_putsf("OFF");
} break;
case 15:
case 16:
{
lcd_clear();
lcd_gotoxy(2,0);
lcd_puts(set_off);
lcd_gotoxy(6,1);
lcd_putchar(off_hour/10+'0');
lcd_putchar(off_hour%10+'0');
lcd_putchar(':');
lcd_putchar(off_min/10+'0');
lcd_putchar(off_min%10+'0');
}
}
void Lcd_Display_Set2(void)
{
switch(val2)
{
case 1:
{
lcd_gotoxy(4,1);
lcd_puts(space);
}
break;
case 2:
{
lcd_gotoxy(7,1);
lcd_puts(space);
}
break;
case 3:
{
lcd_gotoxy(10,1);
lcd_puts(space);
}
break;
case 4:
{
lcd_gotoxy(2,1);
lcd_puts(space);
}
break;
case 5:
{
lcd_gotoxy(5,1);
lcd_puts(space);//tao khoang trang
}
break;
case 6:
{
lcd_gotoxy(10,1);
lcd_puts(space);
}
break;
case 7:
{
lcd_gotoxy(6,1);
lcd_puts(space);
lcd_puts(space);
}
break;
case 8:
{
lcd_gotoxy(6,1);
lcd_puts(space);
}
break;
case 9:
{
lcd_gotoxy(9,1);
lcd_puts(space);
}
break;
case 10:
{
lcd_gotoxy(6,1);
lcd_puts(space);
lcd_puts(space);
}
break;
case 11:
{
lcd_gotoxy(6,1);
lcd_puts(space);
}
break;
case 12:
{
lcd_gotoxy(9,1);
lcd_puts(space);
}
break;
case 13:
{
lcd_gotoxy(10,1);
lcd_putchar(' ');
}break;
case 14:
{
lcd_gotoxy(6,1);
lcd_puts(space);
lcd_puts(space);
}
break;
case 15:
{
lcd_gotoxy(6,1);
lcd_puts(space);
}
break;
case 16:
{
lcd_gotoxy(9,1);
lcd_puts(space);
}
}
}
void Set_Timer()
{
uint8_t i;
GICR&=(~(1<<INT0));//disable interrupt
TIMSK|=(1<<TOIE2);//cho phep Timer 2 ngat tran
val2=1;
i=1;
while(1)
{
while(PIND.2==0);
Lcd_TurnOn();
Delay_500ms();
switch(i)
{
case 1:
{
while((PIND.2!=0)&&PIND.7!=0)
if(PIND.0==0)
{
Lcd_TurnOn();
if(++hour==24) hour=0;
Delay_500ms();
while(PIND.0==0)
{
//
Delay_500ms();
//
if(PIND.0==0)
//
{if(++hour==24) hour=0;}
}
rtc_set_time(hour,min,second);
}
if(PIND.1==0)
{
if(hour==0) hour=23;
hour--;
Lcd_TurnOn();
Delay_500ms();
while(PIND.1==0)
{
//
if(PIND.1==0)
//
//
if(hour==0) hour=23;
//
hour--;
//
}
}
rtc_set_time(hour,min,second);
}
}
}
break;
case 2:
{
val2=2;
while((PIND.2!=0)&&PIND.7!=0)
{
if(PIND.0==0)
{
if(++min==60) min=0;
Lcd_TurnOn();
Delay_500ms();
while(PIND.0==0);
rtc_set_time(hour,min,second);
}
if(PIND.1==0)
{
if(min==0) min=60;
min--;
Lcd_TurnOn();
Delay_500ms();
while(PIND.1==0);
rtc_set_time(hour,min,second);
}
}
}
break;
case 3:
{
val2=3;
while((PIND.2!=0)&&PIND.7!=0)
{
if(PIND.0==0)
{
if(++second==60) second=0;
Lcd_TurnOn();
Delay_500ms();
while(PIND.0==0);
rtc_set_time(hour,min,second);
}
if(PIND.1==0)
{
if(second==0) second =60;
second--;
Lcd_TurnOn();
Delay_500ms();
while(PIND.1==0);
rtc_set_time(hour,min,second);
}
}
}
break;
case 6:
{
val2=6;
while((PIND.2!=0)&&PIND.7!=0)
{
if(PIND.0==0)
{
if(year==99) continue;
year++;
Lcd_TurnOn();
Delay_500ms();
while(PIND.0==0);
rtc_set_date(date,month,year);
}
if(PIND.1==0)
{
if(year==0) continue;
year--;
Lcd_TurnOn();
Delay_500ms();
while(PIND.1==0);
rtc_set_date(date,month,year);
}
}
}
break;
case 5:
{
val2=5;
while((PIND.2!=0)&&PIND.7!=0)
{
if(PIND.0==0)
{
if(month++==13) month=1;
Lcd_TurnOn();
Delay_500ms();
while(PIND.0==0);
rtc_set_date(date,month,year);
}
if(PIND.1==0)
{
month--;
if(month==0) month=12;
Lcd_TurnOn();
Delay_500ms();
while(PIND.1==0);
rtc_set_date(date,month,year);
}
}
}
break;
case 4: {
val2=4;
while((PIND.2!=0)&&PIND.7!=0)
{
if(PIND.0==0)
{
date++;
if(month==2)
if(year%4)
{if(date==29) date=1; }
else if(date==30) date=1;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
{
if(date==32) date=1;
}
else if(month==4||month==6||month==9||month==11)
{
if(date==31) date=1;
}
Lcd_TurnOn();
Delay_500ms();
while(PIND.0==0);
rtc_set_date(date,month,year);
}
if(PIND.1==0)
{
if(month==2)
if(year%4)
{if(date==1) date=29; }
else if(date==1) date=30;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
{
if(date==1) date=32;
}
else if(month==4||month==6||month==9||month==11)
{
if(date==1) date=31;
}
date--;
Lcd_TurnOn();
Delay_500ms();
while(PIND.1==0);
rtc_set_date(date,month,year);
}
}
}
break;
case 7: {
val2=7;
while((PIND.2!=0)&&PIND.7!=0)
{
if(PIND.0==0)
{
if(alarm==ON) alarm=OFF;
else alarm=ON;
Lcd_TurnOn();
Delay_500ms();
while(PIND.0==0);
}
if(PIND.1==0)
{
if(alarm==ON) alarm=OFF;
else alarm=ON;
Lcd_TurnOn();
Delay_500ms();
while(PIND.1==0);
}
}
if(alarm==OFF) i=9;
}
break;
case 8: {
val2=8;
while((PIND.2!=0)&&PIND.7!=0)
{
if(PIND.0==0)
{
alarm_hour++;
if(alarm_hour==24) hour=0;
Lcd_TurnOn();
Delay_500ms();
while(PIND.0==0);
}
if(PIND.1==0)
{
if(alarm_hour==0) alarm_hour=24;
alarm_hour--;
Lcd_TurnOn();
Delay_500ms();
while(PIND.1==0);
}
}
}
break;
case 9: {
val2=9;
while((PIND.2!=0)&&PIND.7!=0)
{
if(PIND.0==0)
{
alarm_min++;
if(alarm_min==60) alarm_min=0;
Lcd_TurnOn();
Delay_500ms();
while(PIND.0==0);
}
if(PIND.1==0)
{
if(alarm_min==0) alarm_min=60;
alarm_min--;
Lcd_TurnOn();
Delay_500ms();
while(PIND.1==0);
}
}
}
break;
case 10:
{
val2=10;
while((PIND.2!=0)&&PIND.7!=0)
{
if(PIND.0==0)
{
if(on==ON) on=OFF;
else on=ON;
Lcd_TurnOn();
Delay_500ms();
while(PIND.0==0);
}
if(PIND.1==0)
{
if(on==ON) on=OFF;
else on=ON;
Lcd_TurnOn();
Delay_500ms();
while(PIND.1==0);
}
}
if(on==OFF) i=13;
}
break;
case 11:
{
val2=11;
while((PIND.2!=0)&&PIND.7!=0)
{
if(PIND.0==0)
{
on_hour++;
if(on_hour==24) on_hour=0;
Lcd_TurnOn();
Delay_500ms();
while(PIND.0==0);
}
if(PIND.1==0)
{
if(on_hour==0) on_hour=24;
on_hour--;
Lcd_TurnOn();
Delay_500ms();
while(PIND.1==0);
}
}
}
break;
case 12:
{
val2=12;
while((PIND.2!=0)&&PIND.7!=0)
{
if(PIND.0==0)
{
on_min++;
if(on_min==60) on_min=0;
Lcd_TurnOn();
Delay_500ms();
while(PIND.0==0);
}
if(PIND.1==0)
{
if(on_min==0) on_min=60;
on_min--;
Lcd_TurnOn();
Delay_500ms();
while(PIND.1==0);
}
}
}
break;
case 13:
{
on_level=1;
val2=13;
while((PIND.2!=0)&&PIND.7!=0)
{
if(PIND.0==0)
{
if(++on_level==4) on_level=1;
Lcd_TurnOn();
Delay_500ms();
while(PIND.0==0);
}
if(PIND.1==0)
{
if(on_level==1) on_level=4;
on_level--;
Lcd_TurnOn();
Delay_500ms();
while(PIND.1==0);
}
}
switch(on_level)
{
case 1: on_level=LEVEL1; break;
case 2: on_level=LEVEL2; break;
case 3: on_level=LEVEL3; break;
}
}
break;
case 14: {
val2=14;
while((PIND.2!=0)&&PIND.7!=0)
if(PIND.0==0)
{
if(off==ON) off=OFF;
else off=ON;
Lcd_TurnOn();
Delay_500ms();
while(PIND.0==0);
}
if(PIND.1==0)
{
if(off==ON) off=OFF;
else off=ON;
Lcd_TurnOn();
Delay_500ms();
while(PIND.1==0);
}
}
if(off==OFF) i=16;
}
break;
case 15: {
val2=15;
while((PIND.2!=0)&&PIND.7!=0)
if(PIND.0==0)
{
off_hour++;
if(off_hour==24) off_hour=0;
Lcd_TurnOn();
Delay_500ms();
while(PIND.0==0);
}
if(PIND.1==0)
{
if(off_hour==0) off_hour=24;
off_hour--;
Lcd_TurnOn();
Delay_500ms();
while(PIND.1==0);
}
}
}
break;
case 16:
{
val2=16;
while((PIND.2!=0)&&PIND.7!=0)
if(PIND.0==0)
{
off_min++;
if(off_min==60) off_min=0;
Lcd_TurnOn();
Delay_500ms();
while(PIND.0==0);
}
if(PIND.1==0)
{
if(off_min==0) off_min=60;
off_min--;
Lcd_TurnOn();
Delay_500ms();
while(PIND.1==0);
}
}
}
break;
}
if(++i==17) break;
if(PIND.7==0) break;
}
void Time_Update(void)
{
if(status!=8)
{
rtc_get_date(&date,&month,&year);
rtc_get_time(&hour,&min,&second);
}
Lcd_Display(change);
if(second==59)
{
change=Change_Min;
if(min==59)
{
change=Change_Hour;
if(hour==23)
{
change=Change_Date;
if(date==28||date==29||date==30||date==32)
{
change=Change_Month;
if(month==12) change=Change_Year;
}
}
}
}
else change=Change_Second;
if(second==30||second==0)
{
TIMSK&=(~(1<<TOIE0));
TIMSK|=1<<OCIE0;
++scan ;
}
if(second==35||second==5)
{
TIMSK|=1<<TOIE0;
TIMSK&=(~(1<<OCIE0));
}
//kiem tra alarm
if(alarm==ON)
{
if(alarm_hour==hour)
if(alarm_min==min)
{
PORTD.5=1;
alarm=CURRENT_ON;
}
}
//kiem tra ON
if(on==ON)
{
if(on_hour==hour)
if(on_min==min)
{
Timer1_Init(on_level);
on=CURRENT_ON;
}
}
//kiem tra off
if(off==ON)
{
if(off_hour==hour)
if(off_min==min)
{
Timer1_Init(LEVEL0);
off=OFF;
}
}
void Lcd_TurnOn(void)
{
lcd_switch=0;
PORTD.6=1;
}
void Delay_500ms(void)
{
unsigned int i=65535;
char j;
for(j=0;j<4;j++)
while(i--)
{
}
}