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 giá trị của X ra portD làm 8 led tắt, delay. Vòng lặp for thứ nhất thực hiện 8 lần: tiến hành xoay trái dữ liệu của X và cộng với 0x01. Khi xoay trái dữ liệu thì số 0 được đẩy vào, cộng với 0x01 là để đẩy số 1 vào X. Dữ liệu biến X được xuất ra portD điều khiển led sáng dần, sau 8 lần thì X sẽ bằng 1111_1111 – 8 led sáng hết. Vòng lặp for thứ hai thực hiện