Thông báo

Collapse
No announcement yet.

Làm sao nhận 1 chuỗi từ bàn phím 4x4 với 18f4550

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

  • Làm sao nhận 1 chuỗi từ bàn phím 4x4 với 18f4550

    Chào cả nhà!
    mình đang làm 1 thiết bị gồm : phím ma trận 4x4 + 18f4550+lcd
    mình muốn nhần 4 phím trên bàn phím rồi sau đó lưu thành 1 màng và hiển thị 1 chuỗi gồm 4 phím vừa nhấn.
    mô phỏng thì ok.còn chạy thật trên board thì lại fail.
    code như sau :
    Code:
    #include <18f4550.h>
    #device *=16
    #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
    #use delay(clock=20000000)
    #use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7)
    #use fast_io(B)
    #use fast_io(C)
    #use fast_io(D)
    #byte portb = 0xf81
    #byte trisb = 0xf93
    #byte portd = 0xf83
    #byte trisd = 0xf95
    #byte portc = 0xf82
    #byte trisc = 0xf94
    #define ROW1   PIN_B7
    #define ROW2   PIN_B6
    #define ROW3   PIN_B5
    #define ROW4   PIN_B4
    #define COL1   PIN_B3
    #define COL2   PIN_B2
    #define COL3   PIN_B1
    #define COL4   PIN_B0
    //++++++++++++++++++//
    
    #include <lcd_lib_4bit.c>
    #include <key_4x4.c> 
    #include <stdlib.h>
    #include <string.h>
    
    char key;
    char s[10];
    int i=0,j=0,k=128,a=0,m=0,n=0;
    int16 data=0;
    void main()
    {
    set_tris_d(0x00);
    set_tris_c(0x00);
    set_tris_b(0b00001111);
    Portd=0x00;
    portc=0x00;
    LCD_Init();
    lcd_putcmd(line_1);
    printf(lcd_putchar,"tets");
    lcd_putcmd(line_2);
    printf(lcd_putchar,"ok");
    delay_ms(50);
    lcd_putcmd(0x01);
    while(1)
    {
    key=get_key_4x4();     
     if(key)
     {
    lcd_putcmd(0x80);
    LCD_SetPosition(k);
    k++;
    lcd_putchar(key);
    if(key=='#')  // xóa màn hình
    {
    i=i-1;
    j=0;
    k=128;
    lcd_putcmd(Clear_Scr);
    a=0;
    }
    for(j=0;j<4;++j)   // măc ở chỗ này.
    s[i]=get_key_4x4();
    i++;
    if(i==4)
    {
    
    i=0;
    k=128;
    lcd_putcmd(0xc0);
    printf(lcd_putchar,"str:%s",s); // không hiển thị đc chuỗi đá nhận
    a=1;
    }
    
    while(key)key=get_key_4x4();
          delay_ms(10);
    //++++++++++++++++++++++//
    
    
    }
    
    }
    }
    Rất mong mọi người chỉ giúp
    Last edited by Thái Tuế_vy; 25-09-2014, 09:15.

  • #2
    Nghe nó lủng củng làm sao ... bàn phím ma trận mà ấn nhiều nút cùng lúc ... lại sử dụng phương pháp quét thì khả năng chồng chéo là rất cao. Sao không sử dụng các phím độc lập, bấm bao nhiêu phím biết ngay.
    Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

    Comment


    • #3
      Thank bác Quế Dương.
      cụ thể là e dùng 1 bàn phím ma trận.ví dụ mình nhấn lần lượt các phím 1,2,3,4.sau đó lcd hiện thỉ thành 1234.
      tức là ghép các lần mình nhấn phím lần lượt thành 1 chuỗi.để tạo pass hay so sánh với 1 số khác,bác hiểu ý em chứ.
      nghe danh bác lâu,lần đầu post bài,mong bác chỉ giáo.

      Comment


      • #4
        Không phải code mình viết, đọc hoa cả mắt @@
        Bạn thử chèn thêm một đoạn UART đi, khi nhận được Key nào thì truyền lên máy tính xem thử.
        Như vậy có thể kiểm tra xem là lỗi do lúc nhập Key hay do LCD, rồi sửa từ từ
        PhD group
        Email:
        or

        Comment


        • #5
          - Đúng như bác Quế Dương nói, về phần key, bạn dùng thử cái này, định nghia các ROW và COL cho phù hợp với của bạn, khai báo 1 mảng "int8 key_push[16]" để lưu trữ trạng thái các phím nha, ngoài ra khai báo thêm 1 biến "int8 allkey_unpush" để xác định các phím nhả hết. biến "rescan" để chống nẩy, được delay bằng bao nhiêu lần nhảy vào quét hàm này (không dùng timer hoặc ngắt timer), tùy độ dài ngắn mà điều chỉnh giá trị nạp vào, ở đây mình nạp vào là 50.
          - Phần LCD mình k bàn ở đây vì trong diễn đàn đã nói rất nhiều.
          Để gỡ rối chương trình, bạn phải test từng phần, khóa hết các chương trình, test hiển thị LCD, sau đó khó LCD lại, test phím nhấn, rồi test kết hợp phím với LCD để biết đang tắt ở chổ nào nha.
          Thân
          Diễn đàn dạo này sao k cho up code lên nhỉ.

          //chuong trinh quyet phim 4x4 da phim nhan khong dung timer, gia tri tra ve nam trong "key_push[16]"
          void Key_scan()
          {
          int8 i;
          int8 key_push_pre[16];

          output_bit(ROW1,1);
          output_bit(ROW2,1);
          output_bit(ROW3,1);
          output_bit(ROW0,0);
          key_push_pre[KEY1]=input(COL0);
          key_push_pre[KEY4]=input(COL1);
          key_push_pre[KEY7]=input(COL2);
          key_push_pre[KEYX]=input(COL3);

          output_bit(ROW0,1);
          output_bit(ROW1,0);
          key_push_pre[KEY2]=input(COL0);
          key_push_pre[KEY5]=input(COL1);
          key_push_pre[KEY8]=input(COL2);
          key_push_pre[KEY0]=input(COL3);

          output_bit(ROW1,1);
          output_bit(ROW2,0);
          key_push_pre[KEY3]=input(COL0);
          key_push_pre[KEY6]=input(COL1);
          key_push_pre[KEY9]=input(COL2);
          key_push_pre[KEYT]=input(COL3);

          output_bit(ROW2,1);
          output_bit(ROW3,0);
          key_push_pre[KEYA]=input(COL0);
          key_push_pre[KEYB]=input(COL1);
          key_push_pre[KEYC]=input(COL2);
          key_push_pre[KEYD]=input(COL3);

          if (rescan>0) rescan--;
          if (key_index==0)
          {
          for (i=0;i<16;i++)
          {
          if (key_push_pre[i]!=key_push[i])
          {
          key_index=1;
          rescan=50;
          key_pos=i;
          }
          }
          }
          else if (key_index==1)
          {
          if (key_push_pre[key_pos]==key_push[key_pos])
          {
          key_index=0;
          }
          else if (rescan==0)
          {
          key_push[key_pos]=key_push_pre[key_pos];
          key_index=0;
          }
          }
          allkey_unpush=TRUE;
          for (i=0;i<16;i++)
          {
          if (key_push[i]==PUSH)
          {
          allkey_unpush=FALSE;
          }
          }
          }
          Last edited by kevo1tinh; 28-09-2014, 13:23.

          Comment

          Về tác giả

          Collapse

          Thái Tuế_vy Tìm hiểu thêm về Thái Tuế_vy

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

          Collapse

          Đang tải...
          X