Tuesday, September 9, 2014

Đồng hồ số kết hợp với hiển thị nhiệt độ

Posted by dientudieukhien at 8:59 PM 0 Comments

Project Đồng hồ số để bàn kết hợp hiển thị nhiệt độ

gồm các khối: khối tạo nguồn 5v sử dụng LM2574N-5.0, khối hiển thị gồm 4 leg 7segment, cảm biến nhiệt LM335, Ic thời gian thực DS1307, Ic gải mã led 7seg Max7219CNG, IC xử lí trung tâm sử dụng Pic 18F252.

Đồng hồ số kết hợp hiển thị nhiệt độ
Code in mikroc

 // VARIABLES
  char second = 0; char second_old = 0;
  char minute = 0; char minute_ten = 0; char minute_one = 0;
  char hour = 0; char hour_ten = 0; char hour_one = 0;
  char counter_1=0; char counter_2=0;
  unsigned temp = 0; char temp_ten=0; char temp_one=0; char temp_neg=0;
  char blink=0;
  char i=0;

void send_to_max7219(char address,char data) {
  PORTC.F6 = 0; // LOAD(CS) LINE LOW
  Spi_Write(address);
  Spi_Write(data);
  PORTC.F6 = 1; // LOAD(CS) LINE HIGH
  }

void init_MAX7219() {
  send_to_max7219(0x09,0xFF);// BCD Mode Code B
  send_to_max7219(0x0A,0x0F);// INTENSITY MAX
  send_to_max7219(0x0B,0x03);// SCAN ONLY DIGITS 0,1,2,3
  send_to_max7219(0x0C,0x01);// TURN ON
  send_to_max7219(0x00,0x0F);// TEST OFF
  }

void show_temp() {

  // READ AN0 INPUT 50 TIMES CUMULATIVELY
  temp=0;
  for (i=0;i<=49;i++) {
    temp = temp+ Adc_Read(0);
    delay_ms(1);
  }
  temp=temp/50; //CALCULATE THE AVERAGE
  temp = temp*4.57;//CALCULATE THE SENSOR OUTPUT in mV

  // TEMPERATURE POSITIVE OR NEGATIVE?
  if (temp>=2730) {
  temp = temp-2730; temp_neg=0;}
  else {temp=2730-temp;temp_neg=1;}

  // CONVERT TEMPERATURE VALUE INTO BCD FORMAT
  temp=Dec2Bcd16(temp);

  // MAX7219 NO DECODE MODE
  send_to_max7219(0x09,0x00);

  // DISPLAY THE MINUS SIGN IF TEMP IS NEGATIVE
  if (temp_neg) {
    send_to_max7219(0x01,0x01);  }
  else {
    send_to_max7219(0x01,0x00); }

  // SEPERATE THE TEMPERATURE DIGITS
  temp_one=(temp>>4)&0b00001111;
  temp_ten=(temp>>8)&0b00001111;

  // DISPLAY THE TEMPERATURE DIGITS

  if (temp_one==0x00) {send_to_max7219(0x03,0x7E);}
  else if (temp_one==0x01) {send_to_max7219(0x03,0x30);}
  else if (temp_one==0x02) {send_to_max7219(0x03,0x6D);}
  else if (temp_one==0x03) {send_to_max7219(0x03,0x79);}
  else if (temp_one==0x04) {send_to_max7219(0x03,0x33);}
  else if (temp_one==0x05) {send_to_max7219(0x03,0x5B);}
  else if (temp_one==0x06) {send_to_max7219(0x03,0x5F);}
  else if (temp_one==0x07) {send_to_max7219(0x03,0x70);}
  else if (temp_one==0x08) {send_to_max7219(0x03,0x7F);}
  else if (temp_one==0x09) {send_to_max7219(0x03,0x7B);}

  if (temp_ten==0x00) {send_to_max7219(0x03,0x7E);}
  else if (temp_ten==0x01) {send_to_max7219(0x02,0x30);}
  else if (temp_ten==0x02) {send_to_max7219(0x02,0x6D);}
  else if (temp_ten==0x03) {send_to_max7219(0x02,0x79);}
  else if (temp_ten==0x04) {send_to_max7219(0x02,0x33);}
  else if (temp_ten==0x05) {send_to_max7219(0x02,0x5B);}
  else if (temp_ten==0x06) {send_to_max7219(0x02,0x5F);}
  else if (temp_ten==0x07) {send_to_max7219(0x02,0x70);}
  else if (temp_ten==0x08) {send_to_max7219(0x02,0x7F);}
  else if (temp_ten==0x09) {send_to_max7219(0x02,0x7B);}

  // DISPLAY THE DEGREE SIGN
  send_to_max7219(0x04,0x62);
  }

