Thông báo

Collapse
No announcement yet.

giải thích rùm mình đoạn chương trình con này :(

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

  • giải thích rùm mình đoạn chương trình con này :(

    Đây là 1 đoạn code chương trình con trong code đồng hồ thời gian thực :

    void IRS_1000ms interrupt 1 //hàm ngắt timer 0 :tạo xung 1ms
    {
    TF0=0;
    TH0=0xe5;
    TL0=0xF8;
    TR0=1;
    millisec++;
    millisec2++;
    if(millisec==0xFFFD)
    millisec=0;
    if(millisec%1000=0)
    Led=~led; // led nhấp nháy
    Mình cần giải thích chỗ
    TH0=0xe5;
    TL0=0xF8;
    ....
    if(millisec==0xFFFD)
    millisec=0;
    Mình không hiểu lắm về mấy mã hexa kia .

    /****************
    toàn bộ code của nó đây :
    Code:
    */
    #include <REGX52.H>
    #define Menu        P3_0   //phim menu de chon che do chinh thoi gian
    #define Next		P3_1   //phim next de tang thoi gian
    #define Back        P3_2   //phim back de giam thoi gian
    #define Timer_Date  P3_3   //phim de chuyen che do hien thi
    #define SCL         P3_5
    #define SDA         P3_6
    #define LedCPU      P0_0
    
    #define OffLed   	{P1=0x00,P2=0xFF;}
    
    //dinh nghia dia chi cac thanh ghi trong DS1307
    #define SEC    		0x00
    #define MIN    		0x01
    #define HOUR   		0x02
    #define DATE   		0x03
    #define DAY   		0x04
    #define MONTH  		0x05
    #define YEAR   		0x06
    
    //cac ham dung cho DS1307
    void I2C_Start();	   //khoi dong cho DS1307
    void I2C_stop();	   
    unsigned char I2C_write(unsigned char dat);	   //ham ghi 1 byte du kieu vao DS1307
    unsigned char I2C_read();	 //ham doc 1 byte du kieu vao DS1307
    unsigned char DS1307_Read(unsigned char addr);	//ham doc du lieu tu 1 thanh ghi bat ky
    void DS1307_write(unsigned char addr,unsigned char dat); //ham ghi du lieu tu 1 thanh ghi bat ky 
    void Write_DS1307();  //ham cai dat thoi gian vao DS1307
    void Read_DS1307();	  //ham doc thoi gian vao DS1307
    void Convert_Number(); //ham chuyen doi tach so de hien thi tren led 7 thanh
    void Display_Gio_Phut_Giay(); //ham hien thi gio phut giay tren led 7 thanh
    void Display_Ngay_Thang_Nam(); //ham hien thi ngay thang  nam
    void ScanKey();      //ham quet phim nhan
    
    //khai bao bien				   
    unsigned char Mang[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
    unsigned char SoGioHangChuc,SoGioHangDonVi,SoPhutHangChuc,SoPhutHangDonVi,SoGiayHangChuc,SoGiayHangDonVi;
    unsigned char SoNgayHangChuc,SoNgayHangDonVi,SoThangHangChuc,SoThangHangDonVi,SoNamHangChuc,SoNamHangDonVi;
    unsigned int Millisec,Millisec2;	 //bien dem ms
    char sec,hour,min,day,date,month,year;      //cac bien dem gio phut giay....
    unsigned char kt_sec;						//bien kiem tra xem RTC co hoat dong khong
    unsigned char kt_sec2;
    unsigned char kt_menu;						//bien vao cac che do chinh thoi gian
    bit bTimer;	                               //kiem tra trang thai hien thi
    
    //cac ham khai bao
    void delay_ms(unsigned int ms)			   
    {
     	unsigned int i,j;
    	for(i=0;i<ms;i++)
    		for(j=0;j<121;j++);
    }
    
    void ISR_1000ms(void) interrupt 1 	 // ham ngat timer 0 :1ms
    {
    	TF0 = 0;//xoa co tran
    	TH0 =0xE5;	 // nap du lieu vao thanh ghi timer	  
    	TL0 =0xF8;
    	TR0=1;
        Millisec++;
    	Millisec2++;
        if(Millisec==0xFFFD)
            Millisec=0;
        if(Millisec%1000==0)
    		LedCPU=~LedCPU;	
    }
    
    //ham quet led hien thi gio phut giay
    
    void Display_Gio_phut_giay()
    {
    	P1=1;  // led thu nhat sang
    	P2=Mang[SoGioHangChuc]; //xuat du lieu ra led thu nhat
    	delay_ms(2); //tre 1ms
    	P1=2;
    	P2=Mang[SoGioHangDonVi];
    	delay_ms(2);
    	P1=4;
    	P2=0xBF;
    	delay_ms(2);
    	P1=8;
    	P2=Mang[SoPhutHangChuc];
    	delay_ms(2);
    	P1=16;
    	P2=Mang[SoPhutHangDonVi];
    	delay_ms(2);
    	P1=32;
    	P2=0xBF;
    	delay_ms(2);
    	P1=64;
    	P2=Mang[SoGiayHangChuc];
    	delay_ms(2);
    	P1=128;
    	P2=Mang[SoGiayHangDonVi];
    	delay_ms(2);		
    	OffLed;
    }
     
    
    //ham quet led hien thi ngay thang nam
    void Display_Ngay_Thang_Nam()
    {
    	P1=1;
    	P2=Mang[SoNgayHangChuc];
    	delay_ms(2);
    	P1=2;
    	P2=Mang[SoNgayHangDonVi];
    	delay_ms(2);
    	P1=4;
    	P2=0xBF;
    	delay_ms(2);
    	P1=8;
    	P2=Mang[SoThangHangChuc];
    	delay_ms(2);
    	P1=16;
    	P2=Mang[SoThangHangDonVi];
    	delay_ms(2);
    	P1=32;
    	P2=0xBF;
    	delay_ms(2);
    	P1=64;
    	P2=Mang[SoNamHangChuc];
    	delay_ms(2);
    	P1=128;
    	P2=Mang[SoNamHangDonVi];
    	delay_ms(2);
    	OffLed;
    }
    
    void Convert_Number()
    {
    	SoNgayHangChuc=day/10;
    	SoNgayHangDonVi=day%10;
    	SoThangHangChuc=month/10;
    	SoThangHangDonVi=month%10;
    	SoNamHangChuc=year/10;
    	SoNamHangDonVi=year%10;
    	SoGiayHangChuc=sec/10;
    	SoGiayHangDonVi=sec%10;
    	SoPhutHangChuc=min/10;
    	SoPhutHangDonVi=min%10;
    	SoGioHangChuc=hour/10;
    	SoGioHangDonVi=hour%10;
    }
    
    //chuong trinh chinh
    
    void main(void)
    { 
    	
    	Read_DS1307(); //doc thoi gian tu DS1307
    	kt_sec=sec;	   //luu giay vao 1 bien kt_sec
    	delay_ms(2000);
    	Read_DS1307();//tre 1 khoang thoi gian sau do doc tiep
    	kt_sec2=sec;
    	if(kt_sec==kt_sec2)  //nguoc lai neu DS1307 chua chay thi phai set thoi gian
    	{
    		sec=8;min=7;hour=7;day=9;month=10;year=12;date=7;
    		Write_DS1307();// ghi du lieu vao DS1307
    	}
    		//khoi tao cho bo dem timer
    	TCON=0x01; // che do 16 bit tu nap lai
    	TR0=1;       //cho phep timer hoat dong
    	TH0=0xfc;
    	TL0=0x18; //nap gia tri dem cho thanh ghi timer 0
    	TR0=1; // cho phép timer 0 hoat dong
    	TF0=0;	  //xoa co ngat
    	EA=1;    //cho phep ngat
    	ET0=1;   //cho phep ngat timer 0 
    
        while (1)
        {
    
    		ScanKey();
    		if(Millisec>=200)
    		{
    			Convert_Number();        //cu 100 ms thi chuyen doi 1 lan
    			Millisec=0;	
    		}
    		if(bTimer==1&&kt_menu==0)	 //trong che do hien thi ngay thang nam
    		{
    			if(Millisec2>=500)		 //500ms doc thoi gian tu DS1307 1 lan
    			{
    				LedCPU=~LedCPU;		     //nhap nhay den led
    				Millisec2=0;
    				Read_DS1307();	     //doc thoi gian tu DS1307
    			}
    			Display_Ngay_Thang_Nam();//hien thi ngay thang nam len led 7 thanh
    		}
    		else if(bTimer==0&&kt_menu==0)	 //trong che do gio phut giay
    		{
    		 	if(Millisec2>=500)
    			{
    			 	LedCPU=~LedCPU;		     //nhap nhay den led
    				Millisec2=0;
    				Read_DS1307();
    			}
    			
    			Display_Gio_Phut_Giay(); //hien thi gioi phut giay tren led 7thanh
    		}
    		
        }
    }
    void ScanKey()
    {
    	if(Menu==0)//neu phim menu duoc nhan
    	{
    	 	delay_ms(500);
    		kt_menu++;	  //bien luu trang thai menu hien tai
    		Write_DS1307();//cu moi lan nhan phim thi phai ghi du lieu vao DS1307
    
    		if(kt_menu==7)	  
    		{
    			kt_menu=0;	 //tro ve trang thai hien thi thoi gian binh thuong
    
    		}
    		while(Menu==0);//cho khi nao nha phim menu		
    	}
    	if(Timer_Date==0)
    	{
    		delay_ms(20);
    		bTimer=~bTimer;
    		while(Timer_Date==0);
    	}
    	if(kt_menu!=0)
    	{
    		switch(kt_menu)
    		{
    		 	case 1:    //chinh thoi gian ngay
    			{
    				if(Back==0)
    				{
    				 	delay_ms(20);
    					day--;
    					if(day<=0)
    						day=31;
    					while(Back==0);
    				}
    				else if(Next==0)
    				{
    				 	delay_ms(20);
    					day++;
    					if(day>=32)
    						day=1;
    					while(Next==0);
    				}
    				 	P1=1;
    					P2=Mang[SoNgayHangChuc];
    					delay_ms(1);
    					P2=2;
    					P2=Mang[SoNgayHangDonVi];
    					delay_ms(1);
    					OffLed;
    			}
    			break;
    			case 2:	  //chinh thang
    			{ 
    				
    				if(Back==0)
    				{
    				 	delay_ms(20);
    					month--;
    					if(month<=0)
    						month=12;
    					while(Back==0);
    				}
    				else if(Next==0)
    				{
    				 	delay_ms(20);
    					month++;
    					if(month>=13)
    						month=1;
    					while(Next==0);
    				}
    				 	P1=8;
    					P2=Mang[SoThangHangChuc];
    					delay_ms(1);
    					P1=16;
    					P2=Mang[SoThangHangDonVi];
    					delay_ms(1);
    					OffLed;
    			}
    			break;
    			case 3:	 //chinh nam
    			{ 
    			
    				if(Back==0)
    				{
    				 	delay_ms(20);
    					year--;
    					if(year<=0)
    						year=99;
    					while(Back==0);
    				}
    				else if(Next==0)
    				{
    				 	delay_ms(20);
    					year++;
    					if(month>=100)
    						year=0;
    					while(Next==0);
    				}
    			 	P1=64;
    				P2=Mang[SoNamHangChuc];
    				delay_ms(1);
    				P1=128;
    				P2=Mang[SoNamHangDonVi];
    				delay_ms(1);
    				OffLed;			
    			}
    			break;
    			case 4:	   //chinh gio
    			{ 
    			
    				if(Back==0)
    				{
    				 	delay_ms(20);
    					hour--;
    					if(hour<=0)
    						hour=23;
    					while(Back==0);
    				}
    				else if(Next==0)
    				{
    				 	delay_ms(20);
    					hour++;
    					if(hour>=24)
    						hour=0;
    					while(Next==0);
    				}
    					P1=1;
    					P2=Mang[SoGioHangChuc];
    					delay_ms(1);
    					P1=2;
    					P2=Mang[SoGioHangDonVi];
    					delay_ms(1);
    					OffLed; 
    			}
    			break;	 //chinh phut
    			case 5:
    			{ 
    				
    				if(Back==0)
    				{
    				 	delay_ms(20);
    					min--;
    					if(min<=0)
    						min=59;
    					while(Back==0);
    				}
    				else if(Next==0)
    				{
    				 	delay_ms(20);
    					min++;
    					if(min>=60)
    						min=0;
    					while(Next==0);
    				}
    					P1=8;
    					P2=Mang[SoPhutHangChuc];
    					delay_ms(1);
    					P1=16;
    					P2=Mang[SoPhutHangDonVi];
    					delay_ms(1);
    					OffLed; 
    			}
    			break;
    			case 6:	 //chinh giay
    			{ 
    				
    				if(Back==0)
    				{
    				 	delay_ms(20);
    					sec--;
    					if(sec<=0)
    						sec=59;
    					while(Back==0);
    				}
    				else if(Next==0)
    				{
    				 	delay_ms(20);
    					sec++;
    					if(sec>=60)
    						sec=0;
    					while(Next==0);
    				}
    					P1=64;
    					P2=Mang[SoGiayHangChuc];
    					delay_ms(1);
    					P1=128;
    					P2=Mang[SoGiayHangDonVi];
    					delay_ms(1);
    					OffLed; 
    			}
    			break;
    		
    		}
    	}
    
    
    }
    //******************************************************************************
    // CAC CHUONG TRINH CON CHO I2C
    //******************************************************************************
    void I2C_start()	 //ham khoi dong I2C
    {
    	SCL = 1;		 
        SCL = 0;
    	SDA = 1; 
        SCL = 1;
    	SDA = 0;
    	SCL = 0; 
    
    }
    void I2C_stop()	  
    {
    	SCL = 1;   //keo chan SDA len 1
        SCL = 0;
    	SDA = 0; 
    	SCL = 1; 
    	SDA = 1;
    }
    unsigned char I2C_write(unsigned char dat)//ham ghi 1 byte du lieu vao DS1307
    {
    	unsigned char i;
    	for (i=0;i<8;i++)
    	{
    		SDA = (dat & 0x80); ///? 1:0;
    		SCL=1;
    		SCL=0;
    		dat<<=1;
    	}
    	SCL = 1; 
    	SCL = 0;
    	return dat;
    }
    unsigned char I2C_read(void)
    {
    	bit rd_bit;
    	unsigned char i, dat;
    	dat = 0x00;
    	for(i=0;i<8;i++) 		/* For loop read data 1 byte */
    	{
    		SCL = 1;
    		rd_bit = SDA; 		/* Keep for check acknowledge */
    		dat = dat<<1;
    		dat = dat | rd_bit; /* Keep bit data in dat */
    		SCL = 0; 			/* Clear SCL */
    	}
    	return dat;
    }
    // CAC CHUONG TRINH CON CHO DS1307
    //******************************************************************************
    unsigned char DS1307_read(unsigned char addr)
    {
    	unsigned int temp,ret;
    	I2C_start(); 		/* Start i2c bus */
    	I2C_write(0xD0); 	/* Connect to DS1307 */
    	I2C_write(addr); 	/* Request RAM address on DS1307 */
    	I2C_start(); 		/* Start i2c bus */
    	I2C_write(0XD1); 	/* Connect to DS1307 for Read */
    	ret = I2C_read(); 	/* Receive data */
    	I2C_stop();
    	//**********************************************************
    	temp = ret; 							/*BCD to HEX*/
    	ret = (((ret/16)*10)+ (temp & 0x0f)); 	/*for Led 7seg*/
    	//**********************************************************
    	return ret;
    }
    
    void DS1307_Write(unsigned char addr,unsigned char dat)
    {
    	unsigned int temp;
    	//********************************************** 
    	temp = dat ; 						/*HEX to BCD*/
    	dat = (((dat/10)*16)|(temp %10)); 	/*for Led 7seg*/
    	//**********************************************
    	I2C_start(); 		/* Start i2c bus */
    	I2C_write(0XD0); 	/* Connect to DS1307 */
    	I2C_write(addr); 	/* Request RAM address on DS1307 */
    	I2C_write(dat); 	/* Connect to DS1307 for Read */
    	I2C_stop();
    }
    void Read_DS1307()
    {
    	sec   = DS1307_read(SEC);   //doc giay tu DS1307
    	min   = DS1307_read(MIN);	//doc phut tu DS1307
    	hour  = DS1307_read(HOUR);	//doc gio tu DS1307
    	day   = DS1307_read(DAY);	//doc ngay tu DS1307
    	date  = DS1307_read(DATE);	//doc thu tu DS1307
    	month = DS1307_read(MONTH);	//doc thang tu DS1307
    	year  = DS1307_read(YEAR);	//doc nam tu DS1307
    }
    
    void Write_DS1307()
    {
    	DS1307_Write(SEC,sec);	    //ghi du lieu vao thanh ghi giay
    	DS1307_Write(MIN,min);	    //ghi du lieu vao thanh ghi phut
    	DS1307_Write(HOUR,hour);    //ghi du lieu vao thanh ghi gio
    	DS1307_Write(DAY,day);	    //ghi du lieu vao thanh ghi ngay
    	DS1307_Write(DATE,date);    //ghi du lieu vao thanh ghi thu
    	DS1307_Write(MONTH,month);  //ghi du lieu vao thanh ghi thang
    	DS1307_Write(YEAR,year);    //ghi du lieu vao thanh ghi nam
    }

  • #2
    TH0 và TL0 là giá trị nạp cho timer0. timer high(TH) timer low(TL).còn giá trị 0xe5 và 0xf 8 là giá trị được nạp cho 2 thanh ghi 8 bit này. timer sẽ đếm từ 0 đến giá trị được nạp rồi rs. cụ thể trong hàm bạn đưa ra thì giá trị TH0 và TL0 và giá trị nạp lại cho timer0
    Nguyễn Huy Biên - 01649 802 694
    gmail :

    Comment


    • #3
      Cái đó thì mình biết . Nhưng đây là code tạo xung 1ms . thường thì mình làm thì TH0 và TL0 sẽ = giá trị hệ thập phân . Đây là hexa

      Comment


      • #4
        Thanks nhé ! Qua tìm hiểu thì mình đã hiểu . Mấy mã hexa ấy là dựa vào tần số thạch anh tính toán rồi đổi sang hexa !

        Comment


        • #5
          Nguyên văn bởi bienhou Xem bài viết
          TH0 và TL0 là giá trị nạp cho timer0. timer high(TH) timer low(TL).còn giá trị 0xe5 và 0xf 8 là giá trị được nạp cho 2 thanh ghi 8 bit này. timer sẽ đếm từ 0 đến giá trị được nạp rồi rs. cụ thể trong hàm bạn đưa ra thì giá trị TH0 và TL0 và giá trị nạp lại cho timer0
          không biết có chính xác không

          Comment


          • #6
            Nguyên văn bởi kidteam Xem bài viết
            không biết có chính xác không
            mong anh chỉ cho e thêm, @@. kiến thức mỗi người cũng đều còn có hạn mà
            Nguyễn Huy Biên - 01649 802 694
            gmail :

            Comment


            • #7
              mình nhớ không nhầm là nó đếm từ giá trị bạn khởi tạo cho đến 0xffff

              Comment


              • #8
                Code kia là mình lấy trên mạng về xem . Mình hỏi 1 câu hơi ngu là sao không khai bao thanh ghi : TMOD =0xXX;

                Comment


                • #9
                  Nguyên văn bởi kidteam Xem bài viết
                  mình nhớ không nhầm là nó đếm từ giá trị bạn khởi tạo cho đến 0xffff
                  @@. dung roi a
                  Nguyễn Huy Biên - 01649 802 694
                  gmail :

                  Comment


                  • #10
                    mong a e có tài liệu về ngắt ngoài thì share cho mình với

                    Comment


                    • #11
                      Nguyên văn bởi vdanhp Xem bài viết
                      mong a e có tài liệu về ngắt ngoài thì share cho mình với
                      bạn search trên mạng nhiều lắm bạn. tất cả tài liệu về 8051 mình đều gõ google mà
                      Nguyễn Huy Biên - 01649 802 694
                      gmail :

                      Comment

                      Về tác giả

                      Collapse

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

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

                      Collapse

                      • mansion123
                        Bật mí những điều ít ai biết về thi công gỗ óc chó
                        bởi mansion123
                        Thi công gỗ óc chó giúp không gian trở nên sang trọng, ấm cúng, gần gũi hơn. Sự kết hợp giữa thẩm mỹ và chất lượng cao của gỗ óc chó chắc chắn sẽ mang lại giá trị lâu dài và làm hài lòng ngay cả những khách hàng khó tính nhất. Vậy đằng
                        ...
                        hôm nay, 16:08
                      • tuyennhan
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi tuyennhan
                        Cái thư sai ngay câu chào Dear sir mới đúng Hi chỉ dùng cho người quen , các vấn đề về kỹ thuật nó không trả lời hoặc nói loanh quanh tránh ảnh hưởng đến công ty .
                        Giup1 người cần không giúp người không cần với lại văn mình vợ người nha đừng quên .
                        hôm nay, 07:44
                      • vi van pham
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi vi van pham
                        Cám ơn những lời chúc tốt đẹp của em.

                        Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.

                        Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....
                        hôm nay, 02:00
                      • nhathung1101
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi nhathung1101
                        Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

                        Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

                        Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
                        Hôm qua, 22:18
                      • dinhthuong80
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi dinhthuong80
                        Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

                        Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
                        Hôm qua, 14:51
                      • dinhthuong80
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi dinhthuong80
                        Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

                        Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
                        Hôm qua, 14:39
                      • dinhthuong80
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi dinhthuong80
                        Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

                        Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
                        Hôm qua, 14:28
                      • bqviet
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi bqviet
                        Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
                        21-02-2025, 20:26
                      • mèomướp
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi mèomướp
                        Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
                        21-02-2025, 12:32
                      • vi van pham
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi vi van pham
                        Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

                        Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
                        20-02-2025, 21:31
                      Đang tải...
                      X