Thông báo

Collapse
No announcement yet.

Đồng Hố số sủ dũng DS1307 cần giúp đỡ!

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

  • Đồng Hố số sủ dũng DS1307 cần giúp đỡ!

    hi mọi người ai đã từng làm đồng hồ số với Ds1307 cho tui hòi tí
    tại làm sao tui bấm phím (nhấn luôn không thả) thì vi điều khiển bị treo mặc dầu phím bấm chưa lập trình chỉ mới nối vào chân vdk thôi
    còn nếu bấm thả phím nó cũng treo luôn (click khoảng 20 cái) ai có kinh nghiệm giải thích giùm
    Click image for larger version

Name:	untitled.JPG
Views:	1
Size:	193.4 KB
ID:	1414292

  • #2
    mô phỏng treo hay mạch thực treo, treo kiểu gì, led ko sáng hay giây ko đếm, ......., up hết lên đi, ko có code thì chả biết đường mà vẽ cho hươu

    Comment


    • #3
      mô phỏng treo
      thực ra thì do cái chan SCL của con ds1307 khi bỏ trở treo ra thì hết treo dầu có click thế nào cũng được mà treo chân scl lên thì nó treo vi điều khiển vi diều khiễn không chạy nữa vậy có cách khắc phục hông nếu làm mạch thật mà bỏ dien trở treo chân scl có vấn đề gì hông

      Comment


      • #4
        dây là code của tui
        #include <REGX51.H>
        sbit SDA = P1^1;
        sbit SCL = P1^0;
        #define PortData P2
        #define PortScan P3
        #define Set P1_2
        #define Back P1_3
        #define Next P1_4
        #define W 0xD0
        #define R 0xD1
        #define HOUR 0x02
        #define MIN 0x01
        #define SEC 0x00
        unsigned char code Led7Seg[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
        char Data,Hour,Min,Sec;
        char IncSet=0,Scanled=0,run=0,t=0;
        void delay(int t)
        {
        while(t--) ;
        }
        void Start()
        {
        SCL = 1;
        SCL = 0;
        SDA = 1;
        SCL = 1;
        delay(2);
        SDA = 0;
        delay(2);
        SCL = 0;
        delay(2);
        }
        void Stop()
        {
        SCL = 1;
        SCL = 0;
        SDA = 0;
        delay(2);
        SCL = 1;
        delay(2);
        SDA = 1;
        }
        void Write(unsigned char Data)
        {
        unsigned char i;
        for (i=0;i<8;i++)
        {
        SDA = (Data & 0x80) ? 1:0;
        SCL=1;SCL=0;
        Data<<=1;
        }
        SCL = 1; delay(2);
        SCL = 0;
        }
        unsigned char Read()
        {
        bit rd_bit;
        unsigned char i ;
        Data=0x00;
        for(i=0;i<8;i++)
        {
        delay(2);
        SCL = 1;
        delay(2);
        rd_bit = SDA;
        Data = Data<<1;
        Data = Data | rd_bit;
        SCL = 0;
        }
        return Data;
        }
        unsigned char Read_DS1307(unsigned char DataTime)
        {
        unsigned char Bcd_Hex;
        Start();
        Write(W);
        Write(DataTime);
        Start();
        Write(R);
        Bcd_Hex=Read();
        Stop();
        Bcd_Hex = (((Bcd_Hex/16)*10)+ (Bcd_Hex & 0x0f));
        return Bcd_Hex;
        }
        void interrupt_Time() interrupt 3 //ngat timer 1 chay dong ho
        {
        TR1=0;
        TF1=0;
        TH1=0x3c;
        TL1=0xaf;

        TR1=1;

        }
        void interrupt_San_Led7Seg()interrupt 1
        {
        TH0=0xfc;
        TL0=0x18;
        TR0=0;
        TF0=0;
        Scanled++ ;
        if(Scanled==1)
        {
        PortData=0xff;
        PortData =Led7Seg[Hour/10];
        PortScan = 0x01;
        }
        if(Scanled==2)
        {
        PortData=0xff;
        PortData =Led7Seg[Hour%10];
        PortScan = 0x02;

        }
        if(Scanled==3)
        {
        PortData=0xff;
        PortData = Led7Seg[Min/10];
        PortScan = 0x04;
        }
        if(Scanled==4)
        {
        PortData=0xff;
        PortData = Led7Seg[Min%10];
        PortScan = 0x08;

        }
        if(Scanled==5)
        {
        PortData=0xff;
        PortData = Led7Seg[Sec/10];
        PortScan = 0x10;
        }
        if(Scanled==6)
        {
        PortData=0xff;
        PortData = Led7Seg[Sec%10];
        PortScan = 0x20;
        Scanled=0;
        }
        TR0=1;
        }

        void Setup_Timer()
        {
        TMOD=0x11;
        TH1=0x3C;
        TL1=0xAF;
        TR1=1;
        ET1=1;
        TH0=0XFC;
        TL0=0X18;
        TR0=1;
        ET0=1;
        EA=1;

        }

        void main()
        {

        Setup_Timer();
        while(1)
        {

        if ((run==1)&&(IncSet==0))
        {
        run=0;
        Hour=Read_DS1307(HOUR);
        Min=Read_DS1307(MIN);
        Sec=Read_DS1307(SEC);
        }
        }
        }
        Last edited by sansuridan; 17-09-2012, 20:07.

        Comment


        • #5
          sao không ai trả lời hết vậy ta

          Comment


          • #6
            lỗi này chỉ gặp trong mô phỏng thôi. chứ mạch thực ko sao đâu bạn
            Nguyễn Huy Biên - 01649 802 694
            gmail :

            Comment


            • #7
              vậy à cám ơn nhiều để tui nghiên cứu mạch thật xem sao
              bạn đã làm rúi à nhấn nút luôn không thả củng khong sao à chắc 100% chứ huynh
              Last edited by sansuridan; 18-09-2012, 14:48.

              Comment

              Về tác giả

              Collapse

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

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

              Collapse

              Đang tải...
              X