void main() {

  // INITIALIZE SPECIAL FUNCTION REGISTERS
  ADCON1=0b00001110; // SELECT THE ANALOG INPUTS
  TRISC = 0b00010000; // ASSIGN DIRECTIONS FOR PORTC
  TRISB = 0b11111111; // ASSIGN DIRECTIONS FOR PORTB
  TRISA = 0b00000001; // ASSIGN DIRECTIONS FOR PORTA
  PORTC.F6 = 1; //LOAD(CS) LINE IS INITIALLY LOW

  // INIT HW SPI
  Spi_Init_Advanced(MASTER_OSC_DIV16,DATA_SAMPLE_MIDDLE,CLK_IDLE_LOW,LOW_2_HIGH);

  // INIT SW I2C
  Soft_I2C_Config(&PORTB, 1, 0);

  while(1) {

  init_MAX7219();

  // READ SECOND, MINUTE and HOUR INFO FROM DS1307
  Soft_I2C_Start();
  Soft_I2C_Write(0xD0);
  Soft_I2C_Write(0x00);
  Soft_I2C_Start();
  Soft_I2C_Write(0xD1);
  second = Soft_I2C_Read(1);
  minute = Soft_I2C_Read(1);
  hour = Soft_I2C_Read(0);
  Soft_I2C_Stop();

  // SEPERATE THE HOUR AND MINUTE DIGITS
  hour_one = 0b00001111 & hour;
  hour_ten = (hour >> 4) & 0b00001111;
  minute_one = 0b00001111 & minute;
  minute_ten = (minute >> 4) & 0b00001111;

  // BLINKING AND TEMP. DISPLAY PERIOD
  if (second != second_old) { // DETECT A SECOND
    counter_1++;
    counter_2++;
    second_old=second;
    if (counter_1==1) { // BLINK EVERY 1 SECOND
       counter_1=0;
       blink=~blink;
    }
    if (counter_2==15) { // DISPLAY TEMP EVERY 15 SECONDS
      counter_2=0;
      show_temp();
      delay_ms(3000); // DISPLAY FOR THREE SECONDS
      send_to_max7219(0x09,0xFF); // SET BCD CODE B
    }
  }

  // MANUALLY SHOW TEMP IF SW2 IS PRESSED
  if (PORTB.F3==0) {
    counter_2=0;
    show_temp();
    delay_ms(3000);
    send_to_max7219(0x09,0xFF); // SET BCD CODE B
   }

  // DISPLAY THE HOUR DIGITS
  if (hour_ten == 0x00) { // IF THE DECIMAL DIGIT IS 0
     send_to_max7219(0x01,0x0F);} // THEN DISPLAY NOTHING IN FIRST DIGIT
  else {
     send_to_max7219(0x01,hour_ten);}
  if (blink==0xFF) {
     hour_one|=0b10000000;}  // DETERMINE THE DOT STATUS OF THE 2nd DIGIT
  else {
     hour&=0b01111111;}
  send_to_max7219(0x02,hour_one);

  // DISPLAY THE MINUTE DIGITS
  if (blink==0xFF) {
     minute_ten|=0b10000000;} // DETERMINE THE DOT STATUS OF THE 3th DIGIT
  else {
     minute_ten&=0b01111111;}
  send_to_max7219(0x03,minute_ten);
  send_to_max7219(0x04,minute_one);

  // INCREASE THE HOUR IF SW IS PRESSED
  hour_one&=0b01111111;
  if (PORTB.F2==0) {
    if (hour_one<=0x08) {
      if ((hour_ten==0x02) && (hour_one==0x03)) {
      hour_one=0;
      hour_ten=0; }
      else {
      hour_one++;}
      }
    else {hour_one=0x00;

         if (hour_ten<=0x1) {
         hour_ten++;}
         else { hour_ten=0x00;}
         }

    // WRITE THE NEW HOUR VALUE TO DS1307
    hour_ten = (hour_ten<<4)&0b11110000;
    hour = hour_one|hour_ten;
    Soft_I2C_Start();
    Soft_I2C_Write(0xD0);
    Soft_I2C_Write(0x02);
    Soft_I2C_Write(hour);
    Soft_I2C_Stop();

    do {} while (PORTB.F2==0) ; // SW DEBOUNCE

  }

  // INCREASE MINUTE IF SW3 IS PRESSED
  minute_ten&=0b01111111;
  if (PORTB.F4==0) {
    if (minute_one<=0x08) {
      minute_one++;
      }
    else {
         if ((minute_ten==0x05) && (minute_one==0x09)) {
         minute_one=0x00;
         minute_ten=0x00;  }
         else if (minute_ten<=0x05) {
         minute_ten++;
         minute_one=0x00;}
         else {
         minute_ten=0x00;
         minute_one=0x00;}
         }

    // WRITE THE NEW MINUTE VALUE TO DS1307
    minute_ten = (minute_ten<<4)&0b11110000;
    minute = minute_one|minute_ten;
    Soft_I2C_Start();
    Soft_I2C_Write(0xD0);
    Soft_I2C_Write(0x00);
    Soft_I2C_Write(0x00);
    Soft_I2C_Write(minute);
    Soft_I2C_Stop();

    do {} while (PORTB.F4==0); // SW DEBOUNCE

    }
  }

}

