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

  • #31
    không đúng, sau mỗi lệnh đọc thì thanh ghi chỉ vị trí dữ liệu tự động tăng thêm 1
    mình thấy người ta đọc liên tiếp mà
    mình nghĩ code của mình bị lỗi chỗ nào đó
    nhưng chưa tìm ra bạn ạ
    vi dụ code sau
    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();
    }
    bạn xem có 3 lệnh đọc liên tiếp đó

    Comment


    • #32
      Ai giúp tui add chân của LED 7 thanh đôi trong Proteus để tui chuyển sang Layout với?

      Comment


      • #33
        @caovanviet xai orcad đi proteus mình chịu
        các bác cho e hỏi sửa xong code chạy dc trên proteus ,cho chạy xuất tín hiệu 1HZ dc rồi(==>giao tiếp dc với Ds 1307 ) mà cắm thử trên test board chọn tín hiệu giây thôi xuất ko dc gì cả.theo mình nghĩ thì khi chạy lần đầu tiên thì tín hiệu giây có thể ko chính xác có thể sai chạy bậy bạ số nào đó chứ làm gì mà có việc ko xuất dc số nào cả ,chắc code có vấn đề,các bác xem giúp e với
        DONG HO SO .zip

        Comment


        • #34
          ẹc mình xóa code kiểm tra nút nhấn,cho chạy hiển thị gio phut giay bt dc rồi ,hix vậy là sai cái code phần kiem tra nút chỉnh giờ .

          Comment


          • #35
            Các bạn cho hỏi là cái mạch này của tui có cần phải có tran kích dòng không? Nếu có thì có phải viết lại bài lập trình không?Click image for larger version

Name:	untitled.PNG
Views:	2
Size:	103.6 KB
ID:	1363118

            Comment


            • #36
              Cái đồng hồ e mới làm nek các bác
              8 tấcx 3 tấc rưỡi Click image for larger version

Name:	IMG1117A.jpg
Views:	1
Size:	69.6 KB
ID:	1363141
              Click image for larger version

