Ai có lỡ ghé ngang, mong được xem qua dùm e cái code
giao tiếp giữa vdk với Ds1307 hiển thị led 7 đoạn.
vì làm mạch thực, thí nghiệm trên mạch thực lun, nên ko có sơ đồ protues, mong mọi người thông cảm.
Cảm ơn mọi người rất nhiều!
#include <REGX52.H>
sbit scl = P3^4;
sbit sda = P3^5;
sbit a1 = P0^0;
sbit a2 = P0^1;
sbit a3 = P0^2;
sbit a4 = P0^3;
sbit a5 = P0^4;
sbit a6 = P0^5;
sbit a7 = P0^6;
sbit m1 = P2^0; //hien thi phut1
sbit m2 = P2^1; //hien thi phut2
sbit h1 = P2^2; //hien thi gio1
sbit h2 = P2^3; //hien thi gio2
sbit d1 = P2^4; //hien thi ngay1
sbit d2 = P2^5; //hien thi ngay2
sbit mo1 = P2^6;
sbit mo2 = P2^7;
sbit y1 = P1^0;
sbit y2 = P1^1;
unsigned char bcd,dulieu;
unsigned char giay,phut,gio,ngay,thang,nam;
unsigned char gio1,gio2,phut1,phut2,giay1,giay2;
///////////////
void delay(int t) //delay
{int i;
unsigned char b;
for (i=0;i<t;i++){for(b=0;b<125;b++){;}}
}
/////////////////////////////
void delay2(int t) //delay2
{int i;
for (i=0;i<t;i++);
}
//////////////////////////////////////////////////////
void ds1307()
{unsigned char a;
for(a=0;a<7;a++)
{
scl=0;
sda=0xc0&(0x80>>a);
scl=1;
}
}
////////////////////////////////////////////////////////
void star()
{
scl=0;
sda=1;
scl=1;
delay2(10);
sda=0;
}
////////////////////////////////////////////////////////
void stop()
{
scl=0;
sda=0;
scl=1;
delay2(10);
sda=1;
}
////////////////////////////////////////////////////////
void ghi()
{
scl=0;
sda=0;
scl=1;
}
////////////////////////////////////////////////////////
void doc()
{
scl=0;
sda=1;
scl=1;
}
////////////////////////////////////////////////////////
void ack()
{
scl=0;
scl=1;
}
////////////////////////////////////////////////////////
void sobcd(unsigned char a) //chuyen tu hex sang bcd
{unsigned char b,c;
b=a/10;
b=b<<4;
c=a%10;
bcd=b|c;
}
////////////////////////////////////////////////////////
void guidulieu(unsigned char a)
{unsigned char b;
for(b=0;b<8;b++)
{
scl=0;
sda=a&(0x80>>b);
scl=1;
}
}
////////////////////////////////////////////////////////
void nhan()
{unsigned char b;
for(b=0;b<8;b++)
{
scl=0;
scl=1;
dulieu=(dulieu>>b)|sda;
}
}
//////////////////////////////////////////////////////
void settime()
{ unsigned char a,b,c;
sobcd(44);
a=bcd; //giay
sobcd(22);
b=bcd; //phut
sobcd(12);
c=bcd; //gio
star();ds1307();ghi();ack();guidulieu(0x00);ack(); guidulieu(a);ack();
guidulieu(b);ack();guidulieu(c);ack();
}
///////////////////////////////////////////////////////////////
void hienthi(unsigned char a)
{ a1=a2=a3=a4=a5=a6=a7=1;
switch(a)
{
case 0: a1=a2=a3=a4=a5=a6=0;break; //so0
case 1: a2=a3=0;break; //so1
case 2: a1=a2=a4=a5=a7=0;break; //so2
case 3: a1=a2=a3=a4=a7=0;break; //so3
case 4: a2=a3=a6=a7=0;break; //so4
case 5: a1=a3=a4=a6=a7=0;break; //so5
case 6: a1=a3=a4=a5=a6=a7=0;break; //so6
case 7: a1=a2=a3=0;break; //so7
case 8: a1=a2=a3=a4=a5=a6=a7=0;break; //so8
case 9: a1=a2=a3=a4=a6=a7=0;break; //so9
}
}
////////////////////////////////////////////////////////
void nhanthoigian()
{
star();ds1307();ghi();ack();guidulieu(0x00);ack(); stop();
star();ds1307();doc();ack();nhan();ack();stop();
}
///////////////////////////////////////////////////////
void tach()
{
giay1=dulieu&0x0f;
giay2=(dulieu&0xf0)>>4;
}
//////////////////////////////////////////////////////
void main ()
{
sda=scl=1;
settime();
while (1)
{
nhanthoigian();
tach();
hienthi(giay1);
giao tiếp giữa vdk với Ds1307 hiển thị led 7 đoạn.
vì làm mạch thực, thí nghiệm trên mạch thực lun, nên ko có sơ đồ protues, mong mọi người thông cảm.
Cảm ơn mọi người rất nhiều!
#include <REGX52.H>
sbit scl = P3^4;
sbit sda = P3^5;
sbit a1 = P0^0;
sbit a2 = P0^1;
sbit a3 = P0^2;
sbit a4 = P0^3;
sbit a5 = P0^4;
sbit a6 = P0^5;
sbit a7 = P0^6;
sbit m1 = P2^0; //hien thi phut1
sbit m2 = P2^1; //hien thi phut2
sbit h1 = P2^2; //hien thi gio1
sbit h2 = P2^3; //hien thi gio2
sbit d1 = P2^4; //hien thi ngay1
sbit d2 = P2^5; //hien thi ngay2
sbit mo1 = P2^6;
sbit mo2 = P2^7;
sbit y1 = P1^0;
sbit y2 = P1^1;
unsigned char bcd,dulieu;
unsigned char giay,phut,gio,ngay,thang,nam;
unsigned char gio1,gio2,phut1,phut2,giay1,giay2;
///////////////
void delay(int t) //delay
{int i;
unsigned char b;
for (i=0;i<t;i++){for(b=0;b<125;b++){;}}
}
/////////////////////////////
void delay2(int t) //delay2
{int i;
for (i=0;i<t;i++);
}
//////////////////////////////////////////////////////
void ds1307()
{unsigned char a;
for(a=0;a<7;a++)
{
scl=0;
sda=0xc0&(0x80>>a);
scl=1;
}
}
////////////////////////////////////////////////////////
void star()
{
scl=0;
sda=1;
scl=1;
delay2(10);
sda=0;
}
////////////////////////////////////////////////////////
void stop()
{
scl=0;
sda=0;
scl=1;
delay2(10);
sda=1;
}
////////////////////////////////////////////////////////
void ghi()
{
scl=0;
sda=0;
scl=1;
}
////////////////////////////////////////////////////////
void doc()
{
scl=0;
sda=1;
scl=1;
}
////////////////////////////////////////////////////////
void ack()
{
scl=0;
scl=1;
}
////////////////////////////////////////////////////////
void sobcd(unsigned char a) //chuyen tu hex sang bcd
{unsigned char b,c;
b=a/10;
b=b<<4;
c=a%10;
bcd=b|c;
}
////////////////////////////////////////////////////////
void guidulieu(unsigned char a)
{unsigned char b;
for(b=0;b<8;b++)
{
scl=0;
sda=a&(0x80>>b);
scl=1;
}
}
////////////////////////////////////////////////////////
void nhan()
{unsigned char b;
for(b=0;b<8;b++)
{
scl=0;
scl=1;
dulieu=(dulieu>>b)|sda;
}
}
//////////////////////////////////////////////////////
void settime()
{ unsigned char a,b,c;
sobcd(44);
a=bcd; //giay
sobcd(22);
b=bcd; //phut
sobcd(12);
c=bcd; //gio
star();ds1307();ghi();ack();guidulieu(0x00);ack(); guidulieu(a);ack();
guidulieu(b);ack();guidulieu(c);ack();
}
///////////////////////////////////////////////////////////////
void hienthi(unsigned char a)
{ a1=a2=a3=a4=a5=a6=a7=1;
switch(a)
{
case 0: a1=a2=a3=a4=a5=a6=0;break; //so0
case 1: a2=a3=0;break; //so1
case 2: a1=a2=a4=a5=a7=0;break; //so2
case 3: a1=a2=a3=a4=a7=0;break; //so3
case 4: a2=a3=a6=a7=0;break; //so4
case 5: a1=a3=a4=a6=a7=0;break; //so5
case 6: a1=a3=a4=a5=a6=a7=0;break; //so6
case 7: a1=a2=a3=0;break; //so7
case 8: a1=a2=a3=a4=a5=a6=a7=0;break; //so8
case 9: a1=a2=a3=a4=a6=a7=0;break; //so9
}
}
////////////////////////////////////////////////////////
void nhanthoigian()
{
star();ds1307();ghi();ack();guidulieu(0x00);ack(); stop();
star();ds1307();doc();ack();nhan();ack();stop();
}
///////////////////////////////////////////////////////
void tach()
{
giay1=dulieu&0x0f;
giay2=(dulieu&0xf0)>>4;
}
//////////////////////////////////////////////////////
void main ()
{
sda=scl=1;
settime();
while (1)
{
nhanthoigian();
tach();
hienthi(giay1);
Comment