* Sau đây là file hex, bạn copy vào notepad và save lại với đuôi ".hex".
:1000000004EF00F0FFFFFFFF92EC05F00E0EC16E53
:10001000100E946EFF0E936E010E926E828C010E86
:10002000276E286A296A010E2A6E24EC06F0810EDA
:10003000276E0F0E286E3AEC06F0D3EC05F04DEC6F
:1000400006F0D00E276E5BEC04F0276A5BEC04F040
:100050004DEC06F0D10E276E5BEC04F0010E276E1E
:10006000BBEC04F000C01CF0010E276EBBEC04F0EA
:1000700000C01EF0276ABBEC04F000C021F0F1ECD8
:1000800005F00F0E2114236E21C022F02232229E91
:100090002232229E2232229E2232229E0F0E2216CF
:1000A0000F0E1E14206E1EC01FF01F321F9E1F3227
:1000B0001F9E1F321F9E1F321F9E0F0E1F161C50A9
:1000C0001D1834E0242A252A1CC01DF02450010AE2
:1000D00002E1246A261E25500F0A28E1256A83ECD6
:1000E00001F0270E0C6EFF0E0B6EFF0E0A6E0C2E2B
:1000F00001D007D00B2E01D003D00A2EFED7FAD79D
:10010000F6D73F0E0B6EFF0E0A6E0B2E01D003D0FA
:100110000A2EFED7FAD7850E0A6E0A2EFED70000E9
:10012000090E2B6EFF0E2C6E97EC06F0016A81B65D
:10013000012A0150000A28E1256A83EC01F0270E0C
:100140000C6EFF0E0B6EFF0E0A6E0C2E01D007D048
:100150000B2E01D003D00A2EFED7FAD7F6D73F0ECA
:100160000B6EFF0E0A6E0B2E01D003D00A2EFED7A7
:10017000FAD7850E0A6E0A2EFED70000090E2B6EE6
:10018000FF0E2C6E97EC06F02250000A07E1010EDC
:100190002B6E0F0E2C6E97EC06F006D0010E2B6E18
:1001A00022C02CF097EC06F02650FF0A02E1238EC5
:1001B00002D07F0E2116020E2B6E23C02CF097EC7E
:1001C00006F02650FF0A02E11F8E02D07F0E1F1696
:1001D000030E2B6E1FC02CF097EC06F0040E2B6E56
:1001E00020C02CF097EC06F07F0E2316016A81B434
:1001F000012A0150000A3EE1235008080CE3225076
:10020000020A07E12350030A04E1236A226A0AEF83
:1002100001F0232A08D0236A2250010803E3222A8E
:1002200013EF01F0226A22C000F000360090003681
:1002300000900036009000360090F00E001600C0CE
:1002400022F000502310216E4DEC06F0D00E276EE8
:100250005BEC04F0020E276E5BEC04F021C027F08B
:100260005BEC04F0F1EC05F0016A81B4012A015065
:10027000000AFAE07F0E1F16016A81B8012A0150B8
:10028000000A3FE12050080802E3202A11D01F5045
:10029000050A06E12050090A03E1206A1F6A08D016
:1002A0001F50050803E31F2A206A02D01F6A206A34
:1002B0001FC000F00036009000360090003600901D
:1002C00000360090F00E001600C01FF00050201005
:1002D0001E6E4DEC06F0D00E276E5BEC04F0276A24
:1002E0005BEC04F0276A5BEC04F01EC027F05BECCB
:1002F00004F0F1EC05F0016A81B8012A0150000A0E
:10030000FAE09BD6FFD7166A176A186A18503108A8
:1003100018E32B6A6AEC05F00050162601501722EC
:10032000040E0B6EFF0E0A6E0B2E01D003D00A2EA8
:10033000FED7FAD73B0E0A6E0A2EFED70000182A07
:10034000E5D7320E046E000E056E16C000F017C021
:1003500001F0B5EC05F000C016F001C017F00EEC8E
:1003600006F0710E046E3D0E056E120E066E810EC5
:10037000076EDEEC02F0ECEC03F000C016F001C0FA
:1003800017F00A0E015C02E1AA0E005C000106E310
:10039000AA0E165E0A0E175A196A0AD000011650E4
:1003A000AA08166E17C017F00A0E1756010E196E1E
:1003B000000116C02BF017C02CF072EC03F000C047
:1003C00016F001C017F0090E2B6E2C6A97EC06F0A0
:1003D000195207E0010E2B6E010E2C6E97EC06F001
:1003E00005D0010E2B6E2C6A97EC06F016C000F0BB
:1003F00017C001F001320032019E01320032019E2D
:1004000001320032019E01320032019E0F0E0014B3
:10041000056E05C01AF017C000F0016A0F0E001437
:100420001B6E0550000A07E1030E2B6E7E0E2C6E2C
:1004300097EC06F059D01A50010A07E1030E2B6E13
:10044000300E2C6E97EC06F04FD01A50020A07E1DE
:10045000030E2B6E6D0E2C6E97EC06F045D01A50E5
:10046000030A07E1030E2B6E790E2C6E97EC06F053
:100470003BD01A50040A07E1030E2B6E330E2C6E8C
:1004800097EC06F031D01A50050A07E1030E2B6EE7
:100490005B0E2C6E97EC06F027D01A50060A07E187
:1004A000030E2B6E5F0E2C6E97EC06F01DD01A50CB
:1004B000070A07E1030E2B6E700E2C6E97EC06F008
:1004C00013D01A50080A07E1030E2B6E7F0E2C6E14
:1004D00097EC06F009D01A50090A06E1030E2B6EBC
:1004E0007B0E2C6E97EC06F01B50000A07E1030E02
:1004F0002B6E7E0E2C6E97EC06F059D01B50010A25
:1005000007E1020E2B6E300E2C6E97EC06F04FD0EA
:100510001B50020A07E1020E2B6E6D0E2C6E97EC3B
:1005200006F045D01B50030A07E1020E2B6E790E30
:100530002C6E97EC06F03BD01B50040A07E1020E2C
:100540002B6E330E2C6E97EC06F031D01B50050A43
:1005500007E1020E2B6E5B0E2C6E97EC06F027D097
:100560001B50060A07E1020E2B6E5F0E2C6E97ECF5
:1005700006F01DD01B50070A07E1020E2B6E700E0D
:100580002C6E97EC06F013D01B50080A07E1020E00
:100590002B6E7F0E2C6E97EC06F009D01B50090ACB
:1005A00006E1020E2B6E7B0E2C6E97EC06F0040E0D
:1005B0002B6E620E2C6E97EC06F012000001086A9A
:1005C000096A000E0762036464EF03F00250061824
:1005D0000A6E075003267E0ED8A0F5EF02F0035EE8
:1005E000D8B069EF03F0F9EF02F0035ED8A06EEF28
:1005F00003F0028E068E02C00EF001C00BF000C0A8
:100600000DF000500402F4CF0CF001500502F4CFBD
:1006100000F0F3CF08F00402F3500C26F450082247
:10062000000E00220D500502F3500C26F450082253
:10063000000E002202500402F3500826F45000225B
:1006400002500502016A000E0122F3500026F45008
:1006500001220D500602F3500826F4500022026ACF
:10066000000E012202220B500602F3500026F45025
:100670000122000E02220E500602F3500126F45011
:10068000022202BE4CEF03F0083600360136023675
:100690000306D8B46EEF03F05FEF03F0D880800E4E
:1006A00008640030000E002201220222D8A05FEF71
:1006B00003F0023201320032034A69EF03F00AAE5E
:1006C000029E000E71EF03F0010EAAEC06F071EF2E
:1006D00003F0020E8AEC06F071EF03F0040E6FECEB
:1006E00006F01200E80E046E030E056E2BC000F03B
:1006F0002CC001F0B5EC05F00C0E026E00C02DF020
:1007000001C02EF00250000105E02D362D902E364E
:10071000FF0FF9D7E80E046E030E056E41EC05F0ED
:1007200000502B5C2F6E01502C58306E2FC02BF0D8
:1007300030C02CF0640E046E000E056E2FC000F069
:1007400030C001F0B5EC05F000C003F0026A0250C1
:100750002D1203502E12640E046E000E056E41EC35
:1007600005F000502F5E0150305A2FC02BF030C0E2
:100770002CF00A0E046E000E056E2FC000F030C083
:1007800001F0B5EC05F000C002F001C003F0023644
:100790000290033602360290033602360290033688
:1007A00002360290033602502D1203502E120A0E0A
:1007B000046E000E056E41EC05F000502F5C006EDB
:1007C00001503058016E00C02BF001C02CF02D50AC
:1007D00000122E500112120000010B6A0C6A0A6A04
:1007E0000350D8B437EF04F0028E8E0E035E03BEC2
:1007F000FFEF03F0D8B4FFEF03F03BEF04F0036D1D
:10080000080E035CD8A016EF04F0036E013602C098
:1008100001F0026A080E035CD8A016EF04F001365E
:10082000016A0350D8A4D89020EF04F00350D8B444
:1008300020EF04F0D89002320132032E1AEF04F0B8
:100840000BBC01A02DEF04F0D8A02DEF04F0012A7D
:10085000D8B4022A02BE4AEF04F00AAE50EF04F008
:10086000021E011E012AD8B4022A50EF04F0026AC7
:10087000016A50EF04F00B800BAE54EF04F0026AF3
:100880000AAE54EF04F0FF0E026E016E0A36023219
:1008900054EF04F0010E0C6E60EC06F056EF04F01D
:1008A000000E0C6E56EF04F0FF0E0C6E0150006E41
:1008B0000250016E1200010E296E080E286E15C03E
:1008C000E9FF0F0EEA6E285222E0BCEC06F0BCEC09
:1008D00006F0A2EC06F0EF90BCEC06F0275200E028
:1008E000A2EC06F02736D8A079EF04F0EF827AEF79
:1008F00004F0EF920000BCEC06F0EF80120EE95E0F
:10090000EFA080EF04F0120EE9262806DCD7296A52
:10091000BCEC06F0A2EC06F00000EF90BCEC06F098
:10092000EF82BCEC06F0BCEC06F0295200E0EF8050
:10093000120EE95EEFA09AEF04F0296ABCEC06F013
:10094000EFB22980BCEC06F0BCEC06F0BCEC06F083
:10095000BCEC06F0BCEC06F0BCEC06F0BCEC06F01F
:10096000BCEC06F0A2EC06F0120EE926EF90EF9236
:1009700029C000F01200286A080E296E15C0E9FF90
:100980000F0EEA6E29521CE0BCEC06F00000EF826C
:10099000BCEC06F0285200E0EF80120EE95EEFA0FA
:1009A000CFEF04F0EFB2D880EFA2D8902836BCEC9D
:1009B00006F0A2EC06F0120EE926EF902906E2D727
:1009C000EF82BCEC06F0275202E0A2EC06F02750C2
:1009D000D8B4ECEF04F0EF920000BCEC06F0EF802E
:1009E000120EE95EEFA0F2EF04F0120EE926BCEC65
:1009F00006F0A2EC06F0EF90BCEC06F0A2EC06F0DC
:100A0000EF9228C000F0120000010C6A0E6A02503A
:100A1000D8A41EEF05F001C002F000C001F0006A8A
:100A20000E860250D8A41EEF05F001C002F0016A44
:100A30000E960E880250D8B430EF05F00E50035ECB
:100A4000D8A4D8A036EF05F0D89002BE3CEF05F050
:100A5000003601360236032E25EF05F036EF05F09D
:100A6000010E0C6EAAEC06F040EF05F0020E0C6EC3
:100A70006FEC06F040EF05F0040E0C6EB7EC06F0DC
:100A8000120000010B6A0A6A096A00500402F4CFDE
:100A900009F0F3CF08F001500502F4CF0BF0F3CFCB
:100AA0000AF000500502F3500926F4500A22E86AC1
:100AB0000B2201500402F3500926F4500A22E86A7E
:100AC0000B2208C000F009C001F00AC002F00BC000
:100AD00003F01200C26AC00EC212C18CC18E2BC0BC
:100AE00000F0003600900036009000360090005074
:100AF000C212C280B2EC06F0C284C2B4FED7080EA5
:100B0000026EC4CF00F0000E016E025005E0003608
:100B100000900136FF0FFAD7C3500012000E0112E9
:100B2000C2901200000E1C6E000E1D6E000E1E6E96
:100B3000000E1F6E000E206E000E216E000E226E43
:100B4000000E236E000E246E000E256E000E166E33
:100B5000000E176E000E1B6E000E1A6E000E196E40
:100B6000000E266E000E186E12000001086A096A57
:100B7000100E0C6E0134083609360450085E05501C
:100B8000D8A0053C095ED8B0CDEF05F0045008268A
:100B90000550D8B0053C0926D890003601360C2EF9
:100BA000BAEF05F01200090E2B6EFF0E2C6E97ECBB
:100BB00006F00A0E2B6E0F0E2C6E97EC06F00B0E45
:100BC0002B6E030E2C6E97EC06F00C0E2B6E010EA6
:100BD0002C6E97EC06F02B6A0F0E2C6E97EC06F03D
:100BE000120015C0E9FF0F0EEA6EA2EC06F0EF92BC
:100BF000BCEC06F0EF80120EE95EEFA0FDEF05F011
:100C0000120EE926BCEC06F0BCEC06F0BCEC06F0DB
:100C1000BCEC06F0EF82BCEC06F0120000010050C4
:100C2000086E0150006E016A026A036A0B6A0C6A60
:100C3000960E036E0A6A00C001F008C000F0086A50
:100C4000026A04EC05F01200949A94969488C66A9D
:100C50002750C6122950C6122850C712295205E043
:100C60002A50000AD8B4C78C03D02A52D8A4C78C03
:100C7000C68A120027C0E9FF28C0EAFF120E272407
:100C8000006E00C015F000C0E9FFEF82EF80120E89
:100C9000E95EEFA049EF06F0120015C0E9FF0F0E64
:100CA000EA6EEF82BCEC06F0EF80BCEC06F0A2EC42
:100CB00006F0EF92BCEC06F0A2EC06F0EF9012000A
:100CC00000010B800BAE6DEF06F0026A0AAEFF0E5C
:100CD000026E016E006E0A360232FF0E1200000133
:100CE0000B840BAE7BEF06F0010E036E026A016A05
:100CF000006A0A360232FF0E120031C0C9FF010E2F
:100D0000C714016E0150000A02E10000F8D7C9CFF4
:100D100032F0120000010B820BAE95EF06F0036873
:100D20000268016800680A360232FF0E1200829CD7
:100D30002BC031F07DEC06F02CC031F07DEC06F0DC
:100D4000828C1200090E155CE16E0F0EE26EE792C6
:100D5000E79012000001026A016A006A086A036AE9
:100D6000000E1200120E0A6E0A2EFED712000001AB
:100D70000AAE029E000E1200000000001200FFFFEB
:020000040030CA
:0E000000FFF9FFFFFFFFFFFFFFFFFFFFFFFF06
:00000001FF


nguồn: electro-labs.com


Click vào link tải ở trên đợi 5 giây, ấn "Bỏ qua quảng cáo". Click the link above, wait for 5s and click button "Skip Ad"

Chia sẽ bài viết này

Cập nhật tin bài mới

Subscribe địa chỉ mail để nhận tin nhanh chóng. Chúng tôi sẽ giữ bí mật địa chỉ mail của bạn.

0 nhận xét:

    tab

back to top