chạy chữ trên LCD

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • phamchihieu
    Thành viên mới
    • Aug 2010
    • 3

    #1

    chạy chữ trên LCD

    các pác nào biết về LCD chỉ giúp em thiết kế thêm cho đoạn code này có thế chạy đc chữ với. em mô phỏng = proteus thì đc rùi nhưng mới chỉ hiển thị đc thôi chứ chưa chạy dòng chữ qua lại đc . code viết trên C compiler:
    #INCLUDE <16F877A.h>
    #FUSES XT,NOWDT,NOPROTECT,NOLVP
    #USE DELAY(CLOCK=4000000)
    #BYTE PORTB=0X06
    #BYTE PORTC=0X07
    #BYTE PORTD=0X08
    #define lcd portB

    CONST UNSIGNED CHAR
    DIG[]={'T','u','y',' ','C','h','o','n',' ','s','o','#'};
    INT8 A=0;
    void lenh(void)
    {
    OUTPUT_LOW(PIN_c0);
    OUTPUT_LOW(PIN_c1);
    OUTPUT_HIGH(PIN_c2);
    OUTPUT_LOW(PIN_c2);
    DELAY_MS(5);
    }
    VOID DU_LIEU(VOID)
    {
    OUTPUT_HIGH(PIN_c0);
    OUTPUT_LOW(PIN_c1);
    OUTPUT_HIGH(PIN_c2);
    OUTPUT_LOW(PIN_c2);
    DELAY_MS(5);
    }
    VOID MAIN(VOID)
    {
    OUTPUT_B(0X38);
    LENH();
    OUTPUT_B(0X0E);
    LENH();
    OUTPUT_B(0X80);
    LENH();

    WHILE(DIG[A]!='#')
    {
    PORTB=DIG[A];
    DU_LIEU();
    DELAY_MS(100);
    A++;
    }
    OUTPUT_B(0XC0);
    LENH();
    DELAY_MS(100);
    OUTPUT_D(0B11111111);

    WHILE(true)
    {
    //*****************************************
    OUTPUT_D(0B11111110);
    DELAY_MS(10);
    IF(INPUT(PIN_D4)==0)//CHO KHI D4 XUONG 0
    {
    OUTPUT_B(0X37);//GHI7
    DU_LIEU();
    DELAY_MS(150);
    }
    IF(INPUT(PIN_D5)==0)//CHO KHI D5 XUONG 0
    {
    OUTPUT_B(0X38);//GHI 8
    DU_LIEU();
    DELAY_MS(150);
    }
    IF(INPUT(PIN_D6)==0)//CHO KHI D6 XUONG 0
    {
    OUTPUT_B(0X39);//GHI 9
    DU_LIEU();
    DELAY_MS(150);
    }
    IF(INPUT(pin_D7)==0)//CHO KHI D7 XUONG 0
    {
    OUTPUT_B('H');//GHI h
    DU_LIEU();
    DELAY_MS(150);
    }
    //************************************************
    OUTPUT_D(0B11111101);
    DELAY_MS(10);
    IF(INPUT(pin_D4)==0)//CHO KHI D4 XUONG 0
    {
    OUTPUT_B(0X34);//GHI 4
    DU_LIEU();
    DELAY_MS(150);
    }
    if(input(pin_d5)==0)//cho khi d5 xuong 0
    {
    OUTPUT_B(0X35);//GHI 5
    DU_LIEU();
    DELAY_MS(150);
    }
    if(input(pin_d6)==0)//cho khi d6 xuong 0
    {
    OUTPUT_B(0X36);//GHI 6
    DU_LIEU();
    DELAY_MS(150);
    }
    if(input(pin_d7)==0)//cho khi d7 xuong 0
    {
    OUTPUT_B('I');//GHI i
    DU_LIEU();
    DELAY_MS(150);
    }
    //******************************************
    OUTPUT_D(0B11111011);
    DELAY_MS(10);
    if(INPUT(PIN_D4)==0)//CHO KHI D4 XUONG 0
    {
    OUTPUT_B(0X31);//GHI 1
    DU_LIEU();
    DELAY_MS(150);
    }
    if(input(pin_d5)==0)//cho khi d5 xuong 0
    {
    OUTPUT_B(0X32);//GHI 2
    DU_LIEU();
    DELAY_MS(150);
    }
    if(input(pin_d6)==0)//cho khi d6 xuong 0
    {
    OUTPUT_B(0X33);//GHI 3
    DU_LIEU();
    DELAY_MS(150);
    }
    if(input(pin_d7)==0)//cho khi d7 xuong 0
    {
    OUTPUT_B('E');//GHI e
    DU_LIEU();
    DELAY_MS(150);
    }
    //************************************************** *
    OUTPUT_D(0B11110111);
    DELAY_MS(10);
    if(INPUT(PIN_D4)==0)//CHO KHI D4 XUONG 0
    {
    OUTPUT_B('*');//GHI *
    DU_LIEU();
    DELAY_MS(150);
    }
    if(input(pin_d5)==0)//cho khi d5 xuong 0
    {
    OUTPUT_B(0X30);//GHI 0
    DU_LIEU();
    DELAY_MS(150);
    }
    if(input(pin_d6)==0)//cho khi d6 xuong 0
    {
    OUTPUT_B(0X01);//clear
    DU_LIEU();
    DELAY_MS(150);
    }
    if(input(pin_d7)==0)//cho khi d7 xuong 0
    {
    portB='U';//GHI u
    DU_LIEU();
    DELAY_MS(150);
    } } }
  • katllu
    Thành viên chính thức
    • Jul 2009
    • 49

    #2
    Bạn có thể tham khảo đoạn code sau của TME
    1. File LCD.c
    #define rs PIN_B4
    //rw connect gnd
    #define enabled PIN_B5
    #define DB0 PIN_B0
    #define DB1 PIN_B1
    #define DB2 PIN_B2
    #define DB3 PIN_B3
    char const lcd_type=2;
    char const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};
    //=======================================
    //=======================================
    void make_out_data(char buffer_data)
    {
    output_bit(DB0,bit_test(buffer_data,0));
    output_bit(DB1,bit_test(buffer_data,1));
    output_bit(DB2,bit_test(buffer_data,2));
    output_bit(DB3,bit_test(buffer_data,3));
    }
    //===================================
    //===================================
    void lcd_send_nibble(char buffer_nibble)
    {
    make_out_data(buffer_nibble);
    delay_us(10);
    output_high(enabled);
    delay_us(10);
    output_low(enabled);
    }
    //====================================
    //====================================
    void lcd_send_byte( char address, char n )
    {
    output_low(rs); //rs= = 0;
    delay_ms(1);
    output_bit(rs,address);//lcd.rs = address;
    delay_us(20);
    delay_us(20);
    output_low(enabled);//lcd.enable = 0;
    lcd_send_nibble(n >> 4);
    lcd_send_nibble(n & 0xf);
    }
    //===============================================
    //===============================================
    void lcd_init()
    {
    char i;
    //set_tris_lcd(LCD_WRITE);
    output_low(rs); //lcd.rs = 0;
    //output_low(rw); //lcd.rw = 0;
    output_low(enabled); //lcd.enable = 0;
    delay_ms(200);
    for(i=1;i<=3;++i)
    {
    lcd_send_nibble(3);
    delay_ms(10);
    }
    lcd_send_nibble(2);
    for(i=0;i<=3;++i)
    lcd_send_byte(0,LCD_INIT_STRING[i]);
    }
    //================================================
    //================================================
    void lcd_gotoxy( char x, char y)
    {
    char address;
    switch(y) {
    case 1 : address=0x80;break;
    case 2 : address=0xc0;break;
    case 3 : address=0x94;break;
    case 4 : address=0xd4;break;
    }
    address=address+(x-1);
    lcd_send_byte(0,0x80|address);
    }
    //=================================================
    //=================================================
    void lcd_putc( char c) {
    switch (c) {
    case '\f' :
    lcd_send_byte(0,1);
    delay_ms(2);
    break;
    case '\n' :
    lcd_gotoxy(1,2);
    break;
    case '\b' :
    lcd_send_byte(0,0x10);
    break;
    default :
    lcd_send_byte(1,c);
    break;
    }
    }
    //================================================== ==
    void LCD_Command(int cm);
    void LCD_ShiftLeft(void);
    void LCD_ShiftRight(void);
    void LCD_MoveRight(char p);
    void LCD_MoveLeft(char p);
    void LCD_String(char*s,int dly);
    void LCD_clear (void);

    void LCD_Command(int cm){
    lcd_send_byte(0,cm);
    }

    void LCD_ShiftLeft(void){
    lcd_send_byte(0,0x18);
    }

    void LCD_ShiftRight(void){
    lcd_send_byte(0,0x1C);
    }

    void LCD_MoveRight(char p){
    char i;
    for(i=0;i<p;i++){
    LCD_ShiftRight();
    delay_ms(100);
    }
    }

    void LCD_MoveLeft(char p){
    char i;
    for(i=0;i<p;i++){
    LCD_ShiftLeft();
    delay_ms(100);
    }
    }

    void strcpy(char*s1,char*s2) {
    while(*s1++ == *s2++);
    }

    void LCD_String(char*s, int dly) {
    while(*s!=0) {
    lcd_putc(*s++);
    delay_ms(dly);
    }
    }

    void LCD_clear(void){
    LCD_Command(0x01);
    }
    2. File LCD demo.c
    #include <16f877A.h>
    #fuses HS, NOLVP, NOWDT, NOPROTECT
    #use delay (clock=12000000) //Use built-in function: delay_ms() & delay_us()
    #include "LCD.c" //use module function

    void main(void)
    {

    while(true)
    {
    lcd_init();
    lcd_gotoxy(21,1);
    printf(lcd_putc,"FPT-APTECH");
    lcd_gotoxy(18,2);
    printf(lcd_putc,"Katllu Solution");

    lcd_moveLeft(16);
    delay_ms(500);

    lcd_init();
    lcd_gotoxy(3,1);
    printf(lcd_putc, "The best of");
    lcd_gotoxy (1,2);
    printf(lcd_putc, "PIC, AVR, 8051...");
    delay_ms(500);

    lcd_moveright(16);
    }
    }
    Chúc bạn thành công!

    Comment

    • sp_vn
      Thành viên mới
      • May 2009
      • 8

      #3
      Code chữ chạy, theo mình bạn chỉ cần hiểu thuật toán là làm được mì ăn liền à.
      Thuật toán:
      - VD dòng chữ cậu chạy lưu trong trong 1 string dạng ST char[]="Doan chu can hien thi" (Tự tra cú pháp mà hoàn thiện nhá)
      - Bạn cần thêm hàm độ dài trong "string.h" (có thể copy sang main.c thì ko phải #include tốn ram)
      - Bạn muốn cho dòng chữ chạy từ trái sang phải chẳng hạn. VD: ST của bạn có ký tự đầu tiên ở tọa độ 1,1. Cho chữ chạy sang trái thì sẽ là tọa độ 2,1 --> 3,1 --> 4,1
      Như vậy bạn làm 1 hàm FOR
      for(i=1;i<=3;i++)
      {//Code hiển thị
      }
      Code hiển thị bao gồm
      + GotoXY tới tọa độ (i,1) với i như trên
      + Hiển thị string ST lên màn hình
      + GotoXY tới tọa độ i-1,1 xóa ký tự thừa (ký tự này sót lại từ lần hiển thị trước)
      + Hàm delay để có thể thấy quá trình chạy chữ
      Chữ dịch từ trái sang phải hay từ phải sang trái cũng tương tự, có điều từ phải sang trái thì xóa ký tự thừa phải dùng đến hàm đếm độ dài xâu
      Đây chỉ là dạng thuật toán thô cho các bạn hiểu cách cho chữ chạy, còn tùy vào sự khéo léo mà làm nó đẹp hơn và nhiều tính năng hơn :x

      Comment

      • adgjmptt
        Thành viên mới
        • May 2010
        • 21

        #4
        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!
        Last edited by adgjmptt; 12-06-2011, 18:48.

        Comment

        • tdm
          Thành viên tích cực
          • Sep 2005
          • 349

          #5
          Nguyên văn bởi adgjmptt Xem bài viết
          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!
          void lcd_send_byte(0, 0x0f)
          |

          Comment

          • tdm
            Thành viên tích cực
            • Sep 2005
            • 349

            #6
            Nguyên văn bởi adgjmptt Xem bài viết
            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!
            lcd_send_byte(0, 0x0f)
            Code:
            #include <16F877A.h>
            #device *=16 adc=10
            #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
            #use delay(clock=20000000)
            #include <lcd.c>
            #define LCD_DATA_PORT getenv("SFR:PORTD")  
            #define LCD_ENABLE_PIN  PIN_D0                                    
            #define LCD_RS_PIN      PIN_D1                                    
            #define LCD_RW_PIN      PIN_D2    
            #define LCD_DATA4       PIN_D4                                    
            #define LCD_DATA5       PIN_D5                                    
            #define LCD_DATA6       PIN_D6                                    
            #define LCD_DATA7       PIN_D7                                    
            main()
            {
            lcd_init();
            lcd_send_byte(0, 0x0f);//nhap nhay con tro
                     lcd_gotoxy(1,1);     // cot 1 hang 1
                     lcd_putc("MICROCHIP_16F877A");
                     lcd_gotoxy(1,2);
                     lcd_putc(" COMPILE CCSC ");
             while(1)
             {
             }
            }
            |

            Comment

            • adgjmptt
              Thành viên mới
              • May 2010
              • 21

              #7
              Cho e hỏi tiếp lệnh void lcd_send_nibble(BYTE n) có phải là đọc 1 byte từ LCD k??

              Comment

              • htpcntp
                Thành viên mới
                • May 2012
                • 2

                #8
                có ai biết viết code hiển thị LCD 2 dòng bằng assembly chạy từ phải qua trái ko? em đang rất cần, ai biết xin giúp e với

                Comment

                • 120291het
                  Thành viên mới
                  • May 2011
                  • 13

                  #9
                  mình đang viết code bằng XC8, do thư viện hạn chế nên các code đều viết lại, khi viết các lệnh trong lcd.c có chỗ mình không hiểu nên không viết được, có bạn nào hoặc tiền bối nào biết xin chỉ giáo.
                  ////////////////////
                  unsigned char lcd_get_byte(unsigned char rs)
                  {
                  BYTE_VAL b;

                  LCD_DATA4_TRIS = 1;
                  LCD_DATA5_TRIS = 1;
                  LCD_DATA6_TRIS = 1;
                  LCD_DATA7_TRIS = 1;

                  LCD_RW = 1;
                  LCD_RS = 0;
                  if(rs) LCD_RS = 1;
                  __delay_us(20);
                  LCD_EN = 1;
                  __delay_us(20);

                  b.bits.b7 = LCD_DATA7;
                  b.bits.b6 = LCD_DATA6;
                  b.bits.b5 = LCD_DATA5;
                  b.bits.b4 = LCD_DATA4;

                  LCD_EN = 0;
                  __delay_us(20);
                  LCD_EN = 1;
                  __delay_us(20);
                  b.bits.b3 = LCD_DATA7;
                  b.bits.b2 = LCD_DATA6;
                  b.bits.b1 = LCD_DATA5;
                  b.bits.b0 = LCD_DATA4;
                  LCD_EN = 0;

                  return b.Val;
                  }
                  ///////////////////
                  trên đoạn code trên mình không hỉu chỗ các dòng:
                  b.bits.b3 = LCD_DATA7; và các dòng tương tự
                  còn dòng đầu tiên trong code: BYTE_VAL b; có nghĩa là gì vậy???
                  Mong được chỉ dẫn để hoàn thành công việc!
                  Thank kiu very much!

                  Comment

                  • 120291het
                    Thành viên mới
                    • May 2011
                    • 13

                    #10
                    hỏng có ai online sao ta????

                    Comment

                    • thanh_nhan93
                      Thành viên tích cực
                      • Apr 2009
                      • 289

                      #11
                      Chạy chữ trên lcd 16bit dùng pic 16f84a

                      Tình hình là thức trắng đêm để viết code cho chạy chữ happy new year trên lcd, dùng hợp ngữ để viết nhưng chẳng hiểu sao, viết xong biên dịch lại gặp lỗi mà em sữa hoài không xong nên em xin post lên để nhờ mọi người sữa dùm đoạn code cho em với.
                      Đoạn code nó như sau :
                      PHP Code:
                      ;********************************************************
                      ;author : Le Thanh Nhan
                      ;Xuat ky tu len lcd
                      ;source code : Le Duy Phi
                      ;Date : 01-01-2013
                      list p=16F84A ;set proccesor type
                      #include p16f84A.inc ; 
                      __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
                      cblock H'0C' ;
                             count ; thanh ghi dem cho delay
                             character ; bo dem so ky tu xuat ra lcd
                      endc
                      ; PorA.0 Rs
                      ; PortA.1 Rw
                      ; PortA.2 E
                      org 00h ; start program at reset vector
                      Main  ; thiet lap port va lcd
                            CALL lcd_Port ; set up ports
                            CALL lcd_Init ; set up lcd
                      ;*************************************************************************
                            BCF PORTA,1 ; chon lcd o che do write
                      ;*************************************************************************
                            MOVLW H'80' ; Xuat du lieu ra dong 1 
                            CALL LCD_COMMAN
                            CLRF Character ; xoa bo dem ky tu
                      Get_Char_1 movf character,W ; chuyen 1 ky tu ra thanh ghi W
                                 call TABLE_1 ; dung bang ky tu
                                 iorlw 00h ; retlw
                                 btfsc STATUS,Z ; check for end message
                                 goto MESSAG_2 ; va ket thuc neu xong
                                 ;
                                 call LCD_DATA ; neu chua xong dua ky tu ra lcd
                                 incf Character,F ; cong 1 vao bo dem
                                 goto Get_Char_1 ; 
                      MESSAG_2   MOVLW H'C0' ; xuat du lieu ra dong 1
                                 call LCD_COMMAN
                                 CLRF Chacracter ; xoa bo dem ky tu
                      Get_Char_2 movf Character,W;dua 1 ky tu ra W
                                 call TABLE_2 ; dung bang 2 
                                 iorlw 00h ; retlw
                                 btfsc STATUS,Z ; check for end of messag
                                 goto end_message ; va ket thuc neu xong
                                 ;
                                 call LCD_DATA ; neu chua xong dua ky tu ra lcd
                                 incf Character,F; cong 1 vao bo dem
                                 goto Get_Char_2 ; lam lai 
                      ;****************************************************************************
                      end_message goto end_message
                      ;****************************************************************************
                      TABLE_1 addwf PCL,F ;
                              retlw 'H'
                              retlw 'A'
                              retlw 'P'
                              retlw 'P'
                              retlw 'Y'
                              retlw ' '
                              retlw 'N'
                              retlw 'E'
                              retlw 'W'
                              retlw ' '
                              retlw 'Y'
                              retlw 'E'
                              retlw 'A'
                              retlw 'R'
                              retlw '1'
                              retlw '3'
                              retlw 0 ;end of message
                      ;********************************************************************************
                      TABLE_2 addwf PCL,F ;
                              retlw 'T'
                              retlw 'H'
                              retlw 'A'
                              retlw 'N'
                              retlw 'H'
                              retlw ' '
                              retlw 'N'
                              retlw 'H'
                              retlw 'A'
                              retlw 'N'
                              retlw ' '
                              retlw 'K'
                              retlw 'U'
                              retlw '1'
                              retlw '2'
                              retlw ' '
                              retlw 0 ;end of message   
                      ;**************************************************************************************
                      LCD_PORT ; SET THE LCD
                      Enable 
                            ; line to outputs
                            BSF STATUS,RP0 ; CHON BANH THANH GHI 1
                            MOVLW B'11111000' ; SET LOWER 3 BIT
                            MOVWF TRISA ; DIGITAL 
                            CLRF TRISB ; SET PORT B
                            BCF STATUS,RP0 ; QUAY LAI BANK 1
                            ;
                            BCF PORTA,2;
                            RETURN 
                      ;******************************************************************************************
                      ;CHU Y : RS = 0 IS COMMAN RS = 1 IS DATA
                      ;*******************************************************************************************
                      LCD_Init MOVLW H'38' ;MODE 8 BITS
                               CALL LCD_COMMAN
                               CALL Delay_5ms;
                      
                               MOVLW H'0C' ;DISPLAY ON
                               CALL LCD_COMMAN
                               CALL Delay_5ms
                               MOVLW H'06' ;
                               CALL LCD_COMMAN
                               CALL Delay_5ms ;
                               MOVLW H'01' ;
                               CALL LCD_COMMAN ;
                               RETURN
                      ;***************************************************************************************************
                      LCD_COMMAN ; 
                                 BSF PORTA,0 ;
                                 MOVWF PORB ;
                                 CALL LCD_Enable ;
                                 RETURN 
                      ;*****************************************************************************************************
                      LCD_DATA ;
                                 BSF PORTA,0 ;
                                 MOVWF PORTB ;
                                 CALL LCD_Enable ;
                                 RETURN 
                      ;****************************************************************************************************
                      LCD_Enable BSF PORTA,2 ; 
                                 CALL Delay_5ms ;
                                 BCF PORTA,2 ;
                                 RETURN ;
                      ;******************************************************************************************************
                      Delay_5ms CALL DELAY_1MS
                                CALL DELAY_1MS
                                CALL DELAY_1MS
                                CALL DELAY_1MS
                                CALL DELAY_1MS
                                RETURN 
                      DELAY_1MS 
                                CLRF COUNT ; 1u
                      HERE      NOP 
                                DECFSZ COUNT,1 ; 1u
                                GOTO HERE ; 2u
                                RETURN ; 2u
                      End 
                      
                      Mong các cao thủ giúp em với ạ.
                      Tiện thể xin được : Happy new year!hi
                      |

                      Comment

                      • thientanvt
                        Thành viên tích cực
                        • Mar 2010
                        • 234

                        #12
                        Trời ơi, chi mà mệt thế dùng C có vài dòng là ok liền mà , kể cả CCS cũng chỉ ít dòng là xong.

                        Comment

                        • cntlmh
                          Thành viên mới
                          • Apr 2012
                          • 4

                          #13
                          Nguyên văn bởi sp_vn Xem bài viết
                          Code chữ chạy, theo mình bạn chỉ cần hiểu thuật toán là làm được mì ăn liền à.
                          Thuật toán:
                          - VD dòng chữ cậu chạy lưu trong trong 1 string dạng ST char[]="Doan chu can hien thi" (Tự tra cú pháp mà hoàn thiện nhá)
                          - Bạn cần thêm hàm độ dài trong "string.h" (có thể copy sang main.c thì ko phải #include tốn ram)
                          - Bạn muốn cho dòng chữ chạy từ trái sang phải chẳng hạn. VD: ST của bạn có ký tự đầu tiên ở tọa độ 1,1. Cho chữ chạy sang trái thì sẽ là tọa độ 2,1 --> 3,1 --> 4,1
                          Như vậy bạn làm 1 hàm FOR
                          for(i=1;i<=3;i++)
                          {//Code hiển thị
                          }
                          Code hiển thị bao gồm
                          + GotoXY tới tọa độ (i,1) với i như trên
                          + Hiển thị string ST lên màn hình
                          + GotoXY tới tọa độ i-1,1 xóa ký tự thừa (ký tự này sót lại từ lần hiển thị trước)
                          + Hàm delay để có thể thấy quá trình chạy chữ
                          Chữ dịch từ trái sang phải hay từ phải sang trái cũng tương tự, có điều từ phải sang trái thì xóa ký tự thừa phải dùng đến hàm đếm độ dài xâu
                          Đây chỉ là dạng thuật toán thô cho các bạn hiểu cách cho chữ chạy, còn tùy vào sự khéo léo mà làm nó đẹp hơn và nhiều tính năng hơn :x
                          Nếu dễ vậy sao bạn không giúp cho trót là hiển thị một chuỗi chạy trên LCD luôn nhỉ? hi, nếu vậy thì thanks bạn nhiều, đỡ mất công mình mất mấy đêm với cái đầu ngu muội... . Ví dụ hiển thị: "ngay mai la ngay 11.10.2013, la mot ngay dep troi ban nhi". Thanks bạn nhiều....

                          Comment

                          • shockstyle
                            Thành viên mới
                            • Jul 2012
                            • 4

                            #14
                            bác nào có cái code nào chạy ồi k?

                            Comment

                            • shockstyle
                              Thành viên mới
                              • Jul 2012
                              • 4

                              #15
                              Nguyên văn bởi katllu Xem bài viết
                              Bạn có thể tham khảo đoạn code sau của TME
                              1. File LCD.c

                              2. File LCD demo.c

                              Chúc bạn thành công!
                              e chưa hiểu cái code của bác lắm bác cho e cái mail để hỏi chi tiết vs! thank <3!

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...