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

                    Đang tải...
                    X