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

        Đang tải...
        X