Добавил:
Eatmore
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:отчеты по лабораторным работам / будильник / Alarm5 / SRC / tim
.c#include "aduc812.h"
#include "rtc.h"
#include "i2c.h"
#include "lcd.h"
#include "timers.h"
#include "sound.h"
TIME xdata alarm_time;
TIME xdata time;
bit IsFinish = 0;
int i = 0;
const unsigned int tone_tick[] = {
30578, // C
28862, // C sharp or D flat
27242, // D
25713, // D sharp or E flat
24270, // E
22907, // F
21622, // F sharp or G flat
20409, // G
19263, // G sharp or A flat
18182, // A
17161, // A sharp or H flat
16198 // H
};
void tm_ms_delay (unsigned long delay)
{
unsigned long d;
unsigned char i;
for(d=0; d<delay; d++)
for(i=0; i<50; i++);
}
void timer_handler1() interrupt 3
{
if (!IsFinish)
{
i++;
if (i == 800)
{
print_time1();
PrintAlarmTime1();
i = 0;
}
}
}
void setVector1(unsigned char xdata * Address, void * Vector)
{
unsigned char xdata * TmpVector;
*Address = 0x02;
TmpVector = (unsigned char xdata *)(Address+1);
*TmpVector = (unsigned char) ((unsigned short)Vector >> 8);
9U-;
*TmpVector = (unsigned char) Vector;
}
void init_timer2( unsigned char speed )
{
TH1 = speed;
TMOD |= 0x20; //Таймер 1 будет работать в режиме autoreload
TCON |= 0x40; //Запуск таймера 1
// PCON |= 0x00; //SMOD = 0
// SCON = 0x50; //Настройки последовательного канала: Режим 1(8 бит данных, асинхронный, переменная скорость)
// ES = 0; //Запрещение прерываний от приемопередатчика
setVector1(0x201B, (void *) timer_handler1);
ET1 = 1;
}
void print_time1( void )
{
static TIME xdata t;
if( get_time( &t ) )
{
GOTOXY(1,1); PRINTCHAR('?');
// type("print_time(): error!\r\n");
return;
}
GOTOXY(1,1); PRINTCHAR(t.hour / 10 + 0x30);
GOTOXY(2,1); PRINTCHAR(t.hour % 10 + 0x30);
GOTOXY(3,1); PRINTCHAR(':');
GOTOXY(4,1); PRINTCHAR(t.min / 10 + 0x30);
GOTOXY(5,1); PRINTCHAR(t.min % 10 + 0x30);
GOTOXY(6,1); PRINTCHAR(':');
GOTOXY(7,1); PRINTCHAR(t.sec / 10 + 0x30);
GOTOXY(8,1); PRINTCHAR(t.sec % 10 + 0x30);
if (t.hour == alarm_time.hour && t.min == alarm_time.min && t.sec == alarm_time.sec)
DoFinish();
}
void DoFinish()
{
unsigned char tone;
CLEAR();
GOTOXY(1,1);
PRINTCHAR('!');
IsFinish = 1;
snd_init();
//TM_INIT(1, TM_MODE_8_AUTO_RELOAD, 0);
tone = 1;
while(tone > 0)
{
snd_beep(tone_tick[tone-1]>>4, 7);
tm_ms_delay(1000);
tone--;
}
}
void PrintAlarmTime1()
{
GOTOXY(1,2); PRINTCHAR(alarm_time.hour / 10 + 0x30);
GOTOXY(2,2); PRINTCHAR(alarm_time.hour % 10 + 0x30);
GOTOXY(3,2); PRINTCHAR(':');
GOTOXY(4,2); PRINTCHAR(alarm_time.min / 10 + 0x30);
GOTOXY(5,2); PRINTCHAR(alarm_time.min % 10 + 0x30);
GOTOXY(6,2); PRINTCHAR(':');
GOTOXY(7,2); PRINTCHAR(alarm_time.sec / 10 + 0x30);
GOTOXY(8,2); PRINTCHAR(alarm_time.sec % 10 + 0x30);
}
Соседние файлы в папке SRC