Thông báo

Collapse
No announcement yet.

Giúp em về keypad + lcd + atmega16

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

  • Giúp em về keypad + lcd + atmega16

    Em chào các anh chị trên diễn đàn !
    Em đang bị vướng mắc trong lập trình cho lcd+ key(4x4) và atmega16 ,rất mong được anh chị giúp đỡ.
    - Trong chương trình chính của em, sau khi chạy xong 1 lần em muốn yêu cầu chương trình hỏi có muón tiếp tục hay ko. Nếu ấn phím yes( giả sử phím -) thì tiếp tục còn ấn phím NO(giả sử phím +) thì thoát. Nên em sử dụng vòng Do ...while. nhưng đến đây thì em không gọi được hàm quét keypad mà chương trình thoát luôn. Em chưa biết phải xử lý ra sao. Rất mong anh chị nào quan tâm đên keypad thì chỉ bảo giúp em.
    - Em sử dụng codevision, sau đây là đoạn code của em.
    // day la ham quet key pad
    unsigned char scan_keypad()
    {
    unsigned char row, col, key;
    //**********************quet cot *****************************
    for(col = 0; col < 4; col++)
    {
    KEY_PORT = 0xFF & (~(1<<(col + 4))); //set bit col + 4 = 0, cac bit con lai la 1
    delay_us(10);
    key = KEY_PIN & 0x0F;
    //neu co fim dc an key != 0x0F
    if(key != 0x0F)
    {
    //********************quet hang *********************
    for(row = 0; row < 4; row++)
    {
    if(key == scan_codes[row])
    return ascii_codes[row][col];
    }
    }
    }
    return 0;
    }
    ///********************chuong trinh main*************
    void main(void)
    {
    KEY_DDR=0xF0;
    KEY_PORT=0x0F;
    lcd_init(16);
    chaomung();
    do
    {
    setting();
    data_input();
    key=30;
    if( thangdo==0)
    {
    selcall_4so();
    while (key!=61)
    {
    key=scan_keypad();
    switch (key)
    {
    case 58:
    {
    j=j+1;
    if (j>2) j=0;
    if (j==0) selcall_4so();
    if (j==1) callblock1_4();
    if (j==2) callblock2_4();

    delay_ms(300);
    }
    break;
    case 120:
    {
    j=j-1;
    if (j<0) j=2;
    if (j==0) selcall_4so();
    if (j==1) callblock1_4();
    if (j==2) callblock2_4();
    delay_ms(300);
    }
    break;
    }
    }

    }

    if (thangdo==1)
    {

    selcall_5so();
    while (key!=61) //neu an dau = thi chuong trinh se thoat
    {
    key=scan_keypad(); // goi chuong trinh quet keypad
    switch (key)
    {
    case 58: //58la ma ASCII cua dau":"
    {
    j=j+1;
    if (j>2) j=0;
    if (j==0) selcall_5so();
    if (j==1) callblock1_5();
    if (j==2) callblock2_5();

    delay_ms(300);
    }
    break;
    case 120: //120 la ma ASCII cua dau "x"
    {
    j=j-1;
    if (j<0) j=2;
    if (j==0) selcall_5so();
    if (j==1) callblock1_5();
    if (j==2) callblock2_5();
    delay_ms(300);
    }
    break;
    }
    }


    }
    if (thangdo==2)
    {

    selcall_9so();
    while (key!=61) // 61 la ma ASCII cua dau "="
    {
    key=scan_keypad();
    switch (key)
    {
    case 58:
    {
    j=j+1;
    if (j>4) j=0;
    if (j==0) selcall_9so();
    if (j==1) callblock1_9();
    if (j==2) callblock2_9();
    if (j==3) callblock3_9();
    if (j==4) checksum_9();
    delay_ms(300);
    }
    break;
    case 120:
    {
    j=j-1;
    if (j<0) j=4;
    if (j==0) selcall_9so();
    if (j==1) callblock1_9();
    if (j==2) callblock2_9();
    if (j==3) callblock3_9();
    if (j==4) checksum_9();
    delay_ms(300);
    }
    break;
    }
    }


    }
    lcd_clear();
    lcd_gotoxy(0,0);
    lcd_putsf("Continue Y/N ?"); // ban co muontiep tuc chuong trinh hay ko: yes or no
    key = scan_keypad(); // vi sao no khong quet nhi ??????
    if (key==97) t=1; // 97 la ma ASCII cua dau "-"
    if (key==43) t=0; //43 la ma ASCIIcua dau "+"
    }
    while (t==1);
    help();
    lcd_putsf("GV:TR.XUAN VIET") ;
    lcd_gotoxy(0,1);
    lcd_putsf("SV:HOANG HIEP") ;
    while (1)
    {
    }

    }

  • #2
    bạn phải bỏ phần quét phím và 2 dòng if vào 1 vòng lập nữa, rồi nếu có bất kì 1 trong 2 phím đc nhấn thì thoát ra.
    Chứ nếu để như bạn, nó chỉ quét phím 1 lần, dù là phím nào nhấn đi nữa thì mặc định t đã bằng 0 . Khi gặp while nó thoát ra luôn là phải rồi.

    Comment


    • #3
      Em cảm ơn anh Chung1608 đã gợi ý cho em. Em đã thử và đã chạy được.

      Comment

      Về tác giả

      Collapse

      hoang hiep Tìm hiểu thêm về hoang hiep

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

      Collapse

      Đang tải...
      X