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

  • #16
    Kaka e cảm ơn bác nhiều, nhiều lắm lun e chạy dc rồi nè.Mà bác cho e hỏi cái này nha,code e sửa như thế này
    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();

    I2C_Start();
    I2C_Write(0xD0);
    I2C_Write(0x00); //GOI DIA CHI THANH GHI giây
    I2C_Write(0x00); //ghi giá trị trong đó CH=0
    I2C_Stop();



    delay();
    while(1)
    {
    ktphim();
    readds();
    quetled();
    }
    }

    với đoạn code như trên thì sau khi mà có cúp điện rồi có điện trở lại thì 89c52 nhảy vô set cái giá trị thanh ghi giây này lại luôn trong đó là có giá trị giây của mình nữa,vậy với code trên làm sao mà e có thể chỉ set CH về 0 mà các bit giây vẫn chạy bình thường được ko bác,chứ ngồi mà chỉnh cái nút giây sau khi cúp điện thì mệt nữa,

    Comment


    • #17
      Nguyên văn bởi binhminhdem Xem bài viết
      Kaka e cảm ơn bác nhiều, nhiều lắm lun e chạy dc rồi nè.Mà bác cho e hỏi cái này nha,code e sửa như thế này
      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();

      I2C_Start();
      I2C_Write(0xD0);
      I2C_Write(0x00); //GOI DIA CHI THANH GHI giây
      I2C_Write(0x00); //ghi giá trị trong đó CH=0
      I2C_Stop();



      delay();
      while(1)
      {
      ktphim();
      readds();
      quetled();
      }
      }

      với đoạn code như trên thì sau khi mà có cúp điện rồi có điện trở lại thì 89c52 nhảy vô set cái giá trị thanh ghi giây này lại luôn trong đó là có giá trị giây của mình nữa,vậy với code trên làm sao mà e có thể chỉ set CH về 0 mà các bit giây vẫn chạy bình thường được ko bác,chứ ngồi mà chỉnh cái nút giây sau khi cúp điện thì mệt nữa,
      mình nghĩ là bạn nên đọc giá trị giây
      sau đó kiểm tra bit cao nhất xem có bằng 1 không
      nếu =1 thì ghi giá trị 0 vào,
      giay=//đọc giá trị từ 1307
      if(giay&0x80)//nếu chưa khởi tạo
      {
      giay&=0x7f;
      //ghi giá trị giây ngược trở lại 1307
      }

      Comment


      • #18
        @Sangstbk:
        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;
        }
        theo mình thì start là sda nhảy từ cao xuống thấp trong khi scl ở mức cao
        vậy tại sao trong start bạn lại cần scl=1; scl=0; rồi mới sda=1;scl=1; sda=0; scl=0;
        tương tự stop là sda nhảy từ thấp lên cao trong khi scl ở mức cao
        vậy sao lại cần scl=1; scl=0;
        mong bạn giải thích giúp mình

        Comment


        • #19
          uhm ko để ý hình như code của bác Sangstbk có vấn đề nhỉ ,start hay stop I2C thì theo mình xem tài liệu cũng phải set1 và set0 song song 2 cái SCL và SdA xen kẽ nhau mà ,còn cái code đó làm 1 mạch lun

          Comment


          • #20
            E nghĩ vô main mình cứ làm :

            Readds(giay);
            giay&=0x7f ;
            writeds (gia tri giay này);
            xong vô while(1),............

            khỏi tốn thêm tg xét xem bit CH có là 0 hay ko .Bác thấy hợp lý k.

            Comment


            • #21
              Nguyên văn bởi binhminhdem Xem bài viết
              E nghĩ vô main mình cứ làm :

              Readds(giay);
              giay&=0x7f ;
              writeds (gia tri giay này);
              xong vô while(1),............

              khỏi tốn thêm tg xét xem bit CH có là 0 hay ko .Bác thấy hợp lý k.
              mình không hiểu sao bạn lại nghĩ thế nữa
              1 lệnh so sánh lại tốn thời gian hơn việc lần nào cũng phải ghi vào con ds sao
              thân

              Comment


              • #22
                e chỉ nghĩ cái nào nhanh cho mình mà làm ak ,ko nghĩ là nhanh cho nó. bác thông cảm

                Comment


                • #23
                  trời
                  chỉ là thảo luận thôi mà bạn
                  có thể là đúng hay sai
                  đâu cần phải thông cảm hay gì gì chứ

                  mình cũng chỉ nêu ý kiến thôi mà, chắc gì đã là đúng

                  Comment


                  • #24
                    Code:
                    #include <regx51.h>
                    #define uchar unsigned char
                    #define pled1 P2_7
                    #define pled2 P2_6
                    #define pled3 P2_4
                    #define pled4 P2_3
                    #define sda P2_1
                    #define scl P2_0
                    #define dled P0
                    #define dsw 0xd0
                    #define dsr 0xd1
                    uchar maled[10]={0x81,0xb7,0xc2,0x92,0xb4,0x98,0x88,0xb3,0x80,0x90};
                    uchar gio, phut, giay,dem,tmp;
                    void init();
                    void start();
                    void stop();
                    uchar write(uchar u);
                    uchar read(uchar ack);
                    void delay(void);
                    //===================================================
                    //===================================================
                    void main(void)
                    {
                    	init();
                    	dem=1;//ban dau cho sang led 1
                    	//kiem tra thanh ghi giay
                    	start();
                    	write(dsw);
                    	write(0);
                    	stop();
                    	start();
                    	write(dsr);
                    	giay=read(0);
                    	if(giay&0x80)
                    	{
                    		stop();
                    		start();
                    		write(dsw);
                    		write(0);
                    		write(0);
                    		stop();
                    	}
                    	stop();
                    	//kiem tra he thong 24 h
                    	start();
                    	write(dsw);
                    	write(2);
                    	stop();
                    	start();
                    	write(dsr);
                    	gio=read(0);
                    	if(gio&0x40)
                    	{
                    		stop();
                    		write(dsw);
                    		write(2);
                    		write(gio&0xbf);
                    		
                    	}
                    	stop();
                    	//dau tien ta chinh luon gio di co khi hay hon
                    	//tmp=2<<4+2;
                    	//cho phut bang 58 luon khoi phai cho
                    	start();
                    	tmp=(2<<4)|2;
                    	write(dsw);
                    	write(2);
                    	write(tmp);
                    	stop();
                    	start();
                    	tmp=(4<<4)|0;
                    	write(dsw);
                    	write(1);
                    	write(tmp);
                    	stop();
                    	while(1)
                    	{
                    		start();
                    		write(dsw);
                    		write(1);
                    		stop();
                    		start();
                    		write(dsr);
                    		phut=read(0);
                    		stop();
                    		start();
                    		write(dsw);
                    		write(2);
                    		stop();
                    		start();
                    		write(dsr);
                    		gio=read(0);
                    		stop();
                    		switch(dem)
                    		{
                    			case 1://hang chuc phut
                    				pled1=pled2=pled3=pled4=0;
                    				pled1=1;
                    				dled=maled[gio>>4];
                    				break;
                    			case 2:
                    				pled1=pled2=pled3=pled4=0;
                    				pled2=1;
                    				dled=maled[gio&0xf];
                    				break;
                    			case 3:
                    				pled1=pled2=pled3=pled4=0;
                    				pled3=1;
                    				dled=maled[phut>>4];
                    				break;
                    			case 4:
                    				pled1=pled2=pled3=pled4=0;
                    				pled4=1;
                    				dled=maled[phut&0xf];
                    				break;
                    		}
                    		++dem;
                    		if(dem==5)
                    			dem=1;
                    		//bat dau xu ly quet led de hien thi 2 so xem sao
                    
                    	}
                    			 	
                    }
                    //===================================================
                    void init(void)
                    {
                    	sda=scl=1;
                    	pled1=pled2=pled3=pled4=0;
                    	//tat tat ca cac led
                    }
                    void delay(void)
                    {
                    	uchar i;
                    	for(i=0;i<2;++i)
                    		;
                    }
                    void start()
                    {
                    	//dieu kien start la nhay tu cao xuong thap cua sda trong khi scl =1
                    	sda=1;
                    	scl=1;
                    	delay();
                    	sda=0;
                    	delay();
                    	scl=0;
                    	delay();
                    }
                    void stop(void)
                    {
                    	sda=0;
                    	scl=0;
                    	delay();
                    	scl=1;
                    	delay();
                    	sda=1;
                    	delay();
                    
                    }
                    uchar write(uchar u)
                    {
                    	uchar ret,i;
                    	for(i=0;i<8;++i)
                    	{
                    		sda=0;
                    		if(u&0x80)	
                    			sda=1;
                    		u<<=1;
                    		delay();
                    		scl=1;
                    		delay();
                    		scl=0;
                    		delay();
                    	}
                    	//kiem tra xung thu 9
                    	sda=1;
                    	scl=1;
                    	delay();
                    	if(!sda)
                    		ret=1;
                    	else
                    		ret=0;
                    	scl=0;
                    	delay();
                    	//sda=0;
                    	delay();
                    	return ret;
                    }
                    uchar read(uchar ack)
                    {
                    	uchar i,ret;
                    	for(i=0;i<8;++i)
                    	{
                    		scl=1;
                    		delay();
                    		ret<<=1;
                    		ret|=sda;
                    		scl=0;
                    		delay();
                    	}
                    	//kiem tra xung thu 9 xem sao
                    	sda=1;
                    	if(ack)
                    		sda=0;
                    	scl=1;
                    	delay();
                    	scl=0;
                    	delay();
                    	return ret;
                    }
                    bạn nào giải thích hộ mình tại sao không đọc liên tiếp các byte được
                    kiểu như giay=read(1);
                    phut=read(1);
                    gio=read(0);
                    mà mình cứ phải đọc 1 byte xong lại phải stop, start rồi ghi địa chỉ byte tiếp vào mới đọc được
                    mình đoán code có lỗi nhưng tìm mãi không ra

                    Comment


                    • #25
                      Theo mình giao tiếp I2C không cho ta đọc liên tiếp byte dc ,đọc trên Đồng hồ thời gian thực DS1307 (chế độ dataread)
                      ghi là

                      " Trong chế độ Data Read, bit R (1) được gởi kèm sau 7 bit SLA. Sau đó là liên tiếp các byte dữ liệu được truyền từ DS1307 đến AVR. Điểm khác biệt trong các bố trí dữ liệu của chế độ này so với chế độ Data Write là không có byte địa chỉ thanh ghi dữ liệu được gởi đến. Tất cả các bytes theo sau SLA+R đều là dữ liệu đọc từ bộ nhớ của DS1307. Vậy thì dữ liệu được đọc bắt đầu từ thanh nào? Câu trả lời đó là thanh ghi được chỉ định bởi con trỏ địa chỉ, giá trị này được lưu lại trong các lần thao tác trước đo. Như vậy, muốn đọc chính xác dữ liệu từ một địa nào đó, chúng ta cần thực hiện quá trình ghi giá trị cho con trỏ địa chỉ trước. Để ghi giá trị vào con trỏ địa chỉ chúng ta sẽ gọi chương trình Data Write với chỉ 1 byte được ghi sau SLA+W như phần chú ý ở trên."

                      vậy là trước khi đọc nó phải lôi giá trị địa chỉ dc lưu trong lần ghi trước ,giá trị này hình như mỗi lần lưu chỉ dc 1 giá trị thôi ,bởi vậy theo em đọc liên liếp giá trị giờ phút giây ngày tháng năm ko thể đọc liên tục được.

                      có ghi thì nó có thể ghi liên tục được

                      "Do chế độ này là Data Write nên bit W (0) sẽ được gởi kèm sau SLA. Bit ACK (A) được DS1307 trả về cho Master sau mỗi quá trình giao tiếp. Tiếp theo sau địa chỉ SLA sẽ là 1 byte chứa địa chỉ của thanh ghi cần truy cập (tạm gọi là Addr_Reg). Cần phân biệt địa chỉ thanh ghi cần truy cập và địa chỉ SLA. Như tôi đã đề cập trên, địa chỉ của thanh ghi cần tuy cập sẽ được lưu trong thanh ghi địa chỉ (hay con trỏ địa chỉ), vì vậy byte dữ liệu đầu tiên sẽ được chứa trong thanh ghi địa chỉ của DS1307. Sau byte địa chỉ thanh ghi là một dãy các byte dữ liệu được ghi vào bộ nhớ của DS1307. Byte dữ liệu đầu tiên sẽ được ghi vào thanh ghi có địa chỉ được chỉ định bởi Addr_Reg, sau khi ghi 1 byte, Addr_Reg được tự động tăng nên các byte tiếp theo sẽ được ghi liên tiếp vào các thanh ghi kế sau. Số lượng bytes dữ liệu cần ghi do Master quyết định và không được vượt quá dung lương bộ nhớ của DS1307."

                      trên trang Đồng hồ thời gian thực DS1307 có cái hình nhìn rõ hơn.
                      Last edited by binhminhdem; 19-06-2012, 16:11.

                      Comment


                      • #26
                        Các bạn cho tui mạo muội hỏi chút xíu nhé. Tui mới đăng kí lên còn chưa biết gì, cho tui hỏi là tui đang có dự định làm một chiếc đồng hồ số bằng 8952 với DS1307 và đã gắn pin 3V như trên kia nói, nhưng cái lúc mô phỏng thì đồng hồ chạy chính xác với giờ máy tính luôn khác với những cái mạch đồng hồ mà tui đã từng nghiên cứu qua là cứ mô phỏng rồi nó hiện là 00:00:01 sau đó mình dùng nút bấm chỉnh dần cho đúng giờ. Vậy tui sợ là cái mạch có DS1307 kia nó chạy theo giờ máy tính lắm. Các bạn chỉ cho tui biết với. Mạch đây:
                        Click image for larger version

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

                        Comment


                        • #27
                          Nguyên văn bởi caovanviet Xem bài viết
                          Các bạn cho tui mạo muội hỏi chút xíu nhé. Tui mới đăng kí lên còn chưa biết gì, cho tui hỏi là tui đang có dự định làm một chiếc đồng hồ số bằng 8952 với DS1307 và đã gắn pin 3V như trên kia nói, nhưng cái lúc mô phỏng thì đồng hồ chạy chính xác với giờ máy tính luôn khác với những cái mạch đồng hồ mà tui đã từng nghiên cứu qua là cứ mô phỏng rồi nó hiện là 00:00:01 sau đó mình dùng nút bấm chỉnh dần cho đúng giờ. Vậy tui sợ là cái mạch có DS1307 kia nó chạy theo giờ máy tính lắm. Các bạn chỉ cho tui biết với. Mạch đây:
                          [ATTACH=CONFIG]47004[/ATTACH]
                          con DS1307 mà chạy đúng với máy tính là chính xác đấy. giờ kiểm tra coi có chỉnh giờ được hay không là Ok.

                          Comment


                          • #28
                            Thế bạn ơi! Cho tui hỏi, cách add chân của con LED 7 đoạn đôi chung Anode trong Proteus thế nào vậy? Hôm qua tui mua về thấy nó có 10 chân (giống LED 7 đoạn đơn) nhưng lại sáng được cả 2 LED . Vậy mong các bạn chỉ mình cách add chân của LED 7 đoạn đôi trong Proteus để mình xuất sang ARES (layout) với?

                            Comment


                            • #29
                              Nguyên văn bởi kidteam Xem bài viết
                              Code:
                              #include <regx51.h>
                              #define uchar unsigned char
                              #define pled1 P2_7
                              #define pled2 P2_6
                              #define pled3 P2_4
                              #define pled4 P2_3
                              #define sda P2_1
                              #define scl P2_0
                              #define dled P0
                              #define dsw 0xd0
                              #define dsr 0xd1
                              uchar maled[10]={0x81,0xb7,0xc2,0x92,0xb4,0x98,0x88,0xb3,0x80,0x90};
                              uchar gio, phut, giay,dem,tmp;
                              void init();
                              void start();
                              void stop();
                              uchar write(uchar u);
                              uchar read(uchar ack);
                              void delay(void);
                              //===================================================
                              //===================================================
                              void main(void)
                              {
                              	init();
                              	dem=1;//ban dau cho sang led 1
                              	//kiem tra thanh ghi giay
                              	start();
                              	write(dsw);
                              	write(0);
                              	stop();
                              	start();
                              	write(dsr);
                              	giay=read(0);
                              	if(giay&0x80)
                              	{
                              		stop();
                              		start();
                              		write(dsw);
                              		write(0);
                              		write(0);
                              		stop();
                              	}
                              	stop();
                              	//kiem tra he thong 24 h
                              	start();
                              	write(dsw);
                              	write(2);
                              	stop();
                              	start();
                              	write(dsr);
                              	gio=read(0);
                              	if(gio&0x40)
                              	{
                              		stop();
                              		write(dsw);
                              		write(2);
                              		write(gio&0xbf);
                              		
                              	}
                              	stop();
                              	//dau tien ta chinh luon gio di co khi hay hon
                              	//tmp=2<<4+2;
                              	//cho phut bang 58 luon khoi phai cho
                              	start();
                              	tmp=(2<<4)|2;
                              	write(dsw);
                              	write(2);
                              	write(tmp);
                              	stop();
                              	start();
                              	tmp=(4<<4)|0;
                              	write(dsw);
                              	write(1);
                              	write(tmp);
                              	stop();
                              	while(1)
                              	{
                              		start();
                              		write(dsw);
                              		write(1);
                              		stop();
                              		start();
                              		write(dsr);
                              		phut=read(0);
                              		stop();
                              		start();
                              		write(dsw);
                              		write(2);
                              		stop();
                              		start();
                              		write(dsr);
                              		gio=read(0);
                              		stop();
                              		switch(dem)
                              		{
                              			case 1://hang chuc phut
                              				pled1=pled2=pled3=pled4=0;
                              				pled1=1;
                              				dled=maled[gio>>4];
                              				break;
                              			case 2:
                              				pled1=pled2=pled3=pled4=0;
                              				pled2=1;
                              				dled=maled[gio&0xf];
                              				break;
                              			case 3:
                              				pled1=pled2=pled3=pled4=0;
                              				pled3=1;
                              				dled=maled[phut>>4];
                              				break;
                              			case 4:
                              				pled1=pled2=pled3=pled4=0;
                              				pled4=1;
                              				dled=maled[phut&0xf];
                              				break;
                              		}
                              		++dem;
                              		if(dem==5)
                              			dem=1;
                              		//bat dau xu ly quet led de hien thi 2 so xem sao
                              
                              	}
                              			 	
                              }
                              //===================================================
                              void init(void)
                              {
                              	sda=scl=1;
                              	pled1=pled2=pled3=pled4=0;
                              	//tat tat ca cac led
                              }
                              void delay(void)
                              {
                              	uchar i;
                              	for(i=0;i<2;++i)
                              		;
                              }
                              void start()
                              {
                              	//dieu kien start la nhay tu cao xuong thap cua sda trong khi scl =1
                              	sda=1;
                              	scl=1;
                              	delay();
                              	sda=0;
                              	delay();
                              	scl=0;
                              	delay();
                              }
                              void stop(void)
                              {
                              	sda=0;
                              	scl=0;
                              	delay();
                              	scl=1;
                              	delay();
                              	sda=1;
                              	delay();
                              
                              }
                              uchar write(uchar u)
                              {
                              	uchar ret,i;
                              	for(i=0;i<8;++i)
                              	{
                              		sda=0;
                              		if(u&0x80)	
                              			sda=1;
                              		u<<=1;
                              		delay();
                              		scl=1;
                              		delay();
                              		scl=0;
                              		delay();
                              	}
                              	//kiem tra xung thu 9
                              	sda=1;
                              	scl=1;
                              	delay();
                              	if(!sda)
                              		ret=1;
                              	else
                              		ret=0;
                              	scl=0;
                              	delay();
                              	//sda=0;
                              	delay();
                              	return ret;
                              }
                              uchar read(uchar ack)
                              {
                              	uchar i,ret;
                              	for(i=0;i<8;++i)
                              	{
                              		scl=1;
                              		delay();
                              		ret<<=1;
                              		ret|=sda;
                              		scl=0;
                              		delay();
                              	}
                              	//kiem tra xung thu 9 xem sao
                              	sda=1;
                              	if(ack)
                              		sda=0;
                              	scl=1;
                              	delay();
                              	scl=0;
                              	delay();
                              	return ret;
                              }
                              bạn nào giải thích hộ mình tại sao không đọc liên tiếp các byte được
                              kiểu như giay=read(1);
                              phut=read(1);
                              gio=read(0);
                              mà mình cứ phải đọc 1 byte xong lại phải stop, start rồi ghi địa chỉ byte tiếp vào mới đọc được
                              mình đoán code có lỗi nhưng tìm mãi không ra
                              sao không có ai trả lời giúp mình với

                              Comment


                              • #30
                                Ủa mình tr lời như vầy ko đúng hả bác kidteam
                                Theo mình giao tiếp I2C không cho ta đọc liên tiếp byte dc ,đọc trên Đồng hồ thời gian thực DS1307 (chế độ dataread)
                                ghi là

                                " Trong chế độ Data Read, bit R (1) được gởi kèm sau 7 bit SLA. Sau đó là liên tiếp các byte dữ liệu được truyền từ DS1307 đến AVR. Điểm khác biệt trong các bố trí dữ liệu của chế độ này so với chế độ Data Write là không có byte địa chỉ thanh ghi dữ liệu được gởi đến. Tất cả các bytes theo sau SLA+R đều là dữ liệu đọc từ bộ nhớ của DS1307. Vậy thì dữ liệu được đọc bắt đầu từ thanh nào? Câu trả lời đó là thanh ghi được chỉ định bởi con trỏ địa chỉ, giá trị này được lưu lại trong các lần thao tác trước đo. Như vậy, muốn đọc chính xác dữ liệu từ một địa nào đó, chúng ta cần thực hiện quá trình ghi giá trị cho con trỏ địa chỉ trước. Để ghi giá trị vào con trỏ địa chỉ chúng ta sẽ gọi chương trình Data Write với chỉ 1 byte được ghi sau SLA+W như phần chú ý ở trên."

                                vậy là trước khi đọc nó phải lôi giá trị địa chỉ dc lưu trong lần ghi trước ,giá trị này hình như mỗi lần lưu chỉ dc 1 giá trị thôi ,bởi vậy theo em đọc liên liếp giá trị giờ phút giây ngày tháng năm ko thể đọc liên tục được.

                                có ghi thì nó có thể ghi liên tục được

                                "Do chế độ này là Data Write nên bit W (0) sẽ được gởi kèm sau SLA. Bit ACK (A) được DS1307 trả về cho Master sau mỗi quá trình giao tiếp. Tiếp theo sau địa chỉ SLA sẽ là 1 byte chứa địa chỉ của thanh ghi cần truy cập (tạm gọi là Addr_Reg). Cần phân biệt địa chỉ thanh ghi cần truy cập và địa chỉ SLA. Như tôi đã đề cập trên, địa chỉ của thanh ghi cần tuy cập sẽ được lưu trong thanh ghi địa chỉ (hay con trỏ địa chỉ), vì vậy byte dữ liệu đầu tiên sẽ được chứa trong thanh ghi địa chỉ của DS1307. Sau byte địa chỉ thanh ghi là một dãy các byte dữ liệu được ghi vào bộ nhớ của DS1307. Byte dữ liệu đầu tiên sẽ được ghi vào thanh ghi có địa chỉ được chỉ định bởi Addr_Reg, sau khi ghi 1 byte, Addr_Reg được tự động tăng nên các byte tiếp theo sẽ được ghi liên tiếp vào các thanh ghi kế sau. Số lượng bytes dữ liệu cần ghi do Master quyết định và không được vượt quá dung lương bộ nhớ của DS1307."

                                trên trang Đồng hồ thời gian thực DS1307 có cái hình nhìn rõ hơn.

                                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