Thông báo

Collapse
No announcement yet.

Lập trình hiển thị LCD bằng Assembler ( tutorial)

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

  • #16
    To tam1234:
    Gram là cái gì hay vây hả bác ?
    Bác cho hỏi cái bác nói đó có phải là LCD đồ họa không. Tôi đang cần tìm một cái LCD có thể lập trình để vẽ lên đó chữ tiếng Việt có dấu và biểu tượng tùy ý, mình có thể khống chế từng điểm ảnh của nó. Nếu bác biết thì giới thiệu cho tôi cái nào như thể và tài liệu hưỡng dẫn cách dùng cùng nơi mua
    Cảm ơn bác nhiều !

    Comment


    • #17
      Nguyên văn bởi sinhluc
      To tam1234:
      Gram là cái gì hay vây hả bác ?
      !
      CGRAM :châracter gênarate RAM

      Comment


      • #18
        Nguyên văn bởi sinhluc
        To tam1234:
        Gram là cái gì hay vây hả bác ?
        Bác cho hỏi cái bác nói đó có phải là LCD đồ họa không. Tôi đang cần tìm một cái LCD có thể lập trình để vẽ lên đó chữ tiếng Việt có dấu và biểu tượng tùy ý, mình có thể khống chế từng điểm ảnh của nó. Nếu bác biết thì giới thiệu cho tôi cái nào như thể và tài liệu hưỡng dẫn cách dùng cùng nơi mua
        Cảm ơn bác nhiều !
        Bac chiu kho doc datasheet cua no di

        Neu bac dinh hien thi bang chu tiengviet thi hoi kho vi dung luong Ram cua con nay la ko nhieu ( ko du cho bac lam dau )

        Voi cai nay nguoi ta chi the hien cac ky tu dac biet tren LCD thoi
        Dia chi cho cac Fan muon hoc Pic

        Comment


        • #19
          he he chào bác manhfd
          hoạt động tích cực quá hả.Tôi xem bài viết của bác rồi.Vậy thì cho góp vui với nhé.
          tôi post luôn mã nguồn và bản mô phỏng LCD bằng protues lên luôn(nói chung đây chỉ là một số hàm cơ bản cho LCD các bạn có thể dễ dàng phát triển lên thành nhiều chức năng hơn như của bạn manhfd ấy (để các bạn tiện theo xem tôi giữ nguyên logic mạch như của bạn manhfd nhé).Hi vọng nó sẽ giúp cho các bạn mới tiếp xúc với LCD bớt khó khăn trong việc làm quen với thiết bị này.
          Chúc các bạn thành công và càng có nhiều bài viết hay chất lượng cho diễn đàn của chúng ta ngày một thêm sôi động nhé
          Gạo cho vào giã bao đau đớn
          Gạo giã xong rồi trắng tựa bông
          Sống ở trên đời người cũng vậy
          Gian nan rèn luyện mới thành công!
          :cafe:

          Comment


          • #20
            Hôm nay không mang USB nên kô up lên được hai cái thư viên cho LCD là LCD_8bit và LCD_4bit. Cái này tui viết cho PIC nhưng sẽ đưa lên cho đồng bộ với chủ đề mà bác Mạnh đưa ra. Dúng là dùng LCD nó hới đắt nhưng cũng đáng đồng tiền bát gạo lắm, ai chưa có thì cố sắm lấy một con mà phá. À nhưng lưu ý khi hàn chân cho LCD bởi ở nhà tui có hai con LCD của máy chú bên lớp ĐT6, hàn chân thế nào mà hỏng cả hai con, thế là đi đứt 190K hic hic...xót của quá. Tui cũng đã làm một số mạch có dùng LCD như đo đếm tần số, đồng hồ, chữ chạy, khóa điện tử... sẽ pót lên sau.
            Dạo này thi cử bận quá, phải cố thôi, cố kiếm xuất học bổng để lấy tiền mua linh kiện..hi hi hi :-)
            Ethernet-RS232, PIC Webserver, RFID Reader
            CallerID, Cảnh báo BTS, ...
            0988006696
            linhnc308@gmail.com
            http://linhnc308.blogspot.com

            Comment


            • #21
              Các chú ra hàng DTDD mua cái màn hình của mấy cái máy 8250, 8310 ... về mà dùng, vừa rẻ vừa đẹp hơn vạn lần cái loại đời cổ kia. Còn lập trình cho nó ư, look at my signature

              Comment


              • #22
                Files gửi kèm có chứa một số bài lập trình cho PIC bằng CCS giao tiếp với LCD.
                Một ví dụ là thiết kế một khóa điện tử với hiển thị dùng LCD. các files thư viện dùng khi ta giao tiếp là 4bit hay 8 bit. Việc dùng CGRAM của LCD để định nghĩa bảng font ký tự của người dùng cũng có ví dụ sẵn, cái này tui chưa tạo được nhiều font, ai quan tâm thì chịu khó mã hóa ký tự cho mình... kha mệt đấy nếu như không có phần mềm hỗ trợ.
                Ethernet-RS232, PIC Webserver, RFID Reader
                CallerID, Cảnh báo BTS, ...
                0988006696
                linhnc308@gmail.com
                http://linhnc308.blogspot.com

                Comment


                • #23
                  Cái Char.cod này dùng thế nào đây mấy bác? Thông cảm nha, em mới lò dò vào cái này.
                  Chỉ mới biết DDRAM là display data RAM. CGRAM là Character generator RAM. Rồi cái CGROM nữa Các bác chỉ hộ em công dụng, cách dùng của nó thế nào. Thanhks
                  Last edited by ai_the_nhi; 24-12-2005, 22:55.

                  Comment


                  • #24
                    Cái này chú xem lại trong các files mà tôi đã gửi về lập trình LCD. trong đó có cả code cho việc dùng CGRAM để định nghĩa các ký tự khác ngoài các ký tự trong bảng mã ASCII ví dụ như mặt hình mặt cười....
                    Ethernet-RS232, PIC Webserver, RFID Reader
                    CallerID, Cảnh báo BTS, ...
                    0988006696
                    linhnc308@gmail.com
                    http://linhnc308.blogspot.com

                    Comment


                    • #25
                      Híc híc, coi thấy hay quá, làm thử chương trình đơn giản bằng Keil C cho S52, không hiểu sao nó O chạy. Các bác xem lại giùm em với!
                      Nhan P37 => hien thi chu: "0123456789"
                      Nhan P36 =? hien thi chu: "co chay" o dong 1
                      nhung khong hien thi chu: "khong chay" o dong 2
                      /************************************************** ********/

                      #include <reg52h.h>
                      #include <string.h>//xu li chuoi dung cho LCD
                      #include <Tdelay.h>

                      //Dat ten cac ngo dieu khien LCD: read/write(5), register select(4), enable(6).
                      sbit D7_LCD = P2^7;
                      sbit RW_LCD = P1^1;
                      sbit RS_LCD = P1^0;
                      sbit E_LCD = P1^2;
                      sfr Data_LCD = 0xA0; //port2 giao tiep voi LCD



                      void Malenh_LCD(unsigned char nhan)
                      {
                      // LCD_ssang(); //LCD san sang nhan thong tin?
                      Data_LCD = nhan;
                      RS_LCD = 0; //Thtin gui toi LCD la ma lenh.
                      RW_LCD = 0; //Viet toi LCD
                      E_LCD = 1; //Tao canh len de cho truyen
                      Hdelay_us(10);
                      E_LCD = 0; //Chot.
                      }

                      void Dulieu_LCD(unsigned char nhan)
                      {
                      // LCD_ssang();//LCD san sang nhan thong tin?
                      Data_LCD = nhan;
                      RS_LCD = 1;//Thtin gui toi LCD la du lieu.
                      RW_LCD = 0;
                      E_LCD = 1;//Tao canh len de cho truyen
                      Hdelay_us(10);
                      E_LCD = 0;//Chot.
                      }

                      void Xoa_MH_LCD(void)
                      {
                      Malenh_LCD(0x01);
                      Hdelay_ms(10);
                      }

                      //Dung cho ca LCD 2x16 va 2x20
                      //Voi LCD 2x16, dia chi RAM la
                      //dong 1: 0x00
                      //dong 2: 0x40
                      //Voi LCD 4x20, dia chi RAM la
                      //dong 1: 0x80
                      //dong 2: 0xC0
                      //dong 3: 0x94
                      //dong 4: 0xD4

                      void Chuan_Khtao_LCD(void)
                      {
                      Malenh_LCD(0x38); // LCD 2 dong, ma tran 5x7, dung 8 bit du lieu.
                      Malenh_LCD(0x38); // LCD 2 dong, ma tran 5x7, dung 8 bit du lieu.
                      Malenh_LCD(0x38); // LCD 2 dong, ma tran 5x7, dung 8 bit du lieu.
                      Hdelay_ms(10);
                      Malenh_LCD(0x06); // Con tro dich chuyen huong phai, tang cho con tro sau moi ki tu duoc hthi
                      Hdelay_ms(10);
                      Malenh_LCD(0x0F); // Bat LCD, bat con tro, con tro nhap nhay.
                      Hdelay_ms(10);
                      Malenh_LCD(0x01); // Xoa man hinh LCD, dua con tro ve dau dong
                      Hdelay_ms(10);
                      Malenh_LCD(0x00); // Con tro dang o hang 1, cot 1 (o thu 1).//LCD 2x16
                      Hdelay_ms(10);
                      }

                      void main(void)
                      {
                      unsigned char i;
                      const char *text2 = "Co chay";
                      const char *text1 = "Khong chay";
                      const char *text = "0123456789";

                      Chuan_Khtao_LCD();


                      while(1)
                      {
                      // P0++;
                      // Hdelay_ms(100);
                      if (P37 == 0) //nhan nut P37
                      {
                      Hdelay_ms(10);
                      Xoa_MH_LCD();
                      Malenh_LCD(0x00);
                      for (i = 0; i < strlen(text); i ++)
                      {
                      Dulieu_LCD(*(text + i));
                      Hdelay_ms(1);
                      }
                      }
                      if (P36 == 0) //nhan nut p36
                      {
                      Hdelay_ms(10);
                      Xoa_MH_LCD();
                      Malenh_LCD(0x00); //dong 1 LCD
                      for (i = 0; i < strlen(text2);i ++)
                      {
                      Dulieu_LCD(*(text2 + i));
                      Hdelay_ms(50);
                      }

                      Malenh_LCD(0x40); //dong 2 LCD
                      for (i = 0; i < strlen(text1);i ++ )
                      {
                      Dulieu_LCD(*(text1 + i));
                      Hdelay_ms(50);
                      }

                      }
                      }

                      }
                      !e

                      Comment


                      • #26
                        ham khởi tạo LCD cần ghì phải viết đến 3 lênh 0x38 thế bác ,đầyla LCD 8 bít có phải 4 bít đâu
                        cho cậu code của tôi ,chỉ cần 2 phím lập trình điều khiển theo kiểu đa chức năng
                        chạy vù vù
                        #include <at89x52.h>
                        #include <define.h>
                        #include <string.h>
                        // giao tiep ban phim hien thi LCD
                        unsigned char banphim=0;
                        sbit choice=P3^3;
                        sbit enter =P0^7;

                        void delay(unsigned long time)
                        {
                        unsigned long k;
                        for (k=1;k<time;k++) {}
                        }

                        /******************************/
                        // LCD
                        void lenh ()
                        {
                        RS=0; EN=1; delay (50); EN=0; delay (100);
                        }

                        void ghi ()
                        {
                        RS=1; EN=1; delay (50); EN=0; delay (100);
                        }


                        void LCDwrite(unsigned char c)
                        {

                        P2=c;
                        ghi();
                        }

                        void LCDputs(unsigned char *s,unsigned char row)
                        {
                        unsigned char len;
                        if(row==1)
                        { P2=0x80;lenh (); }
                        else { P2=0xC0; lenh ();}
                        len=strlen(s);
                        while(len!=0)
                        {
                        LCDwrite(*s);
                        s++;
                        len--;
                        }
                        }

                        void LCDcontrol(unsigned char dk)
                        {
                        P2=dk; lenh ();
                        }

                        void init_LCD ()
                        {
                        delay(400);
                        LCDcontrol(0x38); //LCD 2 dong_5x7
                        LCDcontrol(0x0C); //bat hien thi, tat con tro
                        LCDcontrol(0x01); //xoa man hinh
                        }

                        /*****************************/
                        void ngatngoai()interrupt 0
                        {

                        }


                        void init_ext()
                        {
                        EX0=ON;
                        EA=ON;
                        IT0=ON; /* Edge Trigerred*/
                        IE0=OFF;

                        }

                        void init()
                        {
                        P0=P1=P2=P3=0xFF;
                        init_ext();
                        init_LCD();
                        }
                        void color()
                        {
                        unsigned char key;
                        unsigned char test=0;
                        LCDcontrol(0x01);
                        LCDputs("1:Green 2:Red 3:Orange",1);
                        LCDputs("Enter",2);
                        choice=enter=1;
                        while(1)
                        {
                        while(choice==0)
                        {
                        delay(10000);
                        key++;
                        LCDcontrol(0x01);
                        if (key==1)LCDputs("1 ",1);
                        if (key==2)LCDputs("2 ",1);
                        if (key==3)LCDputs("3 ",1);
                        if (key==4)LCDputs("4 ",1);
                        LCDputs("1:G 2:R 3:O 4:E",2);
                        if (key>4) {LCDputs("0 ",1); key=0;}
                        }
                        if (key==1)while(enter==0) { LCDcontrol(0x01);LCDputs("Green",1);}
                        if (key==2)while(enter==0) { LCDcontrol(0x01);LCDputs("Red",1);}
                        if (key==3)while(enter==0) { LCDcontrol(0x01);LCDputs("Orange",1);}
                        if (key==4)while(enter==0) test=1;
                        if (test==1) break;
                        }//while(1)

                        }

                        void speed()
                        {
                        unsigned char key;
                        unsigned char test=0;
                        LCDcontrol(0x01);
                        LCDputs("1:High 2:Stop ",1);
                        LCDputs("3:Low Enter",2);
                        choice=enter=1;
                        while(1)
                        {
                        while(choice==0)
                        {
                        delay(10000);
                        key++;
                        LCDcontrol(0x01);
                        if (key==1)LCDputs("1 ",1);
                        if (key==2)LCDputs("2 ",1);
                        if (key==3)LCDputs("3 ",1);
                        if (key==4)LCDputs("4 ",1);
                        LCDputs("1:H 2:S 3:L 4:E",2);
                        if (key>4) {LCDputs("0 ",1); key=0;}
                        }
                        if (key==1)while(enter==0) { LCDcontrol(0x01);LCDputs("High",1);}
                        if (key==2)while(enter==0) { LCDcontrol(0x01);LCDputs("Stop",1);}
                        if (key==3)while(enter==0) { LCDcontrol(0x01);LCDputs("Low",1);}
                        if (key==4)while(enter==0) test=1;
                        if (test==1) break;

                        }//while(1)


                        }

                        void direction()
                        {
                        unsigned char key;
                        unsigned char test=0;
                        LCDcontrol(0x01);
                        LCDputs("1:Left 2:Right ",1);
                        choice=enter=1;
                        while(1)
                        {
                        while(choice==0)
                        {
                        delay(10000);
                        key++;
                        LCDcontrol(0x01);
                        if (key==1)LCDputs("1 ",1);
                        if (key==2)LCDputs("2 ",1);
                        if (key==3)LCDputs("3 ",1);
                        LCDputs("1:L 2:R 3:E ",2);
                        if (key>3){LCDputs("0 ",1); key=0;}
                        }
                        if (key==1)while(enter==0) { LCDcontrol(0x01);LCDputs("LEFT",1);}
                        if (key==2)while(enter==0) { LCDcontrol(0x01);LCDputs("RIGHT",1);}
                        if (key==3)while(enter==0) test=1;
                        if (test==1) break;

                        }//while(1)


                        }

                        void keyboard()
                        {
                        unsigned char key=0;
                        unsigned char test=0;
                        LCDcontrol(0x01);
                        choice=enter=1;
                        LCDputs("Keyboard Ready",1);
                        delay(100000);
                        LCDcontrol(0x01);
                        LCDputs("1:Color 2:Speed ",1);
                        LCDputs("3irect 4:End",2);
                        delay(200000);
                        LCDcontrol(0x01);
                        while(1)
                        {
                        LCDputs("1:C 2:S 3 4:E",2);
                        while(choice==0)
                        {
                        delay(10000);
                        key++;
                        LCDcontrol(0x01);
                        if (key==1)LCDputs("1 ",1);
                        if (key==2)LCDputs("2 ",1);
                        if (key==3)LCDputs("3 ",1);
                        if (key==4)LCDputs("4 ",1);
                        LCDputs("1:C 2:S 3 4:E",2);
                        if (key>4) { LCDputs("0 ",1);key=0;}
                        }
                        if (key==1)while(enter==0) color();
                        if (key==2)while(enter==0) speed();
                        if (key==3)while(enter==0) direction();
                        if (key==4)while(enter==0) test=1;
                        if (test==1) break;

                        }//while(1)

                        } // keyboard




                        void main()
                        {
                        init();
                        banphim=0;
                        P0=0xFF;
                        while(1)
                        {
                        keyboard();
                        P0_0=0;
                        }

                        } // main
                        SHARE KHO PHIM LỚN

                        Comment


                        • #27
                          Hi,
                          Cho tui góp vui với, tui cũng có viết để test cái LCD 2002 (2 hàng, 20 chữ/hàng). Tui viết theo kiểu multitask sử dụng Keil C nên có lẽ khó đọc một chút. Mạch hiển thị xâu chữ chạy từ phải sang trái ở dòng trên và đồng hồ và ngày tháng ở dòng dưới. Các chữ, thời gian, vv... chỉ là giả định các bác muốn dùng được thì phải sửa lại chút ít.
                          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


                          • #28
                            Help!

                            Các bác cho em hỏi tý trong asm thì dùng cấu trúc
                            If A=#ffh,then
                            jmp nhãn
                            thì khi dịch ra chương trình báo lỗi là sao vậy?
                            Bác nào biết gỡ giùm em với ?Thanks

                            Comment


                            • #29
                              Cám ơn bạn Mafd và Blackmoon. Các bạn thật là giỏi.

                              Comment


                              • #30
                                huynh oi huynh co so do nguyen li ko post len gium di
                                |

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X