Thông báo

Collapse
No announcement yet.

Các câu hỏi thông dụng về lập trình CCS cho PIC 16F887

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

  • #31
    cảm ơn bác hienclubvn rất nhiều, em mới học nên yếu.

    "Cái cuối cùng là cậu ta pót sản phẩm của mình lên và tự sướng với nó. Kaka, lần sau bỏ cái tính ấy đi, tìm hiểu trước khi hỏi.
    Code mẫu cái gì chứ, struct gì chứ, nhìn code chẳng ra gì cả."
    => em hoàn toàn không có ý như vậy, em nghĩ mọi người tham gia nên mang tính đóng góp. Nếu như mới code mà không cần hỏi thì mọi người lên diễn dàn này làm gì.


    "Ko cần lằng nhằng, đoạn này. bit đồng bộ kệ nó. với CCS tất cả trở nên thừa thải."
    => nếu không quan tâm, vậy thực ra bit đó để làm cảnh sao anh?
    em mong nhận được câu trả lời có ý nghĩa nhất.

    Thực ra khi làm việc với CCS có nhiều cái lợi thật, nhưng chẳng ra sao nếu cứ moi sẵn của nó ra mà xài. Đôi khi chẳng thể nào kiểm soát được mình làm gì cả.
    Be quan. Plz contact through email:

    Comment


    • #32
      Nguyên văn bởi Lenh Ho Xem bài viết
      cảm ơn bác hienclubvn rất nhiều, em mới học nên yếu.

      "Cái cuối cùng là cậu ta pót sản phẩm của mình lên và tự sướng với nó. Kaka, lần sau bỏ cái tính ấy đi, tìm hiểu trước khi hỏi.
      Code mẫu cái gì chứ, struct gì chứ, nhìn code chẳng ra gì cả."
      => em hoàn toàn không có ý như vậy, em nghĩ mọi người tham gia nên mang tính đóng góp. Nếu như mới code mà không cần hỏi thì mọi người lên diễn dàn này làm gì.

      "Ko cần lằng nhằng, đoạn này. bit đồng bộ kệ nó. với CCS tất cả trở nên thừa thải."
      => nếu không quan tâm, vậy thực ra bit đó để làm cảnh sao anh?
      em mong nhận được câu trả lời có ý nghĩa nhất.

      Thực ra khi làm việc với CCS có nhiều cái lợi thật, nhưng chẳng ra sao nếu cứ moi sẵn của nó ra mà xài. Đôi khi chẳng thể nào kiểm soát được mình làm gì cả.

      Kaka, đúng thế. Với CCS thì cần thế đựoc rồi. mọi người nhìn sản phẩm của bạn chứ có ai ngồi mà phân tích code chứ
      Nếu muốn Pro thì chơi ASM đi, ko thì chơi ngôn ngữ khác.
      Tôi bỏ CCS rồi, chơi mikroC Pro for PIC 2011 version 5.01 mới ra
      Pro lắm. !
      P/S: bạn thử xem trên diẽn dàn xem, có ai lại hỏi như bạn ko ? làm 1 băng ?
      cái đó gọi là spam bạn ạ, chứ ko phải là hỏi.
      Những nội dung có rồi, bạn nên xem các bài ngừoi ta pót trứoc, PIC người ta chơi cả chục năm nay, chả lẻ mấy câu hỏi đó ko có ngừoi hỏi sao ?
      Nội quy post bài : "Tìm hiểu trước khi post, ko sẽ del bài vì spam"
      My Face :

      Comment


      • #33
        Cảm ơn anh đã chia sẻ ^^ em sẽ lưu ý. còn MikroC em cũng làm nhiều rồi, em mới chuyển sang CCS, nhưng CCS khó tìm bản ... quá, trial chỉ compile được những chương trình dưới 2K.
        Be quan. Plz contact through email:

        Comment


        • #34
          Nguyên văn bởi Lenh Ho Xem bài viết
          Cảm ơn anh đã chia sẻ ^^ em sẽ lưu ý. còn MikroC em cũng làm nhiều rồi, em mới chuyển sang CCS, nhưng CCS khó tìm bản ... quá, trial chỉ compile được những chương trình dưới 2K.
          Sao lại khó. Tìm trên mạng đầy mà

          To Hieuclubvn : Pro hay không không phải do cái ngôn ngữ mà do cái thuật toán.

          Comment


          • #35
            cho em hỏi : sao khi em viết chuong trình cho lcd, khi biên dịch nó nói không hiểu lệnh lcd_write là gì. hình như em chưa khai báo thư viện gì cho nó phải không ạ.
            Be quan. Plz contact through email:

            Comment


            • #36
              Nguyên văn bởi Lenh Ho Xem bài viết
              cho em hỏi : sao khi em viết chuong trình cho lcd, khi biên dịch nó nói không hiểu lệnh lcd_write là gì. hình như em chưa khai báo thư viện gì cho nó phải không ạ.
              chính xác , phải #include <lcd_4bit.c> vào thì khi dịch mới k lỗi .

              Ngoài lề 1 chút : khi ta sử dụng hàm lcd.c có sẵn (rc4 , rc5 , rc6 là các chân điều khiển , RD4-RD7 : dữ liệu), thì các chân còn lại trong portC , k thể làm việc theo kiểu
              Code:
              #bit RL = 0x06.1 // vd định nghĩa chân role là chân RC1
              ....
              RL=1 ; // kích role
              .....
              RL=0 ; //nhả role
              Tui đã gặp , nên trình bày lại . Ai có cách khắc phục xin chỉ giáo

              Comment


              • #37
                Nguyên văn bởi Zz_Bi_zZ Xem bài viết
                chính xác , phải #include <lcd_4bit.c> vào thì khi dịch mới k lỗi .

                Ngoài lề 1 chút : khi ta sử dụng hàm lcd.c có sẵn (rc4 , rc5 , rc6 là các chân điều khiển , RD4-RD7 : dữ liệu), thì các chân còn lại trong portC , k thể làm việc theo kiểu
                Code:
                #bit RL = 0x06.1 // vd định nghĩa chân role là chân RC1
                ....
                RL=1 ; // kích role
                .....
                RL=0 ; //nhả role
                Tui đã gặp , nên trình bày lại . Ai có cách khắc phục xin chỉ giáo
                Kiểm tra lại mấy đoạn set_tris cho port C trong file LCD xem có phù hợp với mục đích sử dụng các chân còn lại mà ta cần không.
                Nếu đổi khai báo lại các chân trong file LCD.c đó mà không được thì cách khắc phục là đừng có dùng cái LCD.c đó mà bác hãy tự viết lại một cái khác hoặc modify lại các đoạn code có tác động đến RC4, RC5, RC6.
                Đường đến những ngày vinh quang không còn xa
                Con đường chúng ta... chúng ta đã chọn.

                Comment


                • #38
                  Hi,
                  Tiện thể tui gửi luôn file LCD.c tui viết cho LCD2002, có một số hàm chưa code vì chưa cần dùng đến. Bác nào cần thì tham khảo cho vui.
                  Code:
                  /**********************************************
                  *	LCD2002A Driver
                  **********************************************/
                  struct LCD_Interface
                  {
                  	int Unused:1;	// used for external interrupt
                  	int RS:1;
                  	int RW:1;
                  	int E:1;
                  	int Data:4;
                  };
                  /*************************************
                  *	Define instruction code
                  *************************************/
                  #define CLEAR_SCREEN		0b00000001
                  #define RETURN_HOME			0b00000010
                  #define CURSOR_INCREMENT	0b00000110
                  #define CURSOR_DECREMENT	0x00000100
                  #define DISPLAY_SHIFT		0b00000101
                  #define DISPLAY_STOP		0b00000001	// use XOR operand
                  #define DISPLAY_ON			0b00001100	// OR with
                  #define CURSOR_ON			0b00001010	// OR with
                  #define BLINK_ON			0b00001001	// OR with
                  #define DISPLAY_SHIFT_RIGHT	0b00011100
                  #define DISPLAY_SHIFT_LEFT	0b00011000
                  #define CURSOR_SHIFT_RIGHT	0b00010100
                  #define CURSOR_SHIFT_LEFT	0b00010000
                  #define LCD_4BIT_INTERFACE	0x02
                  #define LCD_8BIT_INTERFACE	0x03
                  #define LCD_4BIT_2LINE_5X7	0b00101000
                  #define LCD_8BIT_2LINE_5X7	0b00111000
                  #define CGRAM_SELECT		0b01000000
                  #define DDRAM_SELECT		0b10000000
                  #define LINE_1_BEGIN		0b00000000
                  #define LINE_1_END			0b00100111
                  #define LINE_2_BEGIN		0b01000000
                  #define LINE_2_END			0b01100111
                  #define LINE_LENGTH			LINE_1_END - LINE_1_BEGIN
                  
                  
                  struct LCD_Interface const LCD_READ_TRIS = {1, 0, 0, 0, 0x0F};	// DB7: Busy flag, 1: Busy
                  struct LCD_Interface const LCD_WRITE_TRIS = {1, 0, 0, 0, 0};
                  struct LCD_Interface const LCD_WRITE_INS = {1, 0, 0, 0, 0};
                  struct LCD_Interface const LCD_READ_BUSY = {1, 0, 1, 0, 0};	// Read Busy flag 
                  struct LCD_Interface const LCD_READ_ADDRESS = {1, 0, 1, 0, 0};	// Read Address counter
                  struct LCD_Interface const LCD_WRITE_OPERATION = {1, 1, 0, 0, 0};
                  struct LCD_Interface const LCD_READ_OPERATION = {1, 1, 1, 0, 0};
                  
                  
                  struct LCD_Interface LCD;
                  #byte LCD = getenv("SFR:PORTB")
                  #byte LCD_TRIS = getenv("SFR:TRISB")
                  
                  
                  void LCD_init(void);
                  void LCD_clear(void);
                  void LCD_wait(void);
                  void LCD_write_instruction(unsigned int ins);
                  void LCD_gotoxy(unsigned int x, unsigned int y);
                  void LCD_write_data(unsigned int var);
                  unsigned int LCD_get_address(void);
                  void LCD_shift(int1 dir);
                  void LCD_scroll(void);
                  void LCD_putc(char var);
                  unsigned int LCD_getc(unsigned int x, unsigned int y);
                  
                  
                  void LCD_init(void)
                  {
                  	LCD_TRIS = LCD_WRITE_TRIS;
                  	delay_ms(2);
                  	LCD.RS = 0;
                  	LCD.RW = 0;
                  	LCD.Data = LCD_8BIT_INTERFACE;
                  	LCD.E = 1;
                  	delay_us(50);
                  	LCD.E = 0;
                  	delay_us(50);
                  	LCD.E = 1;
                  	delay_us(50);
                  	LCD.E = 0;
                  	delay_us(50);
                  	LCD.E = 1;
                  	delay_us(50);
                  	LCD.E = 0;
                  	delay_us(50);
                  	LCD.Data = LCD_4BIT_INTERFACE;
                  	LCD.E = 1;
                  	delay_us(50);
                  	LCD.E = 0;
                  	delay_us(50);
                  	LCD_wait();	
                  	LCD_write_instruction(LCD_4BIT_2LINE_5X7);
                  	LCD_clear();
                  	LCD_write_instruction(CURSOR_INCREMENT);
                  	LCD_write_instruction(DISPLAY_ON | CURSOR_ON);
                  	LCD_write_instruction(CURSOR_SHIFT_RIGHT);
                  }
                  void LCD_gotoxy(unsigned int x, unsigned int y)
                  {
                  	if(x > LINE_LENGTH)
                  		x = 1;
                  	if(y != 1)
                  	{
                  		LCD_write_instruction(DDRAM_SELECT + LINE_2_BEGIN + x - 1);
                  	}
                  	else
                  		LCD_write_instruction(DDRAM_SELECT + LINE_1_BEGIN + x - 1);
                  }
                  void LCD_putc(char var)
                  {
                  	unsigned int temp;
                  	
                  	if(var == '\r')
                  		LCD_write_instruction(RETURN_HOME);
                  	else if(var == '\n')
                  	{
                  		temp = LCD_get_address();
                  		temp ^= LINE_2_BEGIN;
                  		LCD_write_instruction(DDRAM_SELECT + temp);
                  	}
                  	else
                  		LCD_write_data(var);
                  }
                  unsigned int LCD_getc(unsigned int x, unsigned int y)
                  {
                  	unsigned int temp;
                  	
                  	LCD_gotoxy(x, y);
                  	LCD_TRIS = LCD_READ_TRIS;
                  	LCD = LCD_READ_OPERATION;
                  	LCD.E = 1;
                  	delay_us(2);
                  	temp = LCD.Data;
                  	LCD.E = 0;
                  	delay_us(2);
                  	LCD.E = 1;
                  	delay_us(2);
                  	temp = (temp << 4) + LCD.Data;
                  	LCD.E = 0;
                  	delay_us(2);
                  	return temp;
                  }
                  
                  
                  void LCD_wait(void)
                  {
                  	unsigned int temp;
                  	
                  	LCD_TRIS = LCD_READ_TRIS;	// set direction for reading
                  	LCD = LCD_READ_BUSY;
                  	do
                  	{
                  		LCD.E = 1;
                  		delay_us(2);
                  		temp = LCD.Data;	// get Busy flag
                  		LCD.E = 0;
                  		delay_us(2);
                  		LCD.E = 1;
                  		delay_us(2);
                  		LCD.E = 0;
                  		delay_us(2);		
                  	}
                  	while(temp >= 0x08);	// still busy
                  }
                  void LCD_write_instruction(unsigned int ins)
                  {
                  	LCD_TRIS = LCD_WRITE_TRIS;
                  	LCD = LCD_WRITE_INS;
                  	LCD.Data = ins >> 4;
                  	LCD.E = 1;
                  	delay_us(2);
                  	LCD.E = 0;
                  	delay_us(2);
                  	LCD.Data = ins & 0x0F;
                  	LCD.E = 1;
                  	delay_us(2);
                  	LCD.E = 0;
                  	delay_us(2);
                  	LCD_wait();
                  }
                  void LCD_write_data(unsigned int var)
                  {
                  	LCD_TRIS = LCD_WRITE_TRIS;	// set direction for writing
                  	LCD = LCD_WRITE_OPERATION;
                  	LCD.Data = var >> 4;	// write high nibble
                  	LCD.E = 1;
                  	delay_us(2);
                  	LCD.E = 0;
                  	delay_us(2);
                  	LCD.Data = var & 0x0F;	// write low nibble
                  	LCD.E = 1;
                  	delay_us(2);
                  	LCD.E = 0;
                  	delay_us(2);
                  	LCD_wait();
                  }
                  unsigned int LCD_get_address(void)
                  {
                  	unsigned int temp;
                  	
                  	LCD_TRIS = LCD_READ_TRIS;
                  	LCD = LCD_READ_ADDRESS;
                  	LCD.E = 1;
                  	delay_us(2);
                  	temp = LCD.Data;
                  	LCD.E = 0;
                  	delay_us(2);
                  	LCD.E = 1;
                  	delay_us(2);
                  	temp = (temp << 4) + LCD.Data;
                  	LCD.E = 0;
                  	return temp;
                  }
                  
                  
                  void LCD_clear(void)
                  {
                  	LCD_write_instruction(CLEAR_SCREEN);
                  	LCD_write_instruction(RETURN_HOME);
                  }
                  void LCD_shift(int1 dir)
                  {
                  	//LCD_write_instruction(DISPLAY_SHIFT);
                  	if(dir)
                  		LCD_write_instruction(DISPLAY_SHIFT_RIGHT);
                  	else
                  		LCD_write_instruction(DISPLAY_SHIFT_LEFT);
                  }
                  void LCD_scroll(void)
                  {
                  }
                  Đường đến những ngày vinh quang không còn xa
                  Con đường chúng ta... chúng ta đã chọn.

                  Comment


                  • #39
                    Em mới trở lại sau 2 tháng, tiếp tục nào các mem
                    Be quan. Plz contact through email:

                    Comment


                    • #40
                      con PIC16F887 nếu khai phá hết thì cũng dùng đc khối các dự án nhỏ nhỏ đấy . Còn vấn đề j nữa cần hỏi thì search google trứoc khi post nhé, k lại bị MOD sờ gáy đấy

                      Comment

                      Về tác giả

                      Collapse

                      Lenh Ho Tìm hiểu thêm về Lenh Ho

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

                      Collapse

                      Đang tải...
                      X