Skip to main content

Program to display 2 rows of information using PIC16F887 microcontroller interface with LCD 16x2

  • Circuit diagram Interface PIC16F887 microcontroller with LCD on Proteus software:

Figure 1. PIC16F887 microcontroller interface with LCD

  • Main program:
Display 2 rows of information on LCD.c
_______________________
    #INCLUDE <16F887.H>
      #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP
        #USE DELAY(CLOCK=20M)
          #INCLUDE<TV_LCD.C>
            UNSIGNED INT I;
              const unsigned char HANG1[16]={"   PIC16F887    "};
                const unsigned char HANG2[16]={"   LCD  16x2    "};
                  VOID MAIN()
                    {
                         SET_TRIS_C(0x00); SET_TRIS_D(0x00); OUTPUT_C(0xFF);
                           LCD_SETUP();
                             LCD_COMMAND(ADDR_LINE1); DELAY_US(10);
                               FOR (I=0;I<16;I++) { LCD_DATA(HANG1[I]);}
                                 LCD_COMMAND(ADDR_LINE2); DELAY_US(10);
                                   FOR (I=0;I<16;I++) { LCD_DATA(HANG2[I]);}
                                     while(TRUE) {}
                                    }
                                      _______________________
                                      • LCD Library:
                                      TV_LCD.c
                                      ____________________
                                        #IFNDEF LCD_RS
                                          #DEFINE LCD_RS PIN_C0
                                            #ENDIF
                                              #IFNDEF LCD_RW
                                                #DEFINE LCD_RW PIN_C1
                                                  #ENDIF
                                                    #IFNDEF LCD_E
                                                      #DEFINE LCD_E PIN_C2
                                                        #ENDIF
                                                          #IFNDEF OUTPUT_LCD
                                                            #define OUTPUT_LCD OUTPUT_D
                                                              #ENDIF
                                                                #DEFINE FUNCTION_SET 0X38
                                                                  #DEFINE DISPLAY_CONTROL 0X0F
                                                                    #DEFINE CLEAR_DISPLAY 0X01
                                                                      #DEFINE ENTRY_MODE 0X06
                                                                        #DEFINE SHIFT_LEFT 0X18
                                                                          #DEFINE SHIFT_RIGHT 0X1C
                                                                            #DEFINE ADDR_LINE1 0X80
                                                                              #DEFINE ADDR_LINE2 0XC0
                                                                                void LCD_COMMAND(UNSIGNED CHAR MDK)
                                                                                  {
                                                                                       OUTPUT_LOW(LCD_RS); OUTPUT_LCD(MDK);
                                                                                         OUTPUT_HIGH(LCD_E); DELAY_US(20);
                                                                                           OUTPUT_LOW(LCD_E); DELAY_US(20);
                                                                                          }
                                                                                            void LCD_DATA(UNSIGNED CHAR MHT)

                                                                                                   OUTPUT_HIGH(LCD_RS); OUTPUT_LCD(MHT);
                                                                                                     OUTPUT_HIGH(LCD_E); DELAY_US(20);
                                                                                                       OUTPUT_LOW(LCD_E); DELAY_US(20);
                                                                                                      }
                                                                                                        VOID LCD_SETUP()

                                                                                                               OUTPUT_LOW(LCD_E);
                                                                                                                 OUTPUT_LOW(LCD_RS);
                                                                                                                   OUTPUT_LOW(LCD_RW);
                                                                                                                     LCD_COMMAND(FUNCTION_SET); DELAY_MS(1);
                                                                                                                       LCD_COMMAND(DISPLAY_CONTROL);
                                                                                                                         LCD_COMMAND(CLEAR_DISPLAY); DELAY_MS(2);
                                                                                                                           LCD_COMMAND(ENTRY_MODE);
                                                                                                                          }
                                                                                                                            ____________________
                                                                                                                            Link to download simulation software:




                                                                                                                            Comments

                                                                                                                            Popular posts from this blog

                                                                                                                            Privacy Policy

                                                                                                                            Introduce We always strive to protect our customers' personal information. Customer Data The application fully commits not to collect and share data with third parties.

                                                                                                                            Bài 2: Dùng vi điều khiển 16F887 điều khiển 8 led đơn sáng dần tắt dần từ phải sang trái mô phỏng trên Proteus

                                                                                                                            Sơ đồ mạch:   Hình 1.  Sơ đồ mạch  điều khiển 8 led đơn sáng dần tắt dần từ phải sang trái Chương trình: #INCLUDE <16F887.H> #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=20M) UNSIGNED INT8 I, X; VOID MAIN() {      SET_TRIS_D(0x00); X=0X00; OUTPUT_D(X); DELAY_MS(500);      WHILE(TRUE)      {            FOR (I=0;I<8;I++)           {                 X = (X<<1)+0X01; OUTPUT_D(X); DELAY_MS(500);           }           FOR (I=0;I<8;I++)           {                 X = (X<<1); OUTPUT_D(X); DELAY_MS(500);           }      } } Giải thích chương trình: Khởi tạo portD là xuất dữ liệu, gán biến X bằng 0x00, xuất ...

                                                                                                                            Bài 1: Dùng vi điều khiển 16F887 điều khiển 8 led đơn sáng tắt mô phỏng trên Proteus

                                                                                                                            Sơ đồ mạch: Hình 1. Sơ đồ điểu khiển led đơn mô phỏng trên Proteus Mạch dùng portD kết nối với 8 led đơn. Mức logic 0 làm led tắt, mức logic 1 làm led sáng.  Chương trình: #INCLUDE <16F887.H> #FUSES NOWDT, PUT, HS, NOPROTECT, NOLVP #USE DELAY(CLOCK=20M) VOID MAIN() {    SET_TRIS_D(0x00);    WHILE(TRUE)    {         OUTPUT_D(0xFF);   DELAY_MS(1000);       OUTPUT_D(0x00); DELAY_MS(1000);    } } Giải thích ý nghĩa chương trình: Hàng thứ nhất “ #INCLUDE <16F887.H> ” là khai báo thư viện đang sử dụng là PIC 16F887. Hàng thứ hai “ #FUSES NOWDT, PUT, HS, NOPROTECT, NOLVP ” là khai báo cấu hình cho PIC. Hàng thứ ba “ #USE DELAY(CLOCK=20M) ” khai báo tần số tụ thạch anh mà vi điều khiển sử dụng, với khai báo trên thì tần số sử dụng là 20MHz. Các hàm định thời là: o DELAY_MS(VALUE) - Thời gian định thời là mili giây. o DELAY_US(VALUE) - Thời gian định thời là µS. Chương trình chính gồm:...