Thông báo

Collapse
No announcement yet.

89c51-8051:gấp!!! Xin giúp đỡ về code keil c hoặc asm giao tiếp lcd với nút nhấn port

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

  • 89c51-8051:gấp!!! Xin giúp đỡ về code keil c hoặc asm giao tiếp lcd với nút nhấn port

    chào mọi người, việc là em mới nhập môn VDK, và đang học VXL viết asm và có bài tập về nhà mà không biết làm thế nào, viết bài lên đây hi vọng ai đó giúp đỡ với chứ em chẳng biết cầu cứu ai
    Đề tài: viết chuơng trình mô phỏng danh bạ điện tử lên LCD, cho nhập tên và số qua port P1.0->P1.7 :
    vd: LCD 2 dòng;
    dòng 1 xuất tên: VDK
    dòng 2 xuất số: 0903
    tiếp theo là cho nhập
    dòng 1: ĐTVN
    dòng 2 xuất số: 0122
    ...
    và làm tiếp tục như vậy. tất cả đều nhập từ
    sau khi nhập xong vài người và số mạng điện thoại của họ thì bấm nút nhấn cho trả lại tên và số mà mình đã nhập bằng cách nào đó mà nhấn nút thì màn hình kéo con trỏ kéo màn hình LCD lên xuống để mình đọc tên và số, chức năng như phím bấm lên xuống trên điện thoại di động.
    Mong các anh chuyên VDK 89c51 giúp em với. mò mẫm code cả mấy tuần mà chưa được gì.
    đây là code của em (đính kèm file mô phỏng),làm hoài mà chẳng được, nút nhấn thì hoạt động không độc lập được , nản quá:

    #include "REGX51.H"
    #define RW P0_1
    #define RS P0_0
    #define EN P0_2
    #define DATA P2
    #define SW0 P1_0
    #define SW1 P1_1
    #define SW2 P1_2
    #define SW3 P1_3
    #define SW4 P1_4
    #define SW5 P1_5
    #define SW6 P1_6
    #define SW7 P1_7

    void delay(int n);
    void s_inst(void);
    void s_data(void);
    void s_latch(void);
    void main(void)
    {
    RS=0;
    RW=0;
    EN=1;
    delay(100000);
    s_inst();
    DATA=0X38; // chon phong chu
    s_latch();
    s_latch();
    s_latch();
    s_latch();
    DATA=0X0F; // hien thi va nhap nhay chuot
    s_latch();
    DATA=0X10; // chon dong 1
    s_latch();
    DATA=0X0; // lam trang LCD
    s_data();
    s_latch();

    while(1)
    {
    if(SW0==0)
    {
    DATA='H';
    s_data();
    s_latch();
    while(1)
    {
    if(SW1==0)
    {
    DATA='E';
    s_data();
    s_latch();
    while(1)
    {
    if(SW2==0)
    {
    DATA='L';
    s_data();
    s_latch();
    while(1){

    if(SW3==0){


    DATA='P';
    s_data();
    s_latch();



    while(1)
    {
    if(SW4==0)
    { s_inst();
    DATA='M';
    s_data();
    s_latch();
    while(1){ //Ch? khi nào chân P1.0 xu?ng m?c th?p

    while(1)
    {
    if(SW5==0)
    { s_inst();
    DATA='E';
    s_data();
    s_latch();
    while(1){ //Ch? khi nào chân P1.0 xu?ng m?c th?p


    if(SW6==0){

    s_inst();
    DATA=0XC0; //chon dong 2
    s_latch();
    DATA=0X0;
    s_data();
    s_latch(); //code ctr


    while(1)
    {
    if(SW0==0)
    { s_inst();
    DATA='0';
    s_data();
    s_latch();
    while(1)
    {
    if(SW1==0)
    { s_inst();
    DATA='1';
    s_data();
    s_latch();
    while(1)
    {
    if(SW2==0)
    { s_inst();
    DATA='2';
    s_data();
    s_latch();
    while(1)
    {
    if(SW3==0)
    {
    s_inst();
    DATA='3';
    s_data();
    s_latch();
    s_inst();
    DATA=0X80; // chon dong 1
    s_latch();

    while(1){ //Ch? khi nào chân P1.0 xu?ng m?c th?p

    if(SW0==0){

    DATA='k';
    s_data();
    s_latch(); //code ctr

    }

    }

    }
    }
    }
    }
    }
    }
    }
    }
    }
    }

    }

    }
    }

    }
    }

    }

    }

    }

    }

    }
    } }}

    while(1);
    }
    void delay(int n)
    {
    int i=0,j=0;
    for(i=0;i<=n;i++)
    for(j=0;j<=10;j++);
    }
    void s_inst(void)
    {
    RS=0;
    RW=0;
    }
    void s_data(void)
    {
    RS=1;
    RW=0;
    }
    void s_latch(void)
    {
    EN=1;
    delay(1000);
    EN=0;
    delay(1000);
    }
    Attached Files

  • #2
    có ai chịu khó đọc lướt qua rồi có gì góp ý với em dùm với!!! hết cách rồi giờ chỉ thiếu năn nỉ nữa thôi..

    Comment


    • #3
      Mình có mấy lời khuyên cho bạn
      - Điều quan trọng nhất trước khi viết code là hãy vẽ lưu đồ giải thuật trước.
      - Khi bạn viết code phải rõ ràng, dễ đọc, và khi chú cẩn thận.
      - Viết một thư viện lcd riêng. Khi nào cần xuất ra lcd thì chỉ cần gọi hàm của nó thôi.
      - Viết chương trình chống nảy khi nhấn nút.
      - Lưu trữ danh bạ vào bộ nhớ khi đã nhập Vd

      Code:
      struct danhba{
              char name[10];
              int num;
      }
      
      void main(void){
              struct danhba db[10];
      }
      - Tạo một biến x Khi bạn nhấn lên hoặc xuống sẽ xuất danh bạ ra lcd với số thứ tự tương ứng db[x].
      Last edited by tn88test; 23-11-2013, 00:19.

      Comment


      • #4
        cám ơn bạn ý kiến của bạn, nhưng mình mới làm việc với keil C, lần đầu làm việc với VĐK nên mình cũng không biết nhiều. chủ yếu mình xem code mẫu rồi chỉnh sửa lại
        nếu bạn có code gần giống đề tài này chía sẽ mình với

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        • mèomướp
          Trả lời cho Công thức điện tử
          bởi mèomướp
          Dạ thời thế giờ thay đổi theo hướng tích cực hơn rồi chú trung sĩ ạ. Kiến thức được chia sẻ ngày càng nhìu nên làm ăn gian dối ko còn dễ dàng như trước đâu ạ. Những thợ nhỏ rồi sẽ thành công nhân sản xuất đồ mới hết thay vì sửa chữa lặt vặt...
          Hôm qua, 21:21
        • mèomướp
          Trả lời cho Xin hỏi về màn hình laptop
          bởi mèomướp
          Dạ cùng chuẩn tín hiệu thì chắc chắn là nhận ạ. Vì bản chất oled hay lcd thì đều phải có mạch chuyển đổi trên thanh gỗ rồi chuyển sang những chip xử lý hàng nghìn chân gắn trên những tab mỏng dính rồi mới ra các điểm ảnh theo hàng...
          Hôm qua, 20:31
        • yname11
          Trả lời cho Xin hỏi về màn hình laptop
          bởi yname11
          Ok , thanks bác đã chỉ...
          Hôm qua, 15:06
        • nguyendinhvan
          Công thức điện tử
          bởi nguyendinhvan
          Sau bao năm nghiên cứu cái dtvn. Tôi phát hiện công thức này. Các anh em xem đúng bao nhiêu phần trăm nhé !

          Chập thì thay. Cháy thì tháo
          Làm thì láo. Báo thì hay
          May thì khoe. Rủi thì bỏ
          Thành tích nhỏ. Báo thành to
          Làm cho có. Báo chi li
          Sai cả li. Báo
          ...
          Hôm qua, 00:35
        • yname11
          Trả lời cho Xin hỏi về màn hình laptop
          bởi yname11
          có chắc ko b, màn lcd phải có cao áp mới sáng, màn led thì ko có, ko có cáp chuyển đổi thì lắp thế nào đc ??...
          25-11-2024, 22:31
        • mèomướp
          Trả lời cho Xin hỏi về màn hình laptop
          bởi mèomướp
          Dạ ý chú là màn oled ấy ạ. Cùng chuẩn lvds cùng độ phân giải thì cắm được ạ. Còn nó mà khác thì hơi khó vì oled các điểm ảnh nó tự phát sáng chứ ko dùng đèn nền như lcd. Cháu chỉ biết đến vậy thôi ạ. Chú muốn nghịch phải tự tìm hiểu kỹ trước khi mua thôi, khó mà ông thợ nào tư vấn vụ này...
          25-11-2024, 22:14
        • bactho
          Trả lời cho Tự làm máy đo Cuộn cảm
          bởi bactho
          Hay đấy bạn ạ. Đây có thể hiểu là máy đo cuộn dây. Tiện đây xin cho hỏi bạn có hiểu rõ về máy nạp rôm pcb 45 của hãng thiên minh không giúp mình cách cài fw của nó với vì mình vừa được anh bạn cho nhưng lại không biết cài fw nên chưa dùng được. Nếu có thể thì bạn giúp mình với...
          25-11-2024, 21:48
        • yname11
          Trả lời cho Xin hỏi về màn hình laptop
          bởi yname11
          màn của mình là LCD , giờ m muốn mua màn LED để thay thế (ko muốn dùng màn LCD nữa) , lên muốn hỏi xem có cáp chuyển đổi nào có thể cắm đc màn LED vào ko , tất nhiên phải có cùng số chân pin với màn cũ rồi . VD: màn cũ là lcd mỏng , 40 pin...
          25-11-2024, 21:43
        • bactho
          Trả lời cho các bạn giúp mình về file HEX với!!!
          bởi bactho
          Bạn vào trang phuclanshop.com ,tìm đến góc kỹ thuật. Tác giả vương khánh hưng nói rất rõ về điều bạn tìm...
          25-11-2024, 21:21
        • mèomướp
          Trả lời cho Xin hỏi về màn hình laptop
          bởi mèomướp
          Dạ màn hình lcd đều có thể lai cấy cho nhau được hết ạ. Các loại cáp, bo mạch chuyển đổi lvds rất nhìu, với dòng sony còn phải nhổ cả chip nhớ của main cũ đưa lên gỗ thì mới lắp sang máy khác đc, chưa kể các bệnh về màu... ngay cả...
          25-11-2024, 20:43
        Đang tải...
        X