Скачиваний:
30
Добавлен:
09.05.2014
Размер:
2.94 Кб
Скачать
#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
  • #
    09.05.201461.38 Кб29test_led.lst
  • #
    09.05.201413.42 Кб29test_led.rel
  • #
    09.05.201461.38 Кб29test_led.rst
  • #
    09.05.201441.97 Кб29test_led.sym
  • #
    09.05.201421.07 Кб30tim.asm
  • #
    09.05.20142.94 Кб30tim.c
  • #
    09.05.201452.91 Кб29tim.lst
  • #
    09.05.201410.42 Кб29tim.rel
  • #
    09.05.201452.91 Кб29tim.rst
  • #
    09.05.201442.04 Кб29tim.sym
  • #
    09.05.20149.56 Кб29timers.asm