Mạch nguyên lý http://www.mediafire.com/?3x5vrc01oejbvfh
Code
#define LCD_TYPE 1
#include <lcd.c>
#byte port_A = 0x05
#byte tris_A = 0x85
#byte lcd_port = 0x06
#byte tris_B = 0x86
#byte tris_D = 0x88
#byte port_D = 0x08
#bit lcd_rs = 0x05.0
#bit lcd_rw = 0x05.1
#bit lcd_e = 0x05.2
#bit bel = 0x08.0 char time[6];
/*******************************************************
***
* chuong trinh con
********************************************************
**/
void read_ds1307()
{
int i;
for (i=0;i<3;i++)
{
i2c_start();
i2c_write(0xD0); // Device address
i2c_write(i); // Data to device
i2c_start(); // Restart
i2c_write(0xD1); // to change data direction
time[i+1]=i2c_read(0); // Now read from slave
i2c_stop();
}
}
//*******************************************************
***
void lcd_cmd (char cmd)
{
delay_ms(15);
lcd_rs =0;
lcd_rw=0;
lcd_port = cmd;
lcd_e = 1;
delay_ms(15);
lcd_e = 0;
}
void lcd_char (char ch)
{
delay_ms(15);
lcd_rs = 1; lcd_rw=0;
lcd_port=ch;
lcd_e=1;
delay_ms(10);
lcd_e=0;
}
void lcd_time()
{
char i;
for(i=3;i>0;i--)
{
lcd_char((time[i]>>4)+ 0x30); lcd_char((time[i]&0x0f)+0x30); if(i!=1)
{
lcd_char(":");
}
}
}
/*******************************************************
***
* chuong trinh chinh
********************************************************
**/
void main()
{
lcd_init();
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_ccp1(CCP_OFF);
setup_comparator(NC_NC_NC_NC);// This device COMP
currently not supported by the PICWizard int data,i;
set_tris_A(0x00);
set_tris_B(0x00);
set_tris_D(0x00);
port_A=0; lcd_port=0; port_D =0; delay_ms(150); lcd_cmd(0x38);
lcd_cmd(0x38); lcd_cmd(0x38); lcd_cmd(0x0c); lcd_char('C');
lcd_char('O'); lcd_char(' '); lcd_char('D'); lcd_char('I');
lcd_char('E'); lcd_char('N'); lcd_char(' '); lcd_char('T');
lcd_char('U');
while(true)
{ read_ds1307(); lcd_cmd(0xc0); lcd_time();
if(time[3]==0x07 && time[2]==0x00 && time[1]==00)
{
bel = 1;
for(i=0;i<100;i++)
{
read_ds1307(); lcd_cmd(0xc0); lcd_time();
}
bel = 0;
}
if(time[3]==0x08 && time[2]==0x45 && time[1]==00)
{
bel = 1;
for(i=0;i<100;i++)
{
read_ds1307(); lcd_cmd(0xc0); lcd_time();
}
bel = 0;
}
if(time[3]==0x09 && time[2]==0x00 && time[1]==00)
{
bel = 1;
for(i=0;i<100;i++)
{
read_ds1307();
lcd_cmd(0xc0);
lcd_time();
}
bel = 0;
}
if(time[3]==0x11 && time[2]==0x00 && time[1]==00)
{
bel = 1;
for(i=0;i<100;i++)
{
read_ds1307(); lcd_cmd(0xc0); lcd_time();
}
bel = 0;
}
if(time[3]==0x13 && time[2]==0x00 && time[1]==00)
{
bel = 1;
for(i=0;i<100;i++)
{
read_ds1307(); lcd_cmd(0xc0); lcd_time();
}
bel = 0;
}
if(time[3]==0x14 && time[2]==0x50 && time[1]==00)
{
bel = 1;
for(i=0;i<100;i++)
{
read_ds1307();
lcd_cmd(0xc0);
lcd_time();
}
bel = 0;
}
if(time[3]==0x15 && time[2]==0x10 && time[1]==00)
{
bel = 1;
for(i=0;i<100;i++)
{
read_ds1307(); lcd_cmd(0xc0); lcd_time();
}
bel = 0;
}
if(time[3]==0x17 && time[2]==0x00 && time[1]==00)
{
bel = 1;
for(i=0;i<100;i++)
{
read_ds1307(); lcd_cmd(0xc0); lcd_time();
}
bel = 0;
}
if(time[3]==0x18 && time[2]==0x00 && time[1]==00)
{
bel = 1;
for(i=0;i<100;i++)
{
read_ds1307();
lcd_cmd(0xc0);
lcd_time();
}
bel = 0;
}
if(time[3]==0x19 && time[2]==0x45 && time[1]==00)
{
bel = 1;
for(i=0;i<100;i++)
{
read_ds1307(); lcd_cmd(0xc0); lcd_time();
}
bel = 0;
}
if(time[3]==0x20 && time[2]==0x00 && time[1]==00)
{
bel = 1;
for(i=0;i<100;i++)
{
read_ds1307(); lcd_cmd(0xc0); lcd_time();
}
bel = 0;
}
if(time[3]==0x21 && time[2]==0x00 && time[1]==00)
{
bel = 1;
for(i=0;i<100;i++)
{
read_ds1307(); lcd_cmd(0xc0); lcd_time();
}
bel = 0;
}
}
}
/*******************************************************
***
********************* THE END
****************************
**********************************************************/
I ) Giới thiệu về thời gian thực DS13307
DS1307 là chip thời gian thực hay RTC (Read time clock). Đây là một IC tích hợp cho thời gian bởi vì tính chính xác về thời gian tuyệt đối cho thời gian : Thứ, ngày,tháng, năm, giờ, phút, giây. DS1307 là chế tạo bởi Dallas. Chip này có 7 thanh ghi 8 bit mỗi thanh ghi này chứa : Thứ , ngày, tháng, năm, giờ , phút, giây. Ngoài ra DS1307 còn chứa 1 thanh ghi điều khiển ngõ ra phụ và 56 thanh ghi trống các thanh ghi này có thể dùng như là RAM. DS1307 được đọc thông qua chuẩn truyền thông I2C nên do đó để đọc được và ghi từ DS1307 thông qua chuẩn truyền thông này. Do nó được giao tiếp chuẩn I2C nên cấu tạo bên ngoài nó rất đơn giản. Ví dụ 1 dạng đóng vỏ của DS1307 như sau :
Trên là hai dạng cấu tạo của DS1307. Chip này có 8 chân và chúng ta hay dùng là dạng Dip và các chân nó được mô tả như sau :
+ X1 và X2 là đầu vào dao động cho DS1307. Cần dao động thạch anh 32.768Khz.






