DS3231.c

mail@pastecode.io avatar
unknown
c_cpp
14 days ago
3.7 kB
1
Indexable
Never
#include "DS3231.h"

_time Time, alarm;
_date Date;


	uint8_t ds3231_dec2byte(uint8_t dec){
		uint8_t byte = ((dec/10) << 4)|(dec%10);
		return byte;
	}

	uint8_t ds3231_byte2dec(uint8_t byte){
		uint8_t dec = (((byte >> 4) * 10) + (byte & 0x0f));
		return dec;
	}

	void DS3231_get_data(uint8_t dev_addr, uint8_t reg_addr){
		
		twi_start();
		twi_sendbyte(dev_addr<<1|0);
		twi_sendbyte(reg_addr);//����� ��������, �� �������� ����� ������
		twi_start();
		twi_sendbyte(dev_addr<<1|1);//���������� DS3231_ADDR|1 (����� ������� � ���� ������ ��  ��������)
		Time.sec=ds3231_byte2dec(twi_readbyte());
		Time.min=ds3231_byte2dec(twi_readbyte());
		Time.hour=ds3231_byte2dec(twi_readbyte());
		Date.day=ds3231_byte2dec(twi_readbyte());
		Date.date=ds3231_byte2dec(twi_readbyte());
		Date.month=ds3231_byte2dec(twi_readbyte());
		Date.year=ds3231_byte2dec(twi_read_last_byte());
		twi_stop();
	}


	void DS3231_write_time(uint8_t sec, uint8_t min, uint8_t hour){
		twi_start();
		twi_sendbyte(DS3231_ADDR<<1|0);
		twi_sendbyte(DS3231_SEC);//����� ��������, � �������� ������ ������  ������ � ��������
		twi_sendbyte(ds3231_dec2byte(Time.sec));
		twi_sendbyte(ds3231_dec2byte(Time.min));
		twi_sendbyte(ds3231_dec2byte(Time.hour));

		
	}

	void DS3231_write_sec( uint8_t sec){
		twi_start();
		twi_start();
		twi_sendbyte(DS3231_ADDR<<1|0);
		twi_sendbyte(DS3231_SEC);//����� ��������, � �������� ������ ������  ������ � ��������
		twi_sendbyte(ds3231_dec2byte(Time.sec));

	}

	void DS3231_write_min( uint8_t min){
		twi_start();
		//twi_start();
		twi_sendbyte(DS3231_ADDR<<1|0);
		twi_sendbyte(DS3231_MIN);//����� ��������, � �������� ������ ������  ������ � ��������
		twi_sendbyte(ds3231_dec2byte(Time.min));


	}

	void DS3231_write_hour( uint8_t hour){
		twi_start();
		twi_sendbyte(DS3231_ADDR<<1|0);
		twi_sendbyte(DS3231_HOUR);//����� ��������, � �������� ������ ������  ������ � ��������
		twi_sendbyte(ds3231_dec2byte(Time.hour));
	}


	void DS3231_write_date( uint8_t day, uint8_t date, uint8_t month, uint8_t year){
		twi_start();
		twi_sendbyte(DS3231_ADDR<<1|0);
		twi_sendbyte(DS3231_DAY);//����� ��������, � �������� ������ ������  ������ � ��������
		twi_sendbyte(ds3231_dec2byte(Date.day));
		twi_sendbyte(ds3231_dec2byte(Date.date));
		twi_sendbyte(ds3231_dec2byte(Date.month));
		twi_sendbyte(ds3231_dec2byte(Date.year));
	}

	void DS3231_write_date_number( uint8_t date){
		twi_start();
		twi_sendbyte(DS3231_ADDR<<1|0);
		twi_sendbyte(DS3231_DATE);//����� ��������, � �������� ������ ������  ������ � ��������
		twi_sendbyte(ds3231_dec2byte(Date.date));
	}

	void DS3231_write_month( uint8_t month){
		twi_start();
		twi_sendbyte(DS3231_ADDR<<1|0);
		twi_sendbyte(DS3231_MONTH);//����� ��������, � �������� ������ ������  ������ � ��������
		twi_sendbyte(ds3231_dec2byte(Date.month));
	}