Thông báo

Collapse
No announcement yet.

Giao tiếp nút nhấn với LCD....

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

  • Giao tiếp nút nhấn với LCD....

    Mọi người ơi giúp em giao tiếp nút nhấn với...đề tài của mình là đọc nhiệt độ bằng DS18B20 và hiển thị nhiệt độ lên LCD và khi nhiệt độ đạt tới mức mà mình quy định trong code thì còi buzzer sẽ hú báo động...Nhưng bây h mình muốn từ phần cứng mình nhấn nút nhấn thì nhiệt độ báo cháy sẽ tăng hoặc giảm...VD: trong chương trình mình viết nhiệt độ báo cháy bằng 34 vậy khi nhiệt độ môi trường đạt tới 34 độ thì còi sẽ hú....vậy bây giờ phải viết code cho nút nhấn ntn để tăng hoặc giảm nhiệt độ báo cháy đó mà không cần phải chỉnh sửa trong code
    ....Mọi người giúp em với nha...Tuần sau là em phải báo cáo rùi...Đồ Án Tốt Nghiệp of E...hjx
    Còn đây là code:
    #include <16F877a.h>
    #include <def_877a.h>
    #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
    #use delay(clock=20000000)
    #include "1wire.c"

    #define RS PIN_A1
    #define RW PIN_A2
    #define E PIN_A3


    #byte portB=0x06
    #byte portC=0x07
    #byte portD=0x08
    #byte portE=0x09


    #define DS18B20_C
    #define Buzz PIN_E2
    #define button PIN_E0
    int t=33;
    float nhietdo;
    float ds18b20_read();

    float ds18b20_read()
    {
    int8 temp1, temp2;
    signed int16 temp3;
    float result;

    onewire_reset();
    onewire_write(0xCC);
    onewire_write(0x44);
    delay_ms(200);

    onewire_reset();
    onewire_write(0xCC);
    onewire_write(0xBE);
    temp1 = onewire_read();
    temp2 = onewire_read();
    temp3 = make16(temp2, temp1);

    result = (float) temp3 / 16.0; //Calculation for DS18B20 with 0.1 deg C resolution

    delay_ms(200);
    return(result);
    }


    //void LCD_Init (); // ham khoi tao LCD
    //void LCD_Char ( char X ); // Ham ghi 1kitu/1chuoi len LCD
    //void LCD_Cmd (int X) ; // Ham ghi lenh len LCD
    //void LCD_PulseEnable (); // Ham cho phep hoac khong

    void LCD_Char (char X)
    {
    output_high(RS);
    output_low(RW);
    output_D(X);
    output_high(E);
    output_low(E);
    delay_ms( 30 );
    }

    void LCD_Cmd (int X)
    {
    output_low(RS);
    output_low(RW);
    output_D(X);
    output_high(E);
    output_low(E);
    delay_ms( 30 );
    }

    void LCD_Init ()
    {
    output_d(0x00);
    delay_ms(100);
    LCD_Cmd(0x02);
    LCD_Cmd(0x38); // giao tiep 8 bit 2 dong, font 5x7
    LCD_Cmd(0x0C); // bat hien thi, tat con tro
    LCD_Cmd(0x06); // tang con tro
    LCD_Cmd(0x01); // xoa man hinh
    }


    void main()
    {
    set_tris_E(1);

    LCD_Init();
    LCD_Cmd(0x01);
    lcd_Cmd(0x80);
    LCD_Char("DO AN TOT NGHIEP");
    lcd_Cmd(0xC0);
    LCD_Char(" VI XU LY");
    delay_ms(1500);

    LCD_Cmd(0x01);
    lcd_Cmd(0x80);
    LCD_Char("SVTH:VO VAN NHUT");
    lcd_Cmd(0xC0);
    LCD_Char("NGUYEN TIEN DAT");
    delay_ms(1500);

    if(button==0)
    {
    while(button==0)
    {};
    t++;
    }

    lcd_cmd(0x01);
    while(1)
    {
    lcd_Cmd(0x80);
    LCD_Char("NHIET DO:");
    lcd_cmd(0x89);
    printf(LCD_Char,"%3d",t);
    lcd_char(223);
    lcd_char("C");

    LCD_Cmd(0xC0);
    lcd_char("HCM CITY:");
    nhietdo=ds18b20_read();
    LCD_Cmd(0xC9);
    Printf(LCD_Char,"%3.1f",nhietdo);
    LCD_Char(223);
    LCD_Char("C");

    if(nhietdo > t)
    {
    output_high(Buzz);
    output_b(0xff);
    output_c(0xff);
    }
    else if(nhietdo<=t)
    {
    output_low(Buzz);
    output_b(0x00);
    output_c(0x00);
    }
    }
    }

  • #2
    Bạn phải khai báo thư viện stdio mới sử dụng được hàm printf().
    mỗi lần nhấn nút thì cho tăng giảm nhiệt độ khống chế là được.
    sau đó so sánh nhiệt độ khống chế với nhiệt độ do được, nếu lơn hơn thì xuất mức tín hiệu ra cho còi hú thôi
    See you on the dark side of the moon

    Comment


    • #3
      à bạn ơi...chương trình mình thì ok hết rùi... mình chỉ còn bị vướng mắc chỗ nút nhấn thui....
      đây là code để ss nhiet do:
      if(nhietdo > t)
      {
      output_high(Buzz);
      output_b(0xff);
      output_c(0xff);
      }
      else if(nhietdo<=t)
      {
      output_low(Buzz);
      output_b(0x00);
      output_c(0x00);
      }
      còn đây là code sử dụng nút nhấn:
      int t=33;
      if(button==0)
      {
      while(button==0)
      {};
      t++;
      }
      nhưng phần cứng khi mình nhấn nút thì t vẫn k tăng, cứ tới 34 độ thì nó báo cháy...
      với lại đoạn code hiển thị nhiệt độ cảnh báo "t" lên LCD cũng không tăng khi mình nhấn nút:
      lcd_Cmd(0x80);
      LCD_Char("NHIET DO:");
      lcd_cmd(0x89);
      printf(LCD_Char,"%3d",t);
      lcd_char(223);
      lcd_char("C");
      ...Bạn coi kĩ lại dùm mình nha.. thanks bạn nhìu

      Comment


      • #4
        Nguyên văn bởi thaipv Xem bài viết
        Bạn phải khai báo thư viện stdio mới sử dụng được hàm printf().
        mỗi lần nhấn nút thì cho tăng giảm nhiệt độ khống chế là được.
        sau đó so sánh nhiệt độ khống chế với nhiệt độ do được, nếu lơn hơn thì xuất mức tín hiệu ra cho còi hú thôi



        à bạn ơi...chương trình mình thì ok hết rùi... mình chỉ còn bị vướng mắc chỗ nút nhấn thui....
        đây là code để ss nhiet do:
        if(nhietdo > t)
        {
        output_high(Buzz);
        output_b(0xff);
        output_c(0xff);
        }
        else if(nhietdo<=t)
        {
        output_low(Buzz);
        output_b(0x00);
        output_c(0x00);
        }
        còn đây là code sử dụng nút nhấn:
        int t=33;
        if(button==0)
        {
        while(button==0)
        {};
        t++;
        }
        nhưng phần cứng khi mình nhấn nút thì t vẫn k tăng, cứ tới 34 độ thì nó báo cháy...
        với lại đoạn code hiển thị nhiệt độ cảnh báo "t" lên LCD cũng không tăng khi mình nhấn nút:
        lcd_Cmd(0x80);
        LCD_Char("NHIET DO:");
        lcd_cmd(0x89);
        printf(LCD_Char,"%3d",t);
        lcd_char(223);
        lcd_char("C");
        ...Bạn coi kĩ lại dùm mình nha.. thanks bạn nhìu

        Comment


        • #5
          Bạn phải đưa cái này vào vòng lặp while(1){} chứ
          if(button==0)
          {
          while(button==0)
          {};
          t++;
          }
          See you on the dark side of the moon

          Comment


          • #6
            Có nút tăng thì cũng nên có nút giảm
            See you on the dark side of the moon

            Comment


            • #7
              thì nếu làm tăng dc thì giảm cug dễ thui....đã đưa vào vòng lặp nhưng vẫn k dc...@@

              Comment


              • #8
                Viết kiểu này thì lúc nhấn nút nó đang xử lý hàm ds18b20_read() làm sao nó biết được, rồi điều kiện button==0 nữa, khai báo kiểu gì lạ đời vậy.

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                Đang tải...
                X