RP Store Tìm linh kiện theo mã, gửi BOM nhận báo giá Gửi BOM

Trợ giúp hiển thị số trên LCD

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • huyphuc92
    Nhập môn đệ tử
    • Apr 2013
    • 5

    #1

    Trợ giúp hiển thị số trên LCD

    Đoạn code của em như sau:

    //----------------------------------------------------------------------------------------
    #include <16f877a.h>
    #include <def_877a.h>
    #device *=16 ADC=8
    #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
    #use delay(clock=12Mhz)
    #include <lcd_lib_4bit.h>
    int8 tram,chuc,donvi,nghin;
    int16 temp;

    //----------------------------------------------------------------------------------------

    void main()
    {
    set_tris_d(0x00);
    set_tris_b(0b01);
    LCD_init();
    while(TRUE)
    {
    int i;
    for(i=0;i<9999;i++)
    {
    nghin = i / 1000;
    temp = i % 1000;
    tram = temp / 100;
    temp = temp % 100;
    chuc = temp / 10;
    donvi = temp % 10;

    LCD_putcmd(128);
    Printf(LCD_putchar"i=%u",nghin);
    LCD_putcmd(131);
    Printf(LCD_putchar"%u",tram);
    LCD_putcmd(132);
    Printf(LCD_putchar"%u",chuc);
    LCD_putcmd(133);
    Printf(LCD_putchar"%u",donvi);
    //delay_ms(10);
    }
    }
    }

    Tình hình là nó chạy đến 255 lại quay về 0 ???
    Anh/chị nào chỉ giúp em với, làm sao cho nó chạy hơn 255 giờ?
    Thông cảm giúp em nha, em mới đụng vào VDK, mà trình độ C lại gần = 0.
    Last edited by huyphuc92; 21-06-2013, 08:30 PM. Lý do: Sai chính tả
  • huyphuc92
    Nhập môn đệ tử
    • Apr 2013
    • 5

    #2
    Nhân tiện em hỏi luôn.
    Em viết được đoạn code sau:

    // Truong trINH dieu khien dong co buoc 1.8* quay 1 vong thì dao chieu, lap di lap lai, HIEN THI LCD SO BUOC.
    // a1 = B0
    // a2 = B1
    // b1 = B2
    // b2 = B3
    // LCD:
    // D7 = RD7
    // D6 = RD6
    // D5 = RD5
    // RS = RD2
    // RW = GND
    // E = RD3

    //-------------------------------------------------------------------------------------------------------------------------------------------------------------

    #include<16f877a.h>
    #include<def_877a.h>
    #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
    #use delay(clock=12000000)
    #include<lcd_lib_4bit.h>
    #byte PORTA=0x05
    #byte PORTB=0x06
    #byte PORTC=0x07
    #byte PORTD=0x08
    #byte PORTE=0x09
    #use fast_io(b)
    #use fast_io(d)
    void main(void)
    {
    LCD_init();
    set_tris_d(0);
    while(true)
    {
    int i=99; // Khoi tao i la so nguyen 16bit, i ban dau = 99
    LCD_putcmd(128);
    Printf(LCD_putchar"step x 8 =");

    //-------------------------------------------------------------------------------------------------------------------------------------------------------------
    // QUAY THUAN

    for(;i>=49;i--) // Vong lap quay thuan, stepper 1.8* quay 1 vong = 400 buoc, 1 vong lap co 8 buoc, nen can 50 vong lap
    {
    set_tris_b(0);
    output_low(PIN_B0); // buoc 1 - cuon a1
    delay_ms(50);
    output_low(PIN_B2); // buoc 2 - mo cuon b1 = 02 ( a1+b1)
    delay_ms(50);
    output_high(PIN_B0); // tat a1
    delay_ms(50);
    output_low(PIN_B1); // mo a2 = 21 ( b1+a2)
    delay_ms(50);
    output_high(PIN_B2); // tat b1
    delay_ms(50);
    output_low(PIN_B3); // mo b2 ( a2+b2)
    delay_ms(50);
    output_high(PIN_B1); // tat a2
    delay_ms(50);
    output_low(PIN_B0); // mo a1 ( a1+b2)
    delay_ms(50);
    output_high(PIN_B3); // tat b2
    LCD_putcmd(138);
    Printf(LCD_putchar"%u",i);
    }

    //-------------------------------------------------------------------------------------------------------------------------------------------------------------
    // QUAY NGHICH

    for(;i<49;i--)
    {
    set_tris_b(0);
    output_low(PIN_B0);
    delay_ms(50);
    output_low(PIN_B3);
    delay_ms(50);
    output_high(PIN_B0);
    delay_ms(50);
    output_low(PIN_B1);
    delay_ms(50);
    output_high(PIN_B3);
    delay_ms(50);
    output_low(PIN_B2);
    delay_ms(50);
    output_high(PIN_B1);
    delay_ms(50);
    output_low(PIN_B0);
    delay_ms(50);
    output_high(PIN_B2);
    LCD_putcmd(138);
    Printf(LCD_putchar"%u",i);
    }
    LCD_putcmd(0x01); // XOA MAN HINH LCD
    }
    }

    // END
    //-------------------------------------------------------------------------------------------------------------------------------------------------------------


    Em đặt được giá trị cho i rồi, giờ em muốn dùng nút nhấn đặt tại chân RA0 để nhập giá trị cho i, rồi dùng nút start để khởi động động cơ ( chưa bấm start thì không nhúc nhích gì ).

    Anh/chị nào chỉ em làm vậy với, gợi ý cũng được, viết dùm em đoạn code cũng được.

    À, em hỏi tí, làm sao poss được đoạn code dạng txt vào giữa bài nhỉ?

    Đừng chê em kém nha, em mới tập tọe thui, với lại em đang ôn thi tốt nghiệp, tranh thủ lúc rảnh rỗi học PIC.
    Attached Files
    Last edited by huyphuc92; 21-06-2013, 11:25 PM. Lý do: Poss nhầm code

    Comment

    • huyphuc92
      Nhập môn đệ tử
      • Apr 2013
      • 5

      #3
      Hehe, nghĩ ra câu 1 rồi, int16 i;

      Comment

      • hunke92
        Nhập môn đệ tử
        • Jul 2013
        • 6

        #4
        các huynh ơi !cho đệ hoỉ cách viết code để viết chữ có dấu trên Lcd 16x2 được k?

        Comment

        Working...