Name:	IMG1119A.jpg
Views:	1
Size:	81.0 KB
ID:	1363142
              còn chạy matrix 8x 64 phía dưới nữa mà mò chưa ra.ai có code C dịch matrix bằng 595 cho e tham khảo với
              Attached Files

              Comment


              • #37
                bà con ơi
                ai pro jups mình với
                mình muốn làm một mạch khóa bằng số mà ko biết cách lập trình
                bà con nào biết jups mình zới
                lập trình khóa khoảng 9 số

                Comment


                • #38
                  Nguyên văn bởi binhminhdem Xem bài viết
                  bác sangstbk có kit hay chip, ds,đồ nghề ,rảnh rảnh tetst giùm e nha dc k khikhi
                  Thanks!

                  Code c keil 89c52, clock+ds1307

                  #include <REGX52.H>
                  #define hienthi P0
                  sbit set=P3^5;
                  sbit up=P3^6;
                  sbit down=P3^7;

                  sbit SCL = P2^0; //DS1307
                  sbit SDA = P2^1; //DS1307

                  #define led1 P1_5
                  #define led2 P1_4
                  #define led3 P1_3
                  #define led4 P1_0
                  #define led5 P1_1
                  #define led6 P1_2

                  bit set0=1,set1=1,up1=1,up0=1,down0=1,down1=1;

                  unsigned char hour, minute, second,c;
                  //catote chung A=MSB {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6 }
                  //anode chung A=MSB {0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09 }
                  //unsigned char ma[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x0 9};
                  unsigned char ma[]= {0xC0,0xFA,0xA4,0xB0,0x9A,0x91,0x81,0xF8,0x80,0x90 ,0x88,0x83,0xC5,0xA2,0x85,0x8D};
                  unsigned char kt=0,a=0,i,k,x=0;

                  void delay1(unsigned int ms)
                  {
                  unsigned int i;
                  unsigned char j;
                  for(i=0;i<ms;i++)
                  for(j=0;j<120;j++)
                  {}
                  }

                  void display (unsigned char a,b,c,d,e,f)
                  {
                  P0=ma[a];led1=0;delay1(3); P1=0xff;
                  P0=ma[b];led2=0;delay1(3); P1=0xff;
                  P0=ma[c];led3=0;delay1(3); P1=0xff;
                  P0=ma[d];led4=0;delay1(3); P1=0xff;
                  P0=ma[e];led5=0;delay1(3); P1=0xff;
                  P0=ma[f];led6=0;delay1(3); P1=0xff;
                  }

                  //---------------------------------
                  void delay()//DELAY CHO SET SCL
                  {
                  unsigned char i;
                  for (i = 0; i < 4; i++){};
                  }
                  //------------------------------
                  void SCL_high()
                  {
                  SCL = 1;
                  delay();
                  }
                  //------------------------------------------
                  void SCL_low()
                  {
                  SCL = 0;
                  delay();
                  }
                  //-------------------------------------------
                  void I2C_Start()
                  {
                  SDA = 1;
                  SCL = 1;
                  delay();delay();
                  SDA=0;
                  delay();delay();
                  SCL=0;
                  }
                  //--------------------------------------------
                  void I2C_Stop()
                  {
                  SDA=0;
                  SCL=0;
                  delay();delay();
                  SCL=1;
                  delay();delay();
                  SDA=1;
                  }
                  //----------------------------------------------
                  bit I2C_Write(unsigned char dat)
                  {
                  unsigned char i;
                  bit outbit;
                  for (i = 1; i <= 8; i++)
                  {
                  outbit=dat&0x80;
                  SDA = outbit;
                  dat = dat << 1;
                  SCL_high();
                  SCL_low();
                  }

                  SDA = 1;
                  SCL_high();
                  outbit = SDA;
                  SCL_low();
                  return(outbit);
                  }
                  //----------------------------------------------------
                  unsigned char I2C_Read(bit ack)
                  {
                  unsigned char i, dat;
                  bit inbit;
                  dat = 0;
                  for(i=1;i<=8;i++)
                  {
                  SCL_high();
                  inbit = SDA;
                  dat = dat << 1;
                  dat = dat | inbit;
                  SCL_low();
                  }
                  if (ack) SDA = 0;
                  else SDA = 1;
                  SCL_high();
                  SCL = 0;
                  SDA = 1;
                  delay();
                  return(dat);
                  }
                  //-------------------------------------------------------------
                  void rtc_write(unsigned char add, unsigned char dat)
                  {
                  I2C_Start();
                  I2C_Write(0xd0);
                  I2C_Write(add);
                  I2C_Write(((dat/10)<<4)|(dat%10));
                  I2C_Stop();
                  }
                  //------------------------------
                  unsigned char rtc_read(unsigned char add)
                  {
                  unsigned char dat;
                  I2C_Start();
                  I2C_Write(0xd0);
                  I2C_Write(add);
                  I2C_Start();
                  I2C_Write(0xd1);
                  dat = I2C_Read(0);
                  I2C_Stop();
                  dat = (dat & 0x0f) + (dat>>4)*10;
                  return (dat);
                  }
                  //------------------
                  void writeds()
                  {
                  rtc_write(0x00, second);
                  rtc_write(0x01, minute);
                  rtc_write(0x02, hour);
                  }

                  void ktphim()
                  {
                  set0=set1;set1=set;

                  if((set0==1)&&(set1==0))
                  {
                  kt++;
                  if(kt>3)kt=0;
                  }

                  switch(kt)
                  {
                  case 0:break;
                  case 1:
                  {
                  up0=up1;up1=up; a=1;
                  if((up0==1)&&(up1==0))
                  {
                  hour++;
                  if(hour>23)hour=0;
                  }
                  down0=down1;down1=down;
                  if((down0==1)&&(down1==0))
                  {
                  hour--;
                  if(hour==-1)
                  hour=23;
                  }
                  break;
                  }


                  case 2:
                  {
                  up0=up1;up1=up; a=1;
                  if((up0==1)&&(up1==0))
                  {
                  minute++;
                  if(minute>59)
                  minute=0;
                  }
                  down0=down1;down1=down;
                  if((down0==1)&&(down1==0))
                  {
                  minute--;
                  if(minute==-1)
                  minute=59;
                  }
                  break;
                  }

                  case 3:
                  {
                  up0=up1;up1=up;a=1;
                  if((up0==1)&&(up1==0))
                  {
                  second++;
                  if(second>59)
                  second++;
                  }
                  down0=down1;down1=down;
                  if((down0==1)&&(down1==0))
                  {
                  second=0;
                  }
                  break;
                  }
                  }
                  }

                  void readds()
                  {
                  if(kt==0)
                  {
                  if(a==1){writeds();a=0;}
                  second = rtc_read(0x00);
                  minute = rtc_read(0x01);
                  hour = rtc_read(0x02);
                  }
                  }

                  void quetled()
                  {
                  if(kt==0){display (hour/10,hour%10,minute/10,minute%10,second/10,second%10);}
                  if(kt==1){display (hour/10,hour%10,minute/10,minute%10,second/10,second%10);}
                  if(kt==2){display (hour/10,hour%10,minute/10,minute%10,second/10,second%10);}
                  if(kt==3){display (hour/10,hour%10,minute/10,minute%10,second/10,second%10);}
                  }



                  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();
                  }
                  }

                  Comment


                  • #39
                    hai za. em cũng thế nè.
                    lắp trên boardet test thì nó chả có hiện tượng j hết

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    • mèomướp
                      Trả lời cho Công thức điện tử
                      bởi mèomướp
                      Dạ thời thế giờ thay đổi theo hướng tích cực hơn rồi chú trung sĩ ạ. Kiến thức được chia sẻ ngày càng nhìu nên làm ăn gian dối ko còn dễ dàng như trước đâu ạ. Những thợ nhỏ rồi sẽ thành công nhân sản xuất đồ mới hết thay vì sửa chữa lặt vặt...
                      Hôm qua, 21:21
                    • mèomướp
                      Trả lời cho Xin hỏi về màn hình laptop
                      bởi mèomướp
                      Dạ cùng chuẩn tín hiệu thì chắc chắn là nhận ạ. Vì bản chất oled hay lcd thì đều phải có mạch chuyển đổi trên thanh gỗ rồi chuyển sang những chip xử lý hàng nghìn chân gắn trên những tab mỏng dính rồi mới ra các điểm ảnh theo hàng...
                      Hôm qua, 20:31
                    • yname11
                      Trả lời cho Xin hỏi về màn hình laptop
                      bởi yname11
                      Ok , thanks bác đã chỉ...
                      Hôm qua, 15:06
                    • nguyendinhvan
                      Công thức điện tử
                      bởi nguyendinhvan
                      Sau bao năm nghiên cứu cái dtvn. Tôi phát hiện công thức này. Các anh em xem đúng bao nhiêu phần trăm nhé !

                      Chập thì thay. Cháy thì tháo
                      Làm thì láo. Báo thì hay
                      May thì khoe. Rủi thì bỏ
                      Thành tích nhỏ. Báo thành to
                      Làm cho có. Báo chi li
                      Sai cả li. Báo
                      ...
                      Hôm qua, 00:35
                    • yname11
                      Trả lời cho Xin hỏi về màn hình laptop
                      bởi yname11
                      có chắc ko b, màn lcd phải có cao áp mới sáng, màn led thì ko có, ko có cáp chuyển đổi thì lắp thế nào đc ??...
                      25-11-2024, 22:31
                    • mèomướp
                      Trả lời cho Xin hỏi về màn hình laptop
                      bởi mèomướp
                      Dạ ý chú là màn oled ấy ạ. Cùng chuẩn lvds cùng độ phân giải thì cắm được ạ. Còn nó mà khác thì hơi khó vì oled các điểm ảnh nó tự phát sáng chứ ko dùng đèn nền như lcd. Cháu chỉ biết đến vậy thôi ạ. Chú muốn nghịch phải tự tìm hiểu kỹ trước khi mua thôi, khó mà ông thợ nào tư vấn vụ này...
                      25-11-2024, 22:14
                    • bactho
                      Trả lời cho Tự làm máy đo Cuộn cảm
                      bởi bactho
                      Hay đấy bạn ạ. Đây có thể hiểu là máy đo cuộn dây. Tiện đây xin cho hỏi bạn có hiểu rõ về máy nạp rôm pcb 45 của hãng thiên minh không giúp mình cách cài fw của nó với vì mình vừa được anh bạn cho nhưng lại không biết cài fw nên chưa dùng được. Nếu có thể thì bạn giúp mình với...
                      25-11-2024, 21:48
                    • yname11
                      Trả lời cho Xin hỏi về màn hình laptop
                      bởi yname11
                      màn của mình là LCD , giờ m muốn mua màn LED để thay thế (ko muốn dùng màn LCD nữa) , lên muốn hỏi xem có cáp chuyển đổi nào có thể cắm đc màn LED vào ko , tất nhiên phải có cùng số chân pin với màn cũ rồi . VD: màn cũ là lcd mỏng , 40 pin...
                      25-11-2024, 21:43
                    • bactho
                      Trả lời cho các bạn giúp mình về file HEX với!!!
                      bởi bactho
                      Bạn vào trang phuclanshop.com ,tìm đến góc kỹ thuật. Tác giả vương khánh hưng nói rất rõ về điều bạn tìm...
                      25-11-2024, 21:21
                    • mèomướp
                      Trả lời cho Xin hỏi về màn hình laptop
                      bởi mèomướp
                      Dạ màn hình lcd đều có thể lai cấy cho nhau được hết ạ. Các loại cáp, bo mạch chuyển đổi lvds rất nhìu, với dòng sony còn phải nhổ cả chip nhớ của main cũ đưa lên gỗ thì mới lắp sang máy khác đc, chưa kể các bệnh về màu... ngay cả...
                      25-11-2024, 20:43
                    Đang tải...
                    X