Như tít, mình đang làm mạch đồng hồ, vì mới tìm hiểu nên mới chỉ muốn hiện giờ phút giây.
Nhưng hiện tại thì cái mạch của mình vẫn ko chạy vì mình vẫn chưa lấy đc dữ liệu của con ds
Ảnh mạch của nó đây
Code của nó đây
Tất cả file đây, mọi người down về kiểm tra hộ nhé I2C & DS1307.rar
Nhưng hiện tại thì cái mạch của mình vẫn ko chạy vì mình vẫn chưa lấy đc dữ liệu của con ds
Ảnh mạch của nó đây
Code của nó đây
Code:
#include <REGX52.H> //// Mang hien so tu 0 - 9 unsigned char so[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; unsigned char gio,phut,giay,thu,ngay,thang,nam; // Cac chan quet led sbit led1=P2^0; sbit led2=P2^1; sbit led3=P2^2; sbit led4=P2^3; sbit led5=P2^4; sbit led6=P2^5; // Dinh nghia chan SDA va SCL sbit sda=P1^0; sbit scl=P1^1; // Ham tre void delay(unsigned int ms) { unsigned int i; for(i=0;i<ms;i++) {;} } // Khoi dong I2C void start_i2c() { scl=1; sda=1; sda=0; delay(1); scl=0; delay(2); // Tre di 1 ti cho no chac } // Stop I2C void stop_i2c() { sda=1; scl=0; delay(1); scl=1; } // Truyen 8 bit du lieu tu chu xuong to //// bit write_i2c(unsigned char data_write) { bit outbit; unsigned int i; for(i=1;i<=8;i++) { outbit=(data_write&0x80); sda=outbit; data_write=data_write<<=1; scl=1; delay(1); scl=0; delay(1); } sda=1; // tao clock de nhan bit ack tu to scl=1; delay(5); outbit=sda; scl=0; delay(5); return(outbit); } // Truyen du lieu 8 bit tu to len chu ////// unsigned char read_i2c(bit ack_bit) { unsigned char data_read=0; unsigned int i; bit inbit; sda=1; for(i=1;i<=8;i++) { scl=1; delay(1); inbit=sda; data_read=data_read<<=1; data_read= data_read|inbit; scl=0; delay(1); } if(ack_bit==1) sda=0; // gui ack else sda=1; // gui no ack delay(1); // clock gui no ack scl=1; delay(1); scl=0; delay(1); return(data_read); } // Doc du lieu tu ds1307 unsigned char read_rtc(unsigned char add) { unsigned char ret; start_i2c(); write_i2c(0xD0); write_i2c(add); start_i2c(); write_i2c(0XD1); ret = read_i2c(0); stop_i2c(); ret = (((ret/16)*10)+ (ret & 0x0f)); // for Led 7seg return(ret); } // Doc ds1307 void read_ds1307() { giay=read_rtc(0x00);//read_rtc(0x00); phut=read_rtc(0x01);//read_rtc(0x01); gio=read_rtc(0x02);//read_rtc(0x02); thu=read_rtc(0x03); ngay=read_rtc(0x04); thang=read_rtc(0x05); nam=read_rtc(0x06); } // Ham hien thi void hienthi(void) { led1=1; P0=so[gio/10]; delay(10); led1=0; led2=1; P0=so[gio%10]; delay(10); led2=0; led3=1; P0=so[phut/10]; delay(10); led3=0; led4=1; P0=so[phut%10]; delay(10); led4=0; led5=1; P0=so[giay/10]; delay(10); led5=0; led6=1; P0=so[giay%10]; delay(10); led6=0; } /// Ham chinh /////// void main() { while(1) { read_ds1307(); hienthi(); } }
Code:
http://www.mediafire.com/?kwd241o6fdfdn9x
Comment