Thông báo

Collapse
No announcement yet.

mạch đồng hồ LCD không nhớ giờ

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • mạch đồng hồ LCD không nhớ giờ

    các bác xem giùm em code xem có vấn đề gì không mà sao em gắn pin rồi, mà mỗi lần cắm nguồn thì đồng hồ cứ chạy đúng 9h59' tắt đi bật lại cũng vậy. em cũng đã thử thay con ds1307 nhưng vẫn vậy.
    Code:
    #include<reg52.h>
    #include<string.h>
    
    unsigned char bcd_dec(unsigned char bcd); 	 // Chuyen doi so BCD-thap phan
    
    unsigned char dec_bcd(unsigned char dec); 	 // Chuyen doi so thap phan-BCD
     
    unsigned char bcd_dec(unsigned char bcd)
                  {
    			    return((bcd/16)*10+(bcd%16));
    			  }		
    
      unsigned char dec_bcd(unsigned char dec) 
                   {
    			     return((dec/10)*16+(dec%10));
    			   }              
    
    
    
    
    void caidat();
    void hienngay();
    void hiengio();
    unsigned char mode=0;
    
    
    bit tang0=1,tang1=1,giam0=1,giam1=1,mode0=1,mode1=1;
    char giay,phut,gio,h1,h2,m1,m2,s1,s2,ngay,thang,nam,ng1,ng2,th1,th2,n1,n2,thu,day; // cac gia tri
    // giay,phut,gio,thu,ngay,thang,nam duoc tach thanh 2 so de hien thi
    
    // Dat lai ten cho cac chan dac biet duoc dung
    sbit SCL=P1^0;	  
    sbit SDA=P1^1;
    sbit Rs=P1^5;
    sbit Rw=P1^6;
    sbit En=P1^7;
    sbit tang=P3^5;
    sbit giam=P3^4;
    sbit menu=P3^2;
    sbit Bf=  P2^7;
    
    // Ham tre t(ms)
    void delay(int t)
    {
      int a,b;
      for(a=0;a<t;a++)
      {
        for(b=0;b<125;b++)
    	{}
      }
    }
    // Ham tre t(us)
    void delay_us(int t)
    {
      int a;
      for(a=0;a<t;a++)
      {}
    }
    
    // CAC CHUONG TRINH GIANH CHO LCD
    // Ham kiem tra ban
    void ban()
    {
      P2=0xFF;
      Rs=0;
      Rw=1;
      while(Bf)
      {
        En=0;
    	delay_us(50);
    	En=1;
      }
    }
    // Ham ghi lenh
    void lenh(unsigned char x)
    {
      ban();
      P2=x;
      Rs=0;
      Rw=0;
      delay_us(50);
      En=1;
      delay_us(50);
      En=0;
    }
    // Ham ghi du lieu
    void kitu(unsigned char x)
    {
      ban();
      P2=x;
      Rs=1;
      Rw=0;
      delay_us(50);
      En=1;
      delay_us(50);
      En=0;
    }
    // Ham ghi chuoi
    void chuoi(unsigned char *s)
    {
      char i;
      for(i=0;i<strlen(s);i++)
      {
        kitu(s[i]);
      }
    }
    // Ham ghi cham 1 chuoi
    void chuoi_cham(unsigned char *s)
    {
      char i;
      for(i=0;i<strlen(s);i++)
      {
        kitu(s[i]);
    	delay(75);
      }
    }
    // Ham khoi tao LCD
    void khoitao()
    {
      lenh(0x38);
      lenh(0x01);
      lenh(0x0c);
      lenh(0x80);
    }
    
    // CAC CHUONG TRINH GIANH CHO DS1307
    // Ham start I2C
    void start()
    {
      SCL=1;
      SDA=1;
      delay(1);
      SDA=0;
      delay(1);
      SCL=0;
      SDA=1;
    }
    // Ham stop I2C
    void stop()
    {
      
      SDA=0;SCL=1;
      delay(1);
      SDA=1;
      delay(1);
    }
    // Ham ghi 1 byte vao DS1307
    void truyen(unsigned char g)
    {
      unsigned char tem,i;
      for(i=0;i<8;i++)
      {
        tem=g&0x80;
    	if(tem==0x80)
    	SDA=1;
    	else SDA=0;
    	SCL=1;
    	delay(1);
    	SCL=0;
    	g=g*2;
    	
      }
      SCL=1;
      delay(1);
      SCL=0;
    }
    // Ham nhan 1 byte
    unsigned char nhan()
    {
     unsigned char gt=0,i;
     for(i=0;i<8;i++)
     {
       SCL=1;
       gt=gt*2;
       delay(1);
       gt=gt|SDA;
       SCL=0;
       delay(1);
     }
     SCL=1;
     SDA=1;
     delay(1);
     SCL=0;
     return gt;
    }
    //Ham ghi gia tri vao 1 dia chi 
    void ghi(unsigned char add,unsigned char gt)
    {
      start();
      truyen(0xd0);
      truyen(add);
      truyen(gt);
      stop();
    }
    // Ham doc gia tri tu 1 dia chi
    unsigned char doc(unsigned char add)
    {
      unsigned char value;
      start();
      truyen(0xd0);
      truyen(add);
      start();
      truyen(0xd1);
      value=nhan();
      stop();
      return value;
    }
    // CAC CHUONG TRINH GIAO TIEP 89S52-DS1307
    //Ham khoi tao gia tri DS1307
    void khoitao_DS()
    {
      unsigned char check;
      check=doc(0x08);
      if(check!='c')
      {
        ghi(0x08,'c');
    	ghi(0x00,(dec_bcd(30))&0x7F);
    	ghi(0x01,(dec_bcd(35))&0x7F);
    	ghi(0x02,(dec_bcd(14))&0x3F);
    	ghi(0x03,dec_bcd(4));
    	ghi(0x04,dec_bcd(1));
    	ghi(0x05,dec_bcd(5));
    	ghi(0x06,dec_bcd(13));
    
      }
    }
    //Ham doc gia tri thoi gian tu DS1307
    void docgio()
    {
      giay =bcd_dec(doc(0x00));
      phut =bcd_dec(doc(0x01));
      gio  =bcd_dec(doc(0x02));
      thu=bcd_dec(doc(0x03));
      ngay =bcd_dec(doc(0x04));
      thang=bcd_dec(doc(0x05));
      nam  =bcd_dec(doc(0x06)); 
    }
    //Tach gia tri de hien thi
    void tach()
    {  
      s1=giay/10+48;s2=giay%10+48;
      m1=phut/10+48;m2=phut%10+48;
      h1=gio/10+48;h2=gio%10+48;
      day=thu+48;
      ng1=ngay/10+48;ng2=ngay%10+48;
      th1=thang/10+48;th2=thang%10+48;
      n1=nam/10+48;n2=nam%10+48;
    }   
    
    
    //Ham hien thi thoi gian
    void hienthi()
    {
      docgio();
      tach();
      lenh(0x80);
      if(thu!=7)
      {
        chuoi("Thu ");
    	kitu(day+1);
    	kitu(' ');
      }
      else chuoi("CNHAT ");
      kitu(ng1);kitu(ng2);
      kitu('/');
      kitu(th1);kitu(th2);
      kitu('/');
      chuoi("20");
      kitu(n1);kitu(n2);
      lenh(0xc0);
      chuoi("Time: ");
      kitu(h1);kitu(h2);
      kitu(':');
      kitu(m1);kitu(m2);
      kitu(':');
      kitu(s1);kitu(s2);
      chuoi("  ");
    }
    //Hien thi thu ngay thang nam
    void hienngay()
    {
      tach();
      lenh(0xc0);
      if(thu!=7)
      {
        chuoi("Thu ");
    	kitu(day+1);
    	kitu(' ');
      }
      else chuoi("CNHAT ");
      kitu(ng1);kitu(ng2);
      kitu('/');
      kitu(th1);kitu(th2);
      kitu('/');
      chuoi("20");
      kitu(n1);kitu(n2);
    }
    //Hien giay phut gio
    void hiengio()
    {
      tach();
      lenh(0xc0);
      chuoi("Time: ");
      kitu(h1);kitu(h2);
      kitu(':');
      kitu(m1);kitu(m2);
      kitu(':');
      kitu(s1);kitu(s2);
      kitu(' ');
    }
    //Ham cai dat gia tri thoi gian
    void caidat()
    {
      if(mode==1)	// Gio
      {
        tang0=tang1;tang1=tang;
    	giam0=giam1;giam1=giam;
    	if(tang0==0 && tang1==1)
    	{
    	  gio=gio+1;
    	  if(gio==24) 
    	  gio=0;
    	  
    	}
    	if(giam0==0 && giam1==1)
    	{
    	  gio=gio-1;
    	  if(gio<0)
    	  gio=23;
    	}
      }
      else
      {
      if(mode==2)   // Phut
      {
        tang0=tang1;tang1=tang;
    	giam0=giam1;giam1=giam;
    	if(tang0==0 && tang1==1)
    	{
    	  phut=phut+1;
    	  if(phut==60) 
    	  phut=0;
    	  
    	}
    	if(giam0==0 && giam1==1)
    	{
    	  phut=phut-1;
    	  if(phut<0)
    	  phut=59;
    	}
      }
      else
      {
      if(mode==3)   // Giay
      {
        tang0=tang1;tang1=tang;
    	giam0=giam1;giam1=giam;
    	if(tang0==0 && tang1==1)
    	{
    	  giay=giay+1;
    	  if(giay==60) 
    	  giay=0;
    	  
    	}
    	if(giam0==0 && giam1==1)
    	{
    	  giay=giay-1;
    	  if(giay<0)
    	  giay=59;
    	}
      }
      else
      {
      if(mode==4)   // Thu
      {
        tang0=tang1;tang1=tang;
    	giam0=giam1;giam1=giam;
    	if(tang0==0 && tang1==1)
    	{
    	  thu=thu+1;
    	  if(thu==8) 
    	  thu=1;
    	  
    	}
    	if(giam0==0 && giam1==1)
    	{
    	  thu=thu-1;
    	  if(thu==0)
    	  thu=7;
    	}
      }
      else
      {
      if(mode==5)   // Ngay
      {
        tang0=tang1;tang1=tang;
    	giam0=giam1;giam1=giam;
    	if(tang0==0 && tang1==1)
    	{
    	  ngay=ngay+1;
    	  if(ngay==32) 
    	  ngay=1;
    	  
    	}
    	if(giam0==0 && giam1==1)
    	{
    	  ngay=ngay-1;
    	  if(ngay==0)
    	  ngay=31;
    	}
      }
      else 
      {
      if(mode==6)   // Thang
      {
        tang0=tang1;tang1=tang;
    	giam0=giam1;giam1=giam;
    	if(tang0==0 && tang1==1)
    	{
    	  thang=thang+1;
    	  if(thang==13) 
    	  thang=1;
    	  
    	}
    	if(giam0==0 && giam1==1)
    	{
    	  thang=thang-1;
    	  if(thang==0)
    	  thang=12;
    	}
      }
      else
      {
      if(mode==7)   // Nam
      {
        tang0=tang1;tang1=tang;
    	giam0=giam1;giam1=giam;
    	if(tang0==0 && tang1==1)
    	{
    	  nam=nam+1;
    	  if(nam==100) 
    	  nam=0;
    	  
    	}
    	if(giam0==0 && giam1==1)
    	{
    	  nam=nam-1;
    	  if(nam<0)
    	  nam=99;
    	}
      }
      }
      }
      }
      }
      }
      }
    
        ghi(0x00,(dec_bcd(giay))&0x7F);
    	ghi(0x01,(dec_bcd(phut))&0x7F);
    	ghi(0x02,(dec_bcd(gio))&0x3F);
    	ghi(0x03,dec_bcd(thu));
    	ghi(0x04,dec_bcd(ngay));
    	ghi(0x05,dec_bcd(thang));
    	ghi(0x06,dec_bcd(nam));
    
      
     
      if(mode==1)
      {
        lenh(0x80);
    	chuoi("   CHINH GIO:   ");
    	lenh(0xc0);
    	hiengio();
      }
      else
      {
      if(mode==2)
      {
        lenh(0x80);
    	chuoi("   CHINH PHUT:  ");
    	lenh(0xc0);
    	hiengio();
      }
      else
      {
      if(mode==3)
      {
        lenh(0x80);
    	chuoi("   CHINH GIAY:  ");
    	lenh(0xc0);
    	hiengio();
      }
      else
      {
      if(mode==4)
      {
        lenh(0x80);
    	chuoi("   CHINH THU:   ");
    	lenh(0xc0);
    	hienngay();
      }
      else
      {
      if(mode==5)
      {
        lenh(0x80);
    	chuoi("   CHINH NGAY:  ");
    	lenh(0xc0);
    	hienngay();
      }
      else
      {
      if(mode==6)
      {
        lenh(0x80);
    	chuoi("   CHINH THANG: ");
    	lenh(0xc0);
    	hienngay();
      }
      else
      {
      if(mode==7)
      {
        lenh(0x80);
    	chuoi("   CHINH NAM:   ");
    	lenh(0xc0);
    	hienngay();
      }
      }
      }
      }
      }
      }
      }
    
    }
    // HAM CHINH
    void main()
    {
      khoitao();
      khoitao_DS();
      lenh(0x80);
      chuoi_cham("REAL TIME CLOCK ");
      
      lenh(0xc0);
      chuoi_cham(" DO AN DIEN TU  ");
      delay(2000);
      lenh(0x01);
      lenh(0x80);
      chuoi_cham("By DanhPro");
      lenh(0xc0);
      chuoi_cham("GMAIL:vdanhp");
      delay(2000);
      lenh(0x01);
    
      while(1)
      {
        mode0=mode1;mode1=menu;
    	if(mode0==0 && mode1==1)
    	{
    	  mode=mode+1;
    	  if(mode==8)
    	  mode=0;
    	}
        if(mode!=0) 
    	  caidat();
    	else
    	hienthi();
      }
    }

  • #2
    Do lúc bạn ghi khởi tạo giá trị cho DS1307 được thực hiện khi khởi động. Bạn phải có hàm kiểm tra xem đã từng ghi cho DS1307 hay chưa rồi mới ghi (chỉ ghi 1 lần)

    Comment


    • #3
      Nguyên văn bởi vdanhp Xem bài viết
      các bác xem giùm em code xem có vấn đề gì không mà sao em gắn pin rồi, mà mỗi lần cắm nguồn thì đồng hồ cứ chạy đúng 9h59' tắt đi bật lại cũng vậy. em cũng đã thử thay con ds1307 nhưng vẫn vậy.
      Code:
      #include<reg52.h>
      #include<string.h>
      
      unsigned char bcd_dec(unsigned char bcd); 	 // Chuyen doi so BCD-thap phan
      
      unsigned char dec_bcd(unsigned char dec); 	 // Chuyen doi so thap phan-BCD
       
      unsigned char bcd_dec(unsigned char bcd)
                    {
      			    return((bcd/16)*10+(bcd%16));
      			  }		
      
        unsigned char dec_bcd(unsigned char dec) 
                     {
      			     return((dec/10)*16+(dec%10));
      			   }              
      
      
      
      
      void caidat();
      void hienngay();
      void hiengio();
      unsigned char mode=0;
      
      
      bit tang0=1,tang1=1,giam0=1,giam1=1,mode0=1,mode1=1;
      char giay,phut,gio,h1,h2,m1,m2,s1,s2,ngay,thang,nam,ng1,ng2,th1,th2,n1,n2,thu,day; // cac gia tri
      // giay,phut,gio,thu,ngay,thang,nam duoc tach thanh 2 so de hien thi
      
      // Dat lai ten cho cac chan dac biet duoc dung
      sbit SCL=P1^0;	  
      sbit SDA=P1^1;
      sbit Rs=P1^5;
      sbit Rw=P1^6;
      sbit En=P1^7;
      sbit tang=P3^5;
      sbit giam=P3^4;
      sbit menu=P3^2;
      sbit Bf=  P2^7;
      
      // Ham tre t(ms)
      void delay(int t)
      {
        int a,b;
        for(a=0;a<t;a++)
        {
          for(b=0;b<125;b++)
      	{}
        }
      }
      // Ham tre t(us)
      void delay_us(int t)
      {
        int a;
        for(a=0;a<t;a++)
        {}
      }
      
      // CAC CHUONG TRINH GIANH CHO LCD
      // Ham kiem tra ban
      void ban()
      {
        P2=0xFF;
        Rs=0;
        Rw=1;
        while(Bf)
        {
          En=0;
      	delay_us(50);
      	En=1;
        }
      }
      // Ham ghi lenh
      void lenh(unsigned char x)
      {
        ban();
        P2=x;
        Rs=0;
        Rw=0;
        delay_us(50);
        En=1;
        delay_us(50);
        En=0;
      }
      // Ham ghi du lieu
      void kitu(unsigned char x)
      {
        ban();
        P2=x;
        Rs=1;
        Rw=0;
        delay_us(50);
        En=1;
        delay_us(50);
        En=0;
      }
      // Ham ghi chuoi
      void chuoi(unsigned char *s)
      {
        char i;
        for(i=0;i<strlen(s);i++)
        {
          kitu(s[i]);
        }
      }
      // Ham ghi cham 1 chuoi
      void chuoi_cham(unsigned char *s)
      {
        char i;
        for(i=0;i<strlen(s);i++)
        {
          kitu(s[i]);
      	delay(75);
        }
      }
      // Ham khoi tao LCD
      void khoitao()
      {
        lenh(0x38);
        lenh(0x01);
        lenh(0x0c);
        lenh(0x80);
      }
      
      // CAC CHUONG TRINH GIANH CHO DS1307
      // Ham start I2C
      void start()
      {
        SCL=1;
        SDA=1;
        delay(1);
        SDA=0;
        delay(1);
        SCL=0;
        SDA=1;
      }
      // Ham stop I2C
      void stop()
      {
        
        SDA=0;SCL=1;
        delay(1);
        SDA=1;
        delay(1);
      }
      // Ham ghi 1 byte vao DS1307
      void truyen(unsigned char g)
      {
        unsigned char tem,i;
        for(i=0;i<8;i++)
        {
          tem=g&0x80;
      	if(tem==0x80)
      	SDA=1;
      	else SDA=0;
      	SCL=1;
      	delay(1);
      	SCL=0;
      	g=g*2;
      	
        }
        SCL=1;
        delay(1);
        SCL=0;
      }
      // Ham nhan 1 byte
      unsigned char nhan()
      {
       unsigned char gt=0,i;
       for(i=0;i<8;i++)
       {
         SCL=1;
         gt=gt*2;
         delay(1);
         gt=gt|SDA;
         SCL=0;
         delay(1);
       }
       SCL=1;
       SDA=1;
       delay(1);
       SCL=0;
       return gt;
      }
      //Ham ghi gia tri vao 1 dia chi 
      void ghi(unsigned char add,unsigned char gt)
      {
        start();
        truyen(0xd0);
        truyen(add);
        truyen(gt);
        stop();
      }
      // Ham doc gia tri tu 1 dia chi
      unsigned char doc(unsigned char add)
      {
        unsigned char value;
        start();
        truyen(0xd0);
        truyen(add);
        start();
        truyen(0xd1);
        value=nhan();
        stop();
        return value;
      }
      // CAC CHUONG TRINH GIAO TIEP 89S52-DS1307
      //Ham khoi tao gia tri DS1307
      void khoitao_DS()
      {
        unsigned char check;
        check=doc(0x08);
        if(check!='c')
        {
          ghi(0x08,'c');
      	ghi(0x00,(dec_bcd(30))&0x7F);
      	ghi(0x01,(dec_bcd(35))&0x7F);
      	ghi(0x02,(dec_bcd(14))&0x3F);
      	ghi(0x03,dec_bcd(4));
      	ghi(0x04,dec_bcd(1));
      	ghi(0x05,dec_bcd(5));
      	ghi(0x06,dec_bcd(13));
      
        }
      }
      //Ham doc gia tri thoi gian tu DS1307
      void docgio()
      {
        giay =bcd_dec(doc(0x00));
        phut =bcd_dec(doc(0x01));
        gio  =bcd_dec(doc(0x02));
        thu=bcd_dec(doc(0x03));
        ngay =bcd_dec(doc(0x04));
        thang=bcd_dec(doc(0x05));
        nam  =bcd_dec(doc(0x06)); 
      }
      //Tach gia tri de hien thi
      void tach()
      {  
        s1=giay/10+48;s2=giay%10+48;
        m1=phut/10+48;m2=phut%10+48;
        h1=gio/10+48;h2=gio%10+48;
        day=thu+48;
        ng1=ngay/10+48;ng2=ngay%10+48;
        th1=thang/10+48;th2=thang%10+48;
        n1=nam/10+48;n2=nam%10+48;
      }   
      
      
      //Ham hien thi thoi gian
      void hienthi()
      {
        docgio();
        tach();
        lenh(0x80);
        if(thu!=7)
        {
          chuoi("Thu ");
      	kitu(day+1);
      	kitu(' ');
        }
        else chuoi("CNHAT ");
        kitu(ng1);kitu(ng2);
        kitu('/');
        kitu(th1);kitu(th2);
        kitu('/');
        chuoi("20");
        kitu(n1);kitu(n2);
        lenh(0xc0);
        chuoi("Time: ");
        kitu(h1);kitu(h2);
        kitu(':');
        kitu(m1);kitu(m2);
        kitu(':');
        kitu(s1);kitu(s2);
        chuoi("  ");
      }
      //Hien thi thu ngay thang nam
      void hienngay()
      {
        tach();
        lenh(0xc0);
        if(thu!=7)
        {
          chuoi("Thu ");
      	kitu(day+1);
      	kitu(' ');
        }
        else chuoi("CNHAT ");
        kitu(ng1);kitu(ng2);
        kitu('/');
        kitu(th1);kitu(th2);
        kitu('/');
        chuoi("20");
        kitu(n1);kitu(n2);
      }
      //Hien giay phut gio
      void hiengio()
      {
        tach();
        lenh(0xc0);
        chuoi("Time: ");
        kitu(h1);kitu(h2);
        kitu(':');
        kitu(m1);kitu(m2);
        kitu(':');
        kitu(s1);kitu(s2);
        kitu(' ');
      }
      //Ham cai dat gia tri thoi gian
      void caidat()
      {
        if(mode==1)	// Gio
        {
          tang0=tang1;tang1=tang;
      	giam0=giam1;giam1=giam;
      	if(tang0==0 && tang1==1)
      	{
      	  gio=gio+1;
      	  if(gio==24) 
      	  gio=0;
      	  
      	}
      	if(giam0==0 && giam1==1)
      	{
      	  gio=gio-1;
      	  if(gio<0)
      	  gio=23;
      	}
        }
        else
        {
        if(mode==2)   // Phut
        {
          tang0=tang1;tang1=tang;
      	giam0=giam1;giam1=giam;
      	if(tang0==0 && tang1==1)
      	{
      	  phut=phut+1;
      	  if(phut==60) 
      	  phut=0;
      	  
      	}
      	if(giam0==0 && giam1==1)
      	{
      	  phut=phut-1;
      	  if(phut<0)
      	  phut=59;
      	}
        }
        else
        {
        if(mode==3)   // Giay
        {
          tang0=tang1;tang1=tang;
      	giam0=giam1;giam1=giam;
      	if(tang0==0 && tang1==1)
      	{
      	  giay=giay+1;
      	  if(giay==60) 
      	  giay=0;
      	  
      	}
      	if(giam0==0 && giam1==1)
      	{
      	  giay=giay-1;
      	  if(giay<0)
      	  giay=59;
      	}
        }
        else
        {
        if(mode==4)   // Thu
        {
          tang0=tang1;tang1=tang;
      	giam0=giam1;giam1=giam;
      	if(tang0==0 && tang1==1)
      	{
      	  thu=thu+1;
      	  if(thu==8) 
      	  thu=1;
      	  
      	}
      	if(giam0==0 && giam1==1)
      	{
      	  thu=thu-1;
      	  if(thu==0)
      	  thu=7;
      	}
        }
        else
        {
        if(mode==5)   // Ngay
        {
          tang0=tang1;tang1=tang;
      	giam0=giam1;giam1=giam;
      	if(tang0==0 && tang1==1)
      	{
      	  ngay=ngay+1;
      	  if(ngay==32) 
      	  ngay=1;
      	  
      	}
      	if(giam0==0 && giam1==1)
      	{
      	  ngay=ngay-1;
      	  if(ngay==0)
      	  ngay=31;
      	}
        }
        else 
        {
        if(mode==6)   // Thang
        {
          tang0=tang1;tang1=tang;
      	giam0=giam1;giam1=giam;
      	if(tang0==0 && tang1==1)
      	{
      	  thang=thang+1;
      	  if(thang==13) 
      	  thang=1;
      	  
      	}
      	if(giam0==0 && giam1==1)
      	{
      	  thang=thang-1;
      	  if(thang==0)
      	  thang=12;
      	}
        }
        else
        {
        if(mode==7)   // Nam
        {
          tang0=tang1;tang1=tang;
      	giam0=giam1;giam1=giam;
      	if(tang0==0 && tang1==1)
      	{
      	  nam=nam+1;
      	  if(nam==100) 
      	  nam=0;
      	  
      	}
      	if(giam0==0 && giam1==1)
      	{
      	  nam=nam-1;
      	  if(nam<0)
      	  nam=99;
      	}
        }
        }
        }
        }
        }
        }
        }
      
          ghi(0x00,(dec_bcd(giay))&0x7F);
      	ghi(0x01,(dec_bcd(phut))&0x7F);
      	ghi(0x02,(dec_bcd(gio))&0x3F);
      	ghi(0x03,dec_bcd(thu));
      	ghi(0x04,dec_bcd(ngay));
      	ghi(0x05,dec_bcd(thang));
      	ghi(0x06,dec_bcd(nam));
      
        
       
        if(mode==1)
        {
          lenh(0x80);
      	chuoi("   CHINH GIO:   ");
      	lenh(0xc0);
      	hiengio();
        }
        else
        {
        if(mode==2)
        {
          lenh(0x80);
      	chuoi("   CHINH PHUT:  ");
      	lenh(0xc0);
      	hiengio();
        }
        else
        {
        if(mode==3)
        {
          lenh(0x80);
      	chuoi("   CHINH GIAY:  ");
      	lenh(0xc0);
      	hiengio();
        }
        else
        {
        if(mode==4)
        {
          lenh(0x80);
      	chuoi("   CHINH THU:   ");
      	lenh(0xc0);
      	hienngay();
        }
        else
        {
        if(mode==5)
        {
          lenh(0x80);
      	chuoi("   CHINH NGAY:  ");
      	lenh(0xc0);
      	hienngay();
        }
        else
        {
        if(mode==6)
        {
          lenh(0x80);
      	chuoi("   CHINH THANG: ");
      	lenh(0xc0);
      	hienngay();
        }
        else
        {
        if(mode==7)
        {
          lenh(0x80);
      	chuoi("   CHINH NAM:   ");
      	lenh(0xc0);
      	hienngay();
        }
        }
        }
        }
        }
        }
        }
      
      }
      // HAM CHINH
      void main()
      {
        khoitao();
        khoitao_DS();
        lenh(0x80);
        chuoi_cham("REAL TIME CLOCK ");
        
        lenh(0xc0);
        chuoi_cham(" DO AN DIEN TU  ");
        delay(2000);
        lenh(0x01);
        lenh(0x80);
        chuoi_cham("By DanhPro");
        lenh(0xc0);
        chuoi_cham("GMAIL:vdanhp");
        delay(2000);
        lenh(0x01);
      
        while(1)
        {
          mode0=mode1;mode1=menu;
      	if(mode0==0 && mode1==1)
      	{
      	  mode=mode+1;
      	  if(mode==8)
      	  mode=0;
      	}
          if(mode!=0) 
      	  caidat();
      	else
      	hienthi();
        }
      }
      bỏ hàm khoitao_DS(); trong hàm main đi rồi nạp lại chương trình
      (^_^) hoangnv.3i@gmail.com

      Comment


      • #4
        Nguyên văn bởi hoang_3i Xem bài viết
        bỏ hàm khoitao_DS(); trong hàm main đi rồi nạp lại chương trình
        Bỏ là bỏ thế nào được.
        Hàm khởi tạo không bỏ được. Thêm vào hàm khởi tạo 1 hàm có tác dụng kiểm tra xem DS đã từng được ghi hay chưa

        Comment


        • #5
          Nguyên văn bởi yamailuk Xem bài viết
          Bỏ là bỏ thế nào được.
          Hàm khởi tạo không bỏ được. Thêm vào hàm khởi tạo 1 hàm có tác dụng kiểm tra xem DS đã từng được ghi hay chưa
          chả có gì là ko bỏ đc cả. DS1307 chỉ cần setup 1 lần rồi thôi là nó tự chạy với điều kiện là nó có pin nuôi.
          (^_^) hoangnv.3i@gmail.com

          Comment


          • #6
            Nguyên văn bởi hoang_3i Xem bài viết
            chả có gì là ko bỏ đc cả. DS1307 chỉ cần setup 1 lần rồi thôi là nó tự chạy với điều kiện là nó có pin nuôi.
            em cũng làm 1 cái đồng hồ lcd code thì đúng là cái trên luôn nhưng chỉ hiển thị hàng đầu tiên lcd tối thui.

            Comment


            • #7
              các bác chỉ em bỏ cái nào với. e thử bỏ cái khoitao đó rồi. nhưng đồng hồ k chạy

              Comment


              • #8
                Nguyên văn bởi vdanhp Xem bài viết
                các bác chỉ em bỏ cái nào với. e thử bỏ cái khoitao đó rồi. nhưng đồng hồ k chạy
                Ồ! Code này mình thử trên mạch thực chạy ngon lành rồi mà,cả trên lcd lẫn led 7 thanh,bạn thử làm cái clip lên đây mọi người xem
                vanduc0211@gmail.com

                Comment


                • #9
                  Nguyên văn bởi yamailuk Xem bài viết
                  Bỏ là bỏ thế nào được.
                  Hàm khởi tạo không bỏ được. Thêm vào hàm khởi tạo 1 hàm có tác dụng kiểm tra xem DS đã từng được ghi hay chưa
                  Cái này quá chuẩn, không thể bỏ được, nhỡ đang dùng , hết pin nguồn nuôi, hết điện, nhiễu v.v.... thì lại nạp lại code à. Nên kiểm tra nếu Ds được nạp rồi thì không khởi tạo nữa còn không thì phải khởi tạo lại cho nó!


                  email:

                  Comment


                  • #10
                    Nguyên văn bởi ngocanh77 Xem bài viết
                    Cái này quá chuẩn, không thể bỏ được, nhỡ đang dùng , hết pin nguồn nuôi, hết điện, nhiễu v.v.... thì lại nạp lại code à. Nên kiểm tra nếu Ds được nạp rồi thì không khởi tạo nữa còn không thì phải khởi tạo lại cho nó!
                    bác cho e cái hàm chi tiết được không.

                    Comment


                    • #11
                      Nguyên văn bởi vdanhp Xem bài viết
                      bác cho e cái hàm chi tiết được không.
                      Giả sử, chỉ là giả sử thôi nhé. Tớ không đọc kỹ code của bạn...

                      char tam;
                      bit dk_dung = 0;
                      void main()
                      ............................................
                      for (tam=0,tam<60,tam++)
                      {
                      if (giay==tam)
                      {
                      dk_dung=0;
                      tam=61; //thoát vòng for
                      }
                      else
                      {
                      dk_dung=1;
                      }
                      };
                      if(dk_dung==1){khởi tạo lại DS;}
                      while(1)
                      ........


                      email:

                      Comment


                      • #12
                        Mình không nhớ giá trị mặc định của DS1307 (hình như là 0 hết thì phải). Đơn giản nhất là cắm điện cho nó chạy. Xong tháo pin CMOS ra. Viết 1 hàm đọc giá trị (đây là giá trị mặc định). Về sau viết hàm so sánh với giá trị này để xác định là đã ghi hay chưa. Trên 8051 không có bộ nhớ EEPROM nên không dùng bộ nhớ được. Mình trước có viết trên AVR thì chỉ cần lúc khởi tạo ghi 1 bit nhớ trên EEPROM. Viết 1 hàm kiểm tra bit này là xong.

                        Comment

                        Về tác giả

                        Collapse

                        vdanhp Tìm hiểu thêm về vdanhp

                        Bài viết mới nhất

                        Collapse

                        Đang tải...
                        X