Thông báo

Collapse
No announcement yet.

Đồng hồ 89C52+Ds1307 hiển thị led 7 đoạn+ nút nhấn-Keil C

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

  • Đồng hồ 89C52+Ds1307 hiển thị led 7 đoạn+ nút nhấn-Keil C

    các Bác xem cai code e mô phỏng tren proteus chạy ngon mà sao khi e cắm bằng testboard để test chân 7 ds1307 mà nó ko nháy 1HZ.(scl sda kéo trở 4.7k vcc) e làm như hình vẽ ne cac bác
    ai rảnh xem giúp e với chứ cái này e ngồi mò nguyên tối hôm qua mà ko biết sai o đâu nữa


    code & hinh capture đây các bac xem giúp sửa dc là e đội ơn nhiều lắm UP.zipClick image for larger version

Name:	UP.png
Views:	1
Size:	26.5 KB
ID:	1413304

  • #2
    bạn có gắn pin 3v cho con ds1307 không? trong hình bạn bỏ trống?
    Mãi đi tìm vàng.

    Comment


    • #3
      lúc nãy thì ko có ,sau khi nghe bác e nối pin cmos 3V vô rồi ,mạch vẫn ko chạy chân 7 chỉ xuất ra mức thấp thôi (cực cathode led nối chân 7,led sáng ko chớp)ko có xung.hix.bác có đồ nghề hay board 8051 thì giúp e test code này với ,e cám ơn bác nhiều

      Comment


      • #4
        Con này chưa được khởi tạo

        Bạn cho nó cái lệnh khởi tạo vào sẽ nhấp nháy thoai

        Comment


        • #5
          Mình khởi tạo rồi đó bạn

          void main()
          {
          I2C_Start();
          I2C_Write(0xD0);
          I2C_Write(0x07); //GOI DIA CHI THANH GHI CONTROL SQW.OUT
          I2C_Write(0x10); //SAU D9O GHI IA TRI NAY LA 0X10 TUONG UNG VOI 1HZ

          I2C_Stop();
          delay();
          while(1)
          {
          ktphim();
          readds();
          quetled();
          }
          }
          trong phần void main trước khi vào vòng lặp while (1) mình ghi giá trị vào thanh ghi control rồi đó.Bởi vậy trên proteus nó mới nháy mà.

          Comment


          • #6
            Bạn cắm bo mạch à, hay làm mạch in thế. Đo lại điện áp 2 đầu PIN đủ chưa ....

            Comment


            • #7
              pin mới cáu,áp pin len chân 3 vs gnd =3V lun .ban đầu mình làm mạch in,sau đó không chạy gỡ ra gắn vô test board ...........và bây giờ vẫn ko chạy hix

              Comment


              • #8
                Mình nghĩ chắc do mạch cứng của bạn thoai, mình làm nhiều cái đó roài chạy hết ko vấn đề j cả.
                Mình nghĩ nếu bạn cắm bo đúng thì cần ktra xem 8051 và DS có die ko.

                1. Bạn cắm 1 con LED chạy chương trình blink xem 8051 chạy đúng ko
                2. Nếu 8051 chạy đúng thì có lẽ DS của bạn die roài
                3. Cái PIN 3V dù mới nhưng nếu ko cẩn thận để chập 2 chân lại cái là xong luôn, nên cần ktra PIN kĩ chút

                Comment


                • #9
                  pin 3v mình mới test đủ dòng cho led chạy -->pin cấp dc.
                  8051 lập trình led sáng theo ý muốn rùi-->8051 ko chết.
                  ds1307 mới quăng vô kit AVR chạy ngon lành .---->ds1307 hok die

                  mình pó tay lun

                  Comment


                  • #10
                    bác sangstbk có kit hay chip, ds,đồ nghề ,rảnh rảnh tetst giùm e nha dc k khikhi

                    Comment


                    • #11
                      Hì, cái đó mình làm nhiều roài, có bao giờ bị sao đâu

                      Comment


                      • #12
                        sbit SDA =P3^7;
                        sbit SCL= P3^2;

                        void i2c_start(void)
                        {
                        SCL = 1; SCL = 0;
                        SDA = 1; SCL = 1;

                        SDA = 0;
                        SCL = 0;
                        }
                        void i2c_stop(void)
                        {
                        SCL = 1; SCL = 0;
                        SDA = 0;
                        SCL = 1;
                        SDA = 1;
                        }
                        void i2c_write(unsigned char d)
                        {
                        unsigned char i;

                        SCL = 0;
                        for (i = 1; i <= 8; i++)
                        {
                        SDA = (d >> 7);
                        SCL = 1;
                        d = d << 1;
                        SCL = 0;
                        }
                        SDA = 1;
                        SCL = 0;
                        SCL = 1;
                        SCL = 0;
                        }

                        unsigned char i2c_read(unsigned char b)
                        {
                        unsigned char d, i;

                        SDA = 1;
                        SCL = 0;
                        for (i = 1; i <= 8; i++)
                        {
                        SCL = 1;
                        d = d << 1;
                        d = d | (unsigned char)SDA;
                        SCL = 0;
                        }
                        SDA = b;

                        SCL = 0;
                        SCL = 1;
                        if(b == 1) SDA = 1;
                        SCL = 0;
                        SDA = 1;
                        return d;
                        }
                        void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out)
                        {
                        rs&=3;
                        if (sqwe) rs|=0x10;
                        if (out) rs|=0x80;
                        i2c_start();
                        i2c_write(0xd0);
                        i2c_write(7);
                        i2c_write(rs);
                        i2c_stop();
                        }

                        void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec)
                        {
                        i2c_start();
                        i2c_write(0xd0);
                        i2c_write(0);
                        i2c_start();
                        i2c_write(0xd1);
                        *sec=bcd2bin(i2c_read(0));
                        *min=bcd2bin(i2c_read(0));
                        *hour=bcd2bin(i2c_read(1));
                        i2c_stop();
                        }

                        void rtc_set_time(unsigned char hour,unsigned char min,unsigned char sec)
                        {
                        i2c_start();
                        i2c_write(0xd0);
                        i2c_write(0);
                        i2c_write(bin2bcd(sec));
                        i2c_write(bin2bcd(min));
                        i2c_write(bin2bcd(hour));
                        i2c_stop();
                        }

                        void rtc_get_date(unsigned char *date,unsigned char *month,unsigned char *year)
                        {
                        i2c_start();
                        i2c_write(0xD0);
                        i2c_write(4);
                        i2c_start();
                        i2c_write(0xD1);
                        *date=bcd2bin(i2c_read(0));
                        *month=bcd2bin(i2c_read(0));
                        *year=bcd2bin(i2c_read(1));
                        i2c_stop();
                        }

                        void rtc_set_date(unsigned char date,unsigned char month,unsigned char year)
                        {
                        i2c_start();
                        i2c_write(0xd0);
                        i2c_write(4);
                        i2c_write(bin2bcd(date));
                        i2c_write(bin2bcd(month));
                        i2c_write(bin2bcd(year));
                        i2c_stop();
                        }

                        Thử dùng tạm thư viện này xem, chạy rồi đó

                        Comment


                        • #13
                          cái hàm bin2bcd() khai báo ra sao vậy bác?

                          Comment


                          • #14
                            hix cao thủ ds1307 giúp e với triệu chứng là mô phỏng dc,chip k chết(blink led dc),3V nuôi đủ,ds1307 chạy dc trong kit avr. vậy mà mạch thật xung chân số 7 SQW của ds1307 ko chạy ,.Ai test giùm cách giải quyết giúp e với .hix
                            Last edited by binhminhdem; 18-06-2012, 21:48.

                            Comment


                            • #15
                              Nguyên văn bởi binhminhdem Xem bài viết
                              các Bác xem cai code e mô phỏng tren proteus chạy ngon mà sao khi e cắm bằng testboard để test chân 7 ds1307 mà nó ko nháy 1HZ.(scl sda kéo trở 4.7k vcc) e làm như hình vẽ ne cac bác
                              ai rảnh xem giúp e với chứ cái này e ngồi mò nguyên tối hôm qua mà ko biết sai o đâu nữa


                              code & hinh capture đây các bac xem giúp sửa dc là e đội ơn nhiều lắm [ATTACH]46875[/ATTACH][ATTACH=CONFIG]46874[/ATTACH]
                              void main()
                              {
                              I2C_Start();
                              I2C_Write(0xD0);
                              I2C_Write(0x07); //GOI DIA CHI THANH GHI CONTROL SQW.OUT
                              I2C_Write(0x10); //SAU D9O GHI IA TRI NAY LA 0X10 TUONG UNG VOI 1HZ
                              I2C_Stop();
                              delay();
                              while(1)
                              {
                              ktphim();
                              readds();
                              quetled();
                              }
                              }
                              chưa cấu hình bit CH=0(thanh ghi giây) làm sao nó chạy.
                              |

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X