Thông báo

Collapse
No announcement yet.

chạy chữ trên LCD

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

  • 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);
    } } }

  • #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


    • #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


      • #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, 19:48.

        Comment


        • #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


          • #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


            • #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


              • #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


                • #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


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

                    Comment


                    • #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,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
                      ,chuyen 1 ky tu ra thanh ghi W
                                 call TABLE_1 
                      dung bang ky tu
                                 iorlw 00h 
                      retlw
                                 btfsc STATUS
                      ,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
                      ,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
                      ,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
                      ,Fcong 1 vao bo dem
                                 
                      goto Get_Char_2 lam lai 
                      ;****************************************************************************
                      end_message goto end_message
                      ;****************************************************************************
                      TABLE_1 addwf PCL,;
                              
                      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,;
                              
                      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,;
                                 
                      MOVWF PORB ;
                                 
                      CALL LCD_Enable ;
                                 RETURN 
                      ;*****************************************************************************************************
                      LCD_DATA ;
                                 
                      BSF PORTA,;
                                 
                      MOVWF PORTB ;
                                 
                      CALL LCD_Enable ;
                                 RETURN 
                      ;****************************************************************************************************
                      LCD_Enable BSF PORTA,
                                 
                      CALL Delay_5ms ;
                                 
                      BCF PORTA,;
                                 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
                      ,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


                      • #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


                        • #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


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

                            Comment


                            • #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...
                              X