Thông báo

Collapse
No announcement yet.

lap trinh cho LCD

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

  • #16
    lap tinh lcd

    chao cac dai ca trong dien dan hien gio em dang muon lap trinh dong ho so hien thi bang LCD nhung ko biet phai lam sao,dai ca nao biet xin huong dan dum em voi.Em dang su dung 89s52 va real time 12887.Em voi hoc lap trinh nen ko danh lam .Cam on cac dai ca
    |

    Comment


    • #17
      nói như bạn không làm được phần nào. hiển thị lcd hay code cho đồng hồ.

      Comment


      • #18
        Mình đang học lập trình C cho 8051. Làm mạch đo lượng mưa hiển thị lên lcd và giao tiếp với máy tính, nhưng chưa làm xong, khó quá. Có ai biết chỉ giúp mình với.

        Comment


        • #19
          Chao cac bac ,em cung dang phai lam cai de tai giao tiep LCD voi cong LPT .LCD loai nao cung duoc ,De tai chi yeu cau lam mach va viet chuong trinh hien thi chu chay tren LCD .Chuong trinh bang C hoac ASM .Nhung em lai chua biet gi ve no ,cac bac co the chi giup em cach tiep can voi no duoc khong ?Cam on cac bac nhieu

          Comment


          • #20
            cac anh chi oi anh chi nao co tai lieu ve lap trinh PIC khong? bang tieng viet do! anh chi nao co cho em vay em cam on
            |

            Comment


            • #21
              Minh cung vua moi viet dc cho LCD chay vong lap luon . Neu thich thi lien he voi minh nha
              mail cua minh la nguyenanhdungAMT@gmail.com
              Enjoy,

              Comment


              • #22
                Nguyên văn bởi tctrieu Xem bài viết
                De minh gui cho ban 1 file dung 8951 hien thi tren lcd 2x16 dong chu chay . Ban muon hien thi cai khac thi chi viec thay dong chu cua minh thanh dong chu cua ban la xong
                bác ơi gởi cho em 1 bản với ( email cua e là timlai_tinhxua29@yahoo.
                com)

                Comment


                • #23
                  Hi,
                  Đây là code giao tiếp LCD16x2 dùng phương pháp 4bit (P0.4-P0.7), tần số thạch anh là 11.0592MHz, nếu các bác dùng thạch anh khác thì chỉnh lại mấy cái delay.
                  Code:
                  #include<reg52.h>
                  #include<intrins.h>
                  
                  
                  /*************************************
                  *   Define instruction code
                  *************************************/
                  #define CLEAR_SCREEN      0x01
                  #define RETURN_HOME         0x02
                  #define CURSOR_INCREMENT   0x06
                  #define CURSOR_DECREMENT   0x04
                  #define DISPLAY_SHIFT      0x05
                  #define DISPLAY_STOP      0x01   // use XOR operand
                  #define DISPLAY_ON         0x0C   // OR with
                  #define CURSOR_ON         0x0A   // OR with
                  #define BLINK_ON         0x09   // OR with
                  #define DISPLAY_SHIFT_RIGHT   0x1C
                  #define DISPLAY_SHIFT_LEFT   0x18
                  #define CURSOR_SHIFT_RIGHT   0x14
                  #define CURSOR_SHIFT_LEFT   0x10
                  #define LCD_4BIT_INTERFACE   0x20
                  #define LCD_8BIT_INTERFACE   0x30
                  #define LCD_4BIT_2LINE_5X7	0x28
                  #define LCD_8BIT_2LINE_5X7   0x38
                  #define CGRAM_SELECT      0x40
                  #define DDRAM_SELECT      0x80
                  #define LINE_1_BEGIN      0x00
                  #define LINE_1_END         0x0F
                  #define LINE_2_BEGIN      0x40
                  #define LINE_2_END         0x4F
                  
                  
                  #define LINE_LENGTH         LINE_1_END - LINE_1_BEGIN + 1
                  
                  
                  #define LCD_DATA	P0
                  
                  
                  sbit LCD_RS = P2^0;
                  sbit LCD_RW = P2^1;
                  sbit LCD_EN = P2^2;
                  
                  
                  void LCD_init(void);
                  void LCD_clear(void);
                  void LCD_wait(void);
                  void LCD_write_instruction(unsigned char ins);
                  void LCD_gotoxy(unsigned char x, unsigned char y);
                  void LCD_write_data(unsigned char var);
                  unsigned int LCD_get_address(void);
                  void LCD_shift(bit dir);
                  void LCD_scroll(void);
                  void LCD_putc(char var);
                  void LCD_backspace(void);
                  unsigned int LCD_getc(unsigned char x, unsigned char y);
                  void delay_us(unsigned int value);
                  
                  
                  /**********************************************************
                  
                  
                  us delay subroutine (4.34us)
                  
                  
                   **********************************************************/
                  void delay_nop()
                  {
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                  }
                  
                  
                  /**********************************************************
                  
                  
                  ms delay subroutine
                  
                  
                   **********************************************************/
                  void delay_ms(unsigned int ms)
                  {
                    unsigned char k;
                    while (ms--)
                    {
                      for (k = 0; k < 114; k++);
                    }
                  }
                  
                  
                  void LCD_init(void)
                  { 
                     LCD_EN = 0;
                     LCD_RS = 0;
                     LCD_RW = 0;
                     LCD_DATA &= 0x0F;
                     LCD_DATA += LCD_8BIT_INTERFACE;
                     delay_nop();
                     LCD_EN = 1;
                     delay_nop();
                     LCD_EN = 0;
                     delay_ms(5);
                     LCD_DATA &= 0x0F;
                     LCD_DATA += LCD_8BIT_INTERFACE;
                     delay_nop();
                     LCD_EN = 1;
                     delay_nop();
                     LCD_EN = 0;
                     delay_ms(1);
                     LCD_DATA &= 0x0F;
                     LCD_DATA += LCD_8BIT_INTERFACE;
                     delay_nop();
                     LCD_EN = 1;
                     delay_nop();
                     LCD_EN = 0;
                     delay_ms(1);
                     LCD_DATA &= 0x0F;
                     LCD_DATA += LCD_4BIT_INTERFACE;
                     delay_nop();
                     LCD_EN = 1;
                     delay_nop();
                     LCD_EN = 0;
                     delay_us(5000);
                     LCD_write_instruction(LCD_4BIT_2LINE_5X7);
                     LCD_wait();   
                     LCD_clear();
                     LCD_write_instruction(RETURN_HOME);
                     LCD_write_instruction(CURSOR_INCREMENT);
                     LCD_write_instruction(DISPLAY_ON);
                     LCD_write_instruction(CURSOR_SHIFT_RIGHT);
                  }
                  void LCD_gotoxy(unsigned char x, unsigned char 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 char 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);
                  }
                  void LCD_puts(char *str)
                  {
                  	unsigned char i;
                  
                  
                  	i = 0;
                  	while(str[i]) LCD_putc(str[i++]);
                  }
                  unsigned int LCD_getc(unsigned char x, unsigned char y)
                  {
                     unsigned char temp;
                     
                     LCD_gotoxy(x, y);
                     LCD_RS = 1;
                     LCD_RW = 1;
                     LCD_EN = 1;
                     delay_nop();
                     temp = LCD_DATA & 0xF0;
                     LCD_EN = 0;
                     delay_nop();
                     LCD_EN = 1;
                     delay_nop();
                     temp += (LCD_DATA >> 4);
                     LCD_EN = 0;
                     delay_nop();
                     return temp;
                  }
                  
                  
                  void LCD_wait(void)
                  {
                     unsigned char temp;
                     
                     LCD_RS = 0;
                     LCD_RW = 1;
                     LCD_DATA |= 0xF0;
                     do
                     {
                        LCD_EN = 1;
                        delay_nop();
                        temp = LCD_DATA;   // get Busy flag
                        LCD_EN = 0;
                        delay_nop();
                        LCD_EN = 1;
                        delay_nop();
                        LCD_EN = 0;
                        delay_nop();      
                     }
                     while(temp >= 0x80);   // still busy
                  }
                  void LCD_write_instruction(unsigned char ins)
                  {
                     LCD_wait();
                     LCD_RS = 0;
                     LCD_RW = 0;
                     LCD_DATA &= 0x0F;
                     LCD_DATA += (ins & 0xF0);
                     delay_nop();
                     LCD_EN = 1;
                     delay_nop();
                     LCD_EN = 0;
                     LCD_DATA &= 0x0F;
                     LCD_DATA += (ins << 4);
                     delay_nop();
                     LCD_EN = 1;
                     delay_nop();
                     LCD_EN = 0;
                     delay_nop();
                  }
                  void LCD_write_data(unsigned char var)
                  {
                     LCD_wait();
                     LCD_RS = 1;
                     LCD_RW = 0;
                     LCD_DATA &= 0x0F;
                     LCD_DATA += (var & 0xF0);   // write high nibble
                     delay_nop();
                     LCD_EN = 1;
                     delay_nop();
                     LCD_EN = 0;
                     delay_nop();
                     LCD_DATA &= 0x0F;
                     LCD_DATA += (var << 4);   // write low nibble
                     delay_nop();
                     LCD_EN = 1;
                     delay_nop();
                     LCD_EN = 0;
                     //delay_nop();
                  }
                  unsigned int LCD_get_address(void)
                  {
                     unsigned char temp;
                     
                     LCD_RS = 0;
                     LCD_RW = 1;
                     LCD_EN = 1;
                     delay_nop();
                     temp = LCD_DATA & 0xF0;
                     LCD_EN = 0;
                     delay_nop();
                     LCD_EN = 1;
                     delay_nop();
                     temp += (LCD_DATA >> 4);
                     LCD_EN = 0;
                     return temp;
                  }
                  
                  
                  void LCD_clear(void)
                  {
                     LCD_write_instruction(CLEAR_SCREEN);
                     LCD_write_instruction(RETURN_HOME);
                  }
                  void LCD_shift(bit 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)
                  {
                  }
                  void LCD_backspace(void)
                  {
                     unsigned char add;
                     
                     add = LCD_get_address();
                     if(add > LINE_1_BEGIN)
                     {
                        LCD_write_instruction(CURSOR_SHIFT_LEFT);
                        LCD_putc(' ');
                        LCD_write_instruction(CURSOR_SHIFT_LEFT);
                     }   
                  }
                  void delay_us(unsigned int value)
                  {
                  	while(value--);
                  }
                  Có một vài hàm (function) chưa dùng nên chưa test nhưng mà mấy cái để khởi động (init) và hiển thị ký tự, xâu (string) và gotoxy đều ổn cả. Lưu ý sau khi cấp nguồn phải delay một khoảng thời gian khá khá (cỡ 1s thì tốt) rồi mới gọi hàm init.
                  Thân ái.
                  Đường đến những ngày vinh quang không còn xa
                  Con đường chúng ta... chúng ta đã chọn.

                  Comment

                  Về tác giả

                  Collapse

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

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

                  Collapse

                  Đang tải...
                  X