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

giúp mình về LCD va PIC 16f877

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • docgiaclong
    Nhập môn đệ tử
    • Apr 2010
    • 4

    #46
    setup_adc_ports(AN0);
    setup_adc(ADC_CLOCK_INTERNAL);
    set_adc_channel(0);

    nếu em không muốn dùng 3 lênh trên thì em phải làm thế nào hả các anh

    Comment

    • caovanhuong
      Đệ tử 2 túi
      • Jul 2009
      • 40

      #47
      Nguyên văn bởi docgiaclong View Post
      setup_adc_ports(AN0);
      setup_adc(ADC_CLOCK_INTERNAL);
      set_adc_channel(0);

      nếu em không muốn dùng 3 lênh trên thì em phải làm thế nào hả các anh
      buộc phải có 2 lệnh này bạn à.
      Cao Văn Hưởng
      SĐT: 01672754113
      Email: caovanhuong@webdien.com
      Nhận thiết kế mạch điện tử, PCB (Orcad)

      Comment

      • docgiaclong
        Nhập môn đệ tử
        • Apr 2010
        • 4

        #48
        mình tìm ra rồi ah
        Thực ra không cần dùng 3 lệnh ấy vẫn làm được
        bằng cách sau

        #LOCATE ADCON0= 1FH
        #LOCATE ADCON1= 9FH
        VOID MAIN()
        { ADCON0=0XC5;
        ADCON1=0X40;

        Comment

        • trinh hoai vinh
          Nhập môn đệ tử
          • Apr 2011
          • 1

          #49
          em can ma code de viet chuong trinh dem san pham dung bien hong ngoai va pic 16f:877a ai co giup em nha:vinh913@yahoo.com

          Comment

          • tanbka
            Đệ tử 5 túi
            • Dec 2008
            • 91

            #50
            Nguyên văn bởi trinh hoai vinh View Post
            em can ma code de viet chuong trinh dem san pham dung bien hong ngoai va pic 16f:877a ai co giup em nha:vinh913@yahoo.com
            Bạn còn đang chưa làm được chỗ nào, chỗ nào gặp khó khăn hỏi thì mọi người mới giúp được chư, bạn hỏi thế này thì thuê anh em làm trọn gói cho xong.

            Comment

            • alycuong
              Đệ tử 1 túi
              • Apr 2010
              • 16

              #51
              Trong thư viện lcd.c có sẵn của CCS thì có các hàm bên dưới, e chỉ biết công dụng của 1 số, a nào biết chú thích giúp e các cái còn lại với.
              Code:
              void lcd_send_byte(BYTE address, BYTE n)         ??? cai nay la gi ah?
              void lcd_send_nibble(BYTE n)                 ??? cai nay la gi ah?
              void lcd_init(void)                           //Khoi tao LCD
              void lcd_gotoxy(BYTE x, BYTE y)              // Di den vi tri cot , hang
              void lcd_putc(char c)                        // Gui ki tu len LCD
              char lcd_getc(BYTE x, BYTE y)              // Nhan ki tu tu LCD
              Cho e hỏi là với 1 thư viện khác thì có hàm void LCD_PutCmd ( unsigned int cX )

              Ví dụ muốn nhấp nháy con trỏ thì viết : LCD_PutCmd(0x0f)

              Nhưng với thư viện lcd.c

              void lcd_send_byte(BYTE address, BYTE n)
              void lcd_send_nibble(BYTE n)
              void lcd_init(void)
              void lcd_gotoxy(BYTE x, BYTE y)
              void lcd_putc(char c)
              char lcd_getc(BYTE x, BYTE y)


              Với các lệnh trên e k biết làm sao để nhấp nháy con trỏ hết. A nào bít hướng dẫn gúp e. E cảm ơn nhiều lắm!

              Comment

              • pdkxlily
                Đệ tử 2 túi
                • Mar 2011
                • 27

                #52
                Nguyên văn bởi stupid11 View Post
                Bạn muốn giúp vấn đề gì.
                biên dịch nó báo thế này là sao bạn "*error 18 "123(mani).c" Line 0(0,1): file can not be opend "
                {
                docADC(); // adc 10bit
                x=read_ADC(); // cái này là đọc giá trị adc đúg ko à ??
                x=x/2.049;
                y=x;
                hienthi(x);
                }
                cái chia 2.049 là giải thix kiểu này đúng ko các bác
                adc 10bit 0-1023 ,mà V_ref = VCC=5V nên ADC_value=1 tương ứng 5/1024=4.887mV
                Trong khi đó LM335
                cho ra điện áp là 10mV/1K nên để giá trị ADC thay đổi 1 đơn vị thì nhiệt độ phải thay đổi là 2K => x= ADC_value*(4.887/10)
                Last edited by pdkxlily; 05-07-2011, 09:25 AM.

                Comment

                • pdkxlily
                  Đệ tử 2 túi
                  • Mar 2011
                  • 27

                  #53
                  Nguyên văn bởi stupid11 View Post

                  Trong LCD có ký hiệu "oC" bạn chỉ việc

                  portb=0b00101110;xuat(); //bạn tham khảo thêm bảng mã LCD//

                  Chúc bạn thành công.
                  #include <16F877A.h>
                  #include <def_877a.h>
                  #device *=16 adc=8
                  #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
                  #use delay(clock=20000000)
                  #include <lcd_lib_4bit.c>


                  void convert_bcd(int8 x);
                  int8 t1,t2;
                  void main()
                  {



                  trisa = 0xFF;
                  trisb = 0x01;
                  trisd = 0x00;

                  LCD_init();
                  Printf(LCD_putchar,"Kenh 0,1:");
                  // Khoi tao cho ngat ngoai
                  enable_interrupts (INT_EXT);
                  ext_int_edge(H_TO_L);
                  enable_interrupts (GLOBAL);
                  // Khoi tao che do cho bo ADC
                  setup_adc_ports(AN0_AN1_AN3);
                  setup_adc(ADC_CLOCK_INTERNAL);
                  delay_us(10);
                  setup_adc_ports(AN0);



                  while(true)
                  {
                  set_ADC_channel(0);
                  t1 =(float)read_adc();
                  t1=t1/0.5102;
                  // convert_bcd((int8) t1);
                  LCD_putcmd(0xC0);
                  printf(LCD_putchar,"T0=%u",t1);
                  printf(LCD_putchar,"C");

                  set_ADC_channel(1);
                  t2=(float)read_adc();
                  t2=t2/0.5102;
                  LCD_putcmd(0xC7);
                  printf(LCD_putchar,"T1=%u",t2);
                  printf(LCD_putchar,"C");


                  }
                  }
                  mình làm lcd_4bit thì khúc xuất ra chữ độC ký tự đặc biệt thì mình làm sao bạn .thêm giúp mình với

                  Comment

                  • danghien719
                    Đệ tử 3 túi
                    • Jan 2010
                    • 51

                    #54
                    kí tự đặc biệt là sao ?
                    đoạn nào ?
                    Như thế này là sao : printf(LCD_putchar,"T0=%u",t1);
                    hịc, tôi ko hiểu đc đoạn code này của bạn.
                    HIENCLUBVN -Naval Academy

                    Comment

                    • pdkxlily
                      Đệ tử 2 túi
                      • Mar 2011
                      • 27

                      #55
                      Nguyên văn bởi danghien719 View Post
                      kí tự đặc biệt là sao ?
                      đoạn nào ?
                      Như thế này là sao : printf(LCD_putchar,"T0=%u",t1);
                      hịc, tôi ko hiểu đc đoạn code này của bạn.
                      của mình là đo nhiệt độ 2 kênh bạn ơi t1 là kênh 0 t2 là kênh 1
                      printf(LCD_putchar,"C");
                      thay vì có chữ C thì mình mún thêm ký tự độ cho chuẩn thôi mà

                      Comment

                      • tdm
                        Đệ tử 7 túi
                        • May 2005
                        • 258

                        #56
                        Nguyên văn bởi pdkxlily View Post
                        của mình là đo nhiệt độ 2 kênh bạn ơi t1 là kênh 0 t2 là kênh 1
                        printf(LCD_putchar,"C");
                        thay vì có chữ C thì mình mún thêm ký tự độ cho chuẩn thôi mà
                        có phải bạn muốn hiển thị như thế này:
                        Attached Files
                        viết chương trình cho vdk chạy ổn định là cả một vấn đề.

                        Comment

                        • danghien719
                          Đệ tử 3 túi
                          • Jan 2010
                          • 51

                          #57
                          Nguyên văn bởi pdkxlily View Post
                          của mình là đo nhiệt độ 2 kênh bạn ơi t1 là kênh 0 t2 là kênh 1
                          printf(LCD_putchar,"C");
                          thay vì có chữ C thì mình mún thêm ký tự độ cho chuẩn thôi mà
                          Hì, bạn lại ko hiểu ý tôi rồi. "T0=%u" ư ? bạn có hiểu rõ cái này ko ? Tại sao bạn lại làm như thế này. Tôi hiểu ý bạn là : u = unsigned int8 hay là char hay là singed nhưng thế thì đã sao ?
                          LCD là ACSII mà. Hì, vậy muốn hiện ra LCD thì làm sao đây.
                          Rất đơn giản là phải chuyển number sang char. Hay nói chính xác là chuyển số mà adc đọc được ra kí tự mã ASCII. Thế là bạn ok rồi nhé.
                          Bạn đã hiểu khá rõ về sự làm việc của LCD rồi đấy.
                          Chúc bạn thành công.
                          P/M : Nếu bạn bó tay ko xây dựng đc Function thì pm cho tôi : Y!M : danghien_004
                          Thân.
                          HIENCLUBVN -Naval Academy

                          Comment

                          • tdm
                            Đệ tử 7 túi
                            • May 2005
                            • 258

                            #58
                            Nguyên văn bởi danghien719 View Post
                            Hì, bạn lại ko hiểu ý tôi rồi. "T0=%u" ư ? bạn có hiểu rõ cái này ko ? Tại sao bạn lại làm như thế này. Tôi hiểu ý bạn là : u = unsigned int8 hay là char hay là singed nhưng thế thì đã sao ?
                            LCD là ACSII mà. Hì, vậy muốn hiện ra LCD thì làm sao đây.
                            Rất đơn giản là phải chuyển number sang char. Hay nói chính xác là chuyển số mà adc đọc được ra kí tự mã ASCII. Thế là bạn ok rồi nhé.
                            Bạn đã hiểu khá rõ về sự làm việc của LCD rồi đấy.
                            Chúc bạn thành công.
                            P/M : Nếu bạn bó tay ko xây dựng đc Function thì pm cho tôi : Y!M : danghien_004
                            Thân.
                            printf(LCD_putchar,"T1=%u",t2);
                            bạn đó viết như vậy là đúng rồi. nó tự động chuyển number sang kí tự mã ASCII.
                            %u:định dạng dữ liệu số nguyên không dấu 8bit
                            viết chương trình cho vdk chạy ổn định là cả một vấn đề.

                            Comment

                            • pdkxlily
                              Đệ tử 2 túi
                              • Mar 2011
                              • 27

                              #59
                              Nguyên văn bởi tdm View Post
                              có phải bạn muốn hiển thị như thế này:
                              đúng rồi đó bạn ý mình là mún nó ra ký tự trong bảng mã LCD đó
                              %u :số nguyên hex ko dấu ^^

                              Comment

                              • tdm
                                Đệ tử 7 túi
                                • May 2005
                                • 258

                                #60
                                Nguyên văn bởi pdkxlily View Post
                                đúng rồi đó bạn ý mình là mún nó ra ký tự trong bảng mã LCD đó
                                %u :số nguyên hex ko dấu ^^
                                kí tự đó không nằm trong bảng mã LCD.bạn phải tự tạo dữ liệu rồi lưu vào vùng CGRAM của LCD và truy xuất nó ra.
                                Attached Files
                                viết chương trình cho vdk chạy ổn định là cả một vấn đề.

                                Comment

                                Working...