Thông báo

Collapse
No announcement yet.

Em có bài lập trình sau mong các huynh sửa giúp

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

  • Em có bài lập trình sau mong các huynh sửa giúp

    EM =m dùng codevision lập trình bài toán giao tiếp atmega32 với lcd 16x2 và keypad 4x4 mà khi check syntax thì không có lỗi nhưng nhấn shift+F9 thì báo lỗi sau em không biết sau:" Errors occur during asembly", em không biết bài viết của em đã đúng chưa và làm sao sửa lỗi đó. Mong các huynh sửa giúp em
    //lap trinh giao tiep Atmega32 voi LCD 16x2 va Keypad 4x4, khi bam nut se hien so tren LCD, nhan input doc gia tri tren LCD co chong doi phim

    #include<mega32.h>
    #include<lcd.h>
    #include<stdio.h>
    unsigned char k;
    int i;
    int m;
    char num[10];
    //================================================== ==================================================
    char chongdoi(void)
    {
    DDRB=0x0F; //nua byte thap ngo ra, nua byte cao ngo vao
    loinhan:;
    for (i=0;i<=50;i++) //kiem tra phim con duoc duy tri muc 0 kg trong 50 lan
    {
    if ((PINB&0xF0)==0xF0) goto loinhan; //neu co lan kg duy tri se kiem lai tu dau
    }
    k=PINB; // xong phan doi nhan luu lai gia tri hang va cot
    loinha:;
    while(1)
    {
    if ((PINB&0xF0)==0xF0) //doi den khi co tin hieu nha ra
    {
    for (i=0;i<=50;i++) //kiem tra phim da dc nha chua trong 50 lan
    {
    if ((PINB&0xF0)!=0xF0) goto loinha; //neu co lan kg duy tri nha se quay lai tu dau
    }
    break;
    }
    }
    return(k);
    }
    //================================================== ==================================================
    int giaima(void)
    {
    switch (k)
    {
    case 0b00010001:
    m=7;
    break;
    case 0b00010010:
    m=8;
    break;
    case 0b00010100:
    m=9;
    break;
    case 0b00100001:
    m=4;
    break;
    case 0b00100010:
    m=5;
    break;
    case 0b00100100:
    m=6;
    break;
    case 0b01000001:
    m=1;
    break;
    case 0b01000010:
    m=2;
    break;
    case 0b01000100:
    m=3;
    break;
    case 0b10000001:
    m=10; //nhan input
    break;
    case 0b10000010:
    m=11; //nhan clear
    break;
    }
    return(m);
    }

    //================================================== ==================================================
    int scan_key(void)
    {
    DDRB=0x0F; //nua byte thap ngo ra, nua byte cao ngo vao

    //================================================== ===========
    PORTB=0XFF;
    PORTB.0=0; // cho cot 1 bang 0 kiem tra cac hang
    if ((PINB&0xF0)!=0xF0) //co phim nhan trong hang mot 1
    {
    k=chongdoi();
    m=giaima();
    }
    //================================================== ===========
    PORTB=0XFF;
    PORTB.1=0;
    if ((PINB&0xF0)!=0xF0) //co phim nhan trong hang mot 2
    {
    k=chongdoi();
    m=giaima();
    }
    //================================================== ============
    PORTB=0XFF;
    PORTB.2=0;
    if ((PINB&0xF0)!=0xF0) //co phim nhan trong hang mot 3
    {
    k=chongdoi();
    m=giaima();
    }
    //================================================== =============
    PORTB=0XFF;
    PORTB.3=0;
    if ((PINB&0xF0)!=0xF0) //co phim nhan trong hang mot 4
    {
    k=chongdoi();
    m=giaima();
    }
    //================================================== ==============
    return(m);
    }
    //================================================== ==================================================
    void hienthi(void)
    {
    #asm
    .equ _lcd_port=0x18
    #endasm
    lcd_init(16);
    lcd_gotoxy(0,0);
    lcd_putsf("nhap tien");
    lcd_gotoxy(0,1);
    sprintf(num,"%d",m);
    lcd_puts(num);
    }
    //================================================== ================================================== =
    void main(void)
    {
    m=scan_key();
    if (m==10) //nhan input doc chan lcd vao sram va xu li tiep
    ;
    if (m==11)//nhan clear lcd quay ve dau
    ;
    hienthi();
    }

  • #2
    Nguyên văn bởi bijusi@ Xem bài viết
    #asm
    .equ _lcd_port=0x18
    #endasm
    }
    Bạn xem thử lại dòng code này nhé. Chỗ __lcd_port phải có 2 dấu gạch dưới(__).

    Thêm nữa, theo mình nghĩ thì bạn nên khai báo khối này lên trước #include<lcd.h>.

    Comment


    • #3
      ok dc rùi cám ơn anh rất nhiều, không biết anh có ý kiến gì về bài của em không, nó đúng yêu cầu không anh

      Comment


      • #4
        Nguyên văn bởi bijusi@ Xem bài viết
        ok dc rùi cám ơn anh rất nhiều, không biết anh có ý kiến gì về bài của em không, nó đúng yêu cầu không anh
        Híc! Bạn thông cảm, mình ngại ngồi dò code lắm.

        Comment


        • #5
          ah vậy anh cho em hỏi làm sao mình đọc dữ liệu từ lcd vào atmega được ạ?

          Comment


          • #6
            Nguyên văn bởi bijusi@ Xem bài viết
            ah vậy anh cho em hỏi làm sao mình đọc dữ liệu từ lcd vào atmega được ạ?
            Nếu bạn dùng CodeVisionAVR thì có hàm:

            unsigned char lcd_read_byte(unsigned char addr);

            Đọc một byte từ LCD.

            Comment


            • #7
              Ok đợi em làm xong bài này rồi em sẽ post lên cho mọi người xài, chứ tìm hoài chẳng có trên mạng chẳng ai thèm chia sẻ hết, làm xong xài ròi mà không cho người ta thật hoang phí!!!!

              Comment


              • #8
                Em chỉ mới học lập trình C trên Avr có 2 ngày mà viết dc nhiu đó!

                Comment


                • #9
                  Bác này nóng tính quá nhể?

                  Comment


                  • #10
                    huynh chỉ em sử dụng hàm lcd_read_byte với em đọc hàm em chẳng hiểu, em "gà" lắm có ví dụ trực quan em mới biết

                    Comment


                    • #11
                      Nguyên văn bởi bijusi@ Xem bài viết
                      huynh chỉ em sử dụng hàm lcd_read_byte với em đọc hàm em chẳng hiểu, em "gà" lắm có ví dụ trực quan em mới biết
                      Trong LCD có một thanh RAM để lưu trữ dữ liệu đẩy vào trước khi hiển thị. Tuỳ vào loại LCD, tuỳ hãng sản xuất mà cấu trúc của thanh RAM này có thể khác nhau.
                      Bạn muốn đọc dữ liệu từ LCD trước tiên nên tìm hiểu qua về thanh RAM này.
                      Còn về cấu trúc của lệnh trên: Bạn chỉ cần khai báo một biến kiểu Unsigned Char để lưu giá trị đọc được từ LCD, biến addr ở đây là địa chỉ của dữ liệu chứa trong thanh RAM của LCD. Mình ví dụ thử:

                      Unsigned Char bien;
                      bien=lcd_ready_byte(địa chỉ dữ liệu cần đọc);

                      Comment


                      • #12
                        em dùng atmega32 vậy thanh RAM đó là gì anh!!! giúp em cho trót

                        Comment


                        • #13
                          Nguyên văn bởi bijusi@ Xem bài viết
                          em dùng atmega32 vậy thanh RAM đó là gì anh!!! giúp em cho trót
                          Ặc ặc. Bạn không chịu đọc kĩ bài trả lời của mình! Ko phải là thanh RAM của AVR mà là thanh RAM của LCD cơ. Gọi là gì nhỉ, thanh ghi đệm thì phải!
                          Chịu khó đọc datasheet của lcd trước đã.

                          Comment


                          • #14
                            Trước đây khi viết bằng ASM cho 8051 mình cũng đã từng đọc giá trị từ LCD để kiểm tra cờ bận. Nhưng khi viết C cho AVR mình thường ko để ý đến việc này nữa nên không có code cho bạn. Nếu thấy dùng C khó thì có thể dùng ASM lẫn vào chương trình cũng được mà bạn?

                            Comment


                            • #15
                              Nguyên văn bởi bijusi@ Xem bài viết
                              em dùng atmega32 vậy thanh RAM đó là gì anh!!! giúp em cho trót
                              có lẽ bạn chưa đọc kỹ da ta sheet của LCD rồi, nhưng mà nếu bàn xài Codevision thì cũng ko khó lắm đâu, vì CodeVision sẽ tự sinh mã mà, hàm thì kcung cấp rất nhiều, bạn cố gắng đọc kỹ nhé. mình không biết bạn đọc da ta của LCD để làm gì, thông thường khi ta cần kiểm tra cờ bận mới sử dụng làm đọc này. bạn có thể nói rõ hơn là bạn muốn đọc vì mục đích gì, thì mọi người sẽ giúp bạn.
                              hãy cố gắng dù vướn phải thất bại!!!!!!!!

                              Comment

                              Về tác giả

                              Collapse

                              bijusi@ Tìm hiểu thêm về bijusi@

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

                              Collapse

                              • mansion123
                                Bật mí những điều ít ai biết về thi công gỗ óc chó
                                bởi mansion123
                                Thi công gỗ óc chó giúp không gian trở nên sang trọng, ấm cúng, gần gũi hơn. Sự kết hợp giữa thẩm mỹ và chất lượng cao của gỗ óc chó chắc chắn sẽ mang lại giá trị lâu dài và làm hài lòng ngay cả những khách hàng khó tính nhất. Vậy đằng
                                ...
                                hôm nay, 16:08
                              • tuyennhan
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi tuyennhan
                                Cái thư sai ngay câu chào Dear sir mới đúng Hi chỉ dùng cho người quen , các vấn đề về kỹ thuật nó không trả lời hoặc nói loanh quanh tránh ảnh hưởng đến công ty .
                                Giup1 người cần không giúp người không cần với lại văn mình vợ người nha đừng quên .
                                hôm nay, 07:44
                              • vi van pham
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi vi van pham
                                Cám ơn những lời chúc tốt đẹp của em.

                                Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.

                                Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....
                                hôm nay, 02:00
                              • nhathung1101
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi nhathung1101
                                Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

                                Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

                                Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
                                Hôm qua, 22:18
                              • dinhthuong80
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi dinhthuong80
                                Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

                                Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
                                Hôm qua, 14:51
                              • dinhthuong80
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi dinhthuong80
                                Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

                                Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
                                Hôm qua, 14:39
                              • dinhthuong80
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi dinhthuong80
                                Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

                                Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
                                Hôm qua, 14:28
                              • bqviet
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi bqviet
                                Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
                                21-02-2025, 20:26
                              • mèomướp
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi mèomướp
                                Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
                                21-02-2025, 12:32
                              • vi van pham
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi vi van pham
                                Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

                                Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
                                20-02-2025, 21:31
                              Đang tải...
                              X