Thông báo

Collapse
No announcement yet.

kỹ thuật bảng dùng ngôn ngữ C

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

  • kỹ thuật bảng dùng ngôn ngữ C

    chào các bạn!
    các bạn cho mình hỏi chút về kỹ thuật lập bảng dùng ngôn ngữ C với.
    giả sử mình có 5 giá trị.(100,102,105,106,110)
    giờ mình muốn cho tất cả các giá trị đó vào 1 cái mảng aray[] chẳng hạn.
    sau đó mình sẽ đọc giá trị ở 1 chân VDk và so sánh với cái bảng trên
    nếu có giá trị 100 thì sẽ hiện chữ A lên LCD.
    nếu có giá trị 102 thì sẽ hiện chữ B lên LCD
    nếu có giá trị 105 thì sẽ hiện chữ c lên LCD.
    nếu có giá trị 106 thì sẽ hiện chữ D lên LCD
    nếu có giá trị 110 thì sẽ hiện chữ E lên LCD.
    .....
    cứ như vậy đến hết thì thui.

    vậy mình sẽ phải lập trình như thế nào? các bạn cho mình cái thuật toán với
    có code vd thì càng tốt.
    P/S: nếu mình đọc giá trị 107 ko có trong bảng nhưng nó gần với giá trị 106 nhất thì sẽ vẫn hiển thị chữ D như giá trị 106 thì mình phải làm như thế nào?
    mong các bạn góp ý!
    cám ơn nhiều!

  • #2
    Gợi ý cho bác thế này:
    Các giá trị tham chiếu đặt ở trong một mảng constant ví dụ TemplateValue[MAX]
    Các giá trị cần hiển thị tương ứng cũng đặt trong một mảng (lưu ý phải có vị trí đồng bộ với mảng trên) ví dụ OutValue[MAX]
    Giá trị đọc vào từ một chân VĐK đưa vào biến InValue
    Sử dụng vòng lặp for:
    Code:
    for(i = 0, lower = 0, upper = TemplateValue[MAX - 1]; i < MAX; i++)
    {
        if(InValue == TemplateValue[i])
        {
             LCD_output(OutValue[i]);
             return;    // if do nothing longer
        }
        else if((InValue > TemplateValue[i]) && (lower < TemplateValue[i]))    // get nearest lower value
        {
            lower = TempValue[i];
            lower_idx = i;    // save position
        }
        else if((InValue < TemplateValue[i]) && (upper > TemplateValue[i]))    // get nearest upper value
        {
            upper = TemplateValue[i];
            upper_idx = i;    // save position
        }
    }
    sub1 = InValue - lower;    // calculate the bias
    sub2 = upper - InValue;
    if(sub1 == sub2)
    {
        LCD_output(OutValue[lower_idx]);    // or LCD_output(OutValue[upper_idx]) because InValue is middle of lower-upper
        return;
    }
    else if(sub1 > sub2)    // InValue close to upper than lower
    {
        LCD_output(OutValue[upper_idx]);
        return;
    }
    else        // InValue close to lower than upper
    {
        LCD_output(OutValue[lower_idx]); 
        return;
    }
    Hi vọng giúp được bác chút ít gì đó.
    Thân ái.
    Last edited by Hard; 15-07-2011, 12:19.
    Đường đến những ngày vinh quang không còn xa
    Con đường chúng ta... chúng ta đã chọn.

    Comment


    • #3
      Nguyên văn bởi Hard Xem bài viết
      Gợi ý cho bác thế này:
      Các giá trị tham chiếu đặt ở trong một mảng constant ví dụ TemplateValue[MAX]
      Các giá trị cần hiển thị tương ứng cũng đặt trong một mảng (lưu ý phải có vị trí đồng bộ với mảng trên) ví dụ OutValue[MAX]
      Giá trị đọc vào từ một chân VĐK đưa vào biến InValue
      Sử dụng vòng lặp for:
      Code:
      for(i = 0, lower = 0, upper = TemplateValue[MAX - 1]; i < MAX; i++)
      {
          if(InValue == TemplateValue[i])
          {
               LCD_output(OutValue[i]);
               return;    // if do nothing longer
          }
          else if((InValue > TemplateValue[i]) && (lower < TemplateValue[i]))    // get nearest lower value
          {
              lower = TempValue[i];
              lower_idx = i;    // save position
          }
          else if((InValue < TemplateValue[i]) && (upper > TemplateValue[i]))    // get nearest upper value
          {
              upper = TemplateValue[i];
              upper_idx = i;    // save position
          }
      }
      sub1 = InValue - lower;    // calculate the bias
      sub2 = upper - InValue;
      if(sub1 == sub2)
      {
          LCD_output(OutValue[lower_idx]);    // or LCD_output(OutValue[upper_idx]) because InValue is middle of lower-upper
          return;
      }
      else if(sub1 > sub2)    // InValue close to upper than lower
      {
          LCD_output(OutValue[upper_idx]);
          return;
      }
      else        // InValue close to lower than upper
      {
          LCD_output(OutValue[lower_idx]); 
          return;
      }
      Hi vọng giúp được bác chút ít gì đó.
      Thân ái.
      bạn ơi mình viết như thế này sai ở chỗ nào mà nó ko chạy,các ban chỉ dùm với!.
      const unsigned char MANG[20]={41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56, 67,68,59,60}
      giả sử đọc giá trị tại 1 chân của VĐK gán vào biến a ( a là giá trị đọc từ 1 chân VĐK và a có giá trị từ 1 đến 20)

      b=MANG[a];// với a biến đổi từ 1>>>20.
      sau đó hiển thị b lên LED 7 thanh thì chỉ toàn số 0.
      mình đã thử cho a=1,2,3 thì hiển thị b= 41,42 và 43.như vậy là QUÉT LED đúng.
      nhưng khi mình gán giá trị từ 10,11....20. thì sao lại hiển thị toàn số 0 nhi?
      ban xem giúp mình với.
      cám ơn bạn!
      Last edited by kiemkhach10; 15-07-2011, 19:43.

      Comment


      • #4
        Nguyên văn bởi kiemkhach10 Xem bài viết
        bạn ơi mình viết như thế này sai ở chỗ nào mà nó ko chạy,các ban chỉ dùm với!.
        const unsigned char MANG[20]={41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56, 67,68,59,60}
        giả sử đọc giá trị tại 1 chân của VĐK gán vào biến a ( a là giá trị đọc từ 1 chân VĐK và a có giá trị từ 1 đến 20)

        b=MANG[a];// với a biến đổi từ 1>>>20.
        sau đó hiển thị b lên LED 7 thanh thì chỉ toàn số 0.
        mình đã thử cho a=1,2,3 thì hiển thị b= 41,42 và 43.như vậy là QUÉT LED đúng.
        nhưng khi mình gán giá trị từ 10,11....20. thì sao lại hiển thị toàn số 0 nhi?
        ban xem giúp mình với.
        cám ơn bạn!
        Hi,
        Lỗi này thì bác post code lên thôi, không thể tìm ra lỗi từ mô tả trên của bác, có thể sai kiểu dữ liệu hay gì gì đó. Bác lưu ý là đối với mảng thì phần tử đầu tiên đứng ở vị trí 0 do đó phần tử thứ 20 của bác là MANG[19| do đó biến a của bác chỉ lấy được giá trị từ 0 đến 19 mà thôi.
        Thân ái.
        Đường đến những ngày vinh quang không còn xa
        Con đường chúng ta... chúng ta đã chọn.

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        • mèomướp
          Trả lời cho Sửa bộ nguồn DC 60V 45A
          bởi mèomướp
          Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
          hôm nay, 13:11
        • tuyennhan
          Trả lời cho Sửa bộ nguồn DC 60V 45A
          bởi tuyennhan
          Sửa dạng này thì chuyên còn không dám chắc khộng cháy nổ với linh kiện bán ngoài chợ nói gì khộng chuyên .
          hôm nay, 09:25
        • tuyennhan
          Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
          bởi tuyennhan
          Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
          Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
          hôm nay, 09:10
        • Ng.Phuong.5
          Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
          bởi Ng.Phuong.5
          Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
          Mấy con...
          Hôm qua, 19:44
        • viettinh
          Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
          bởi viettinh
          Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
          Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
          Hôm qua, 18:12
        • nguyendinhvan
          Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
          bởi nguyendinhvan
          Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
          Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
          Cách đơn giản...
          Hôm qua, 00:04
        • mèomướp
          Trả lời cho Sửa bộ nguồn DC 60V 45A
          bởi mèomướp
          Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
          08-01-2025, 19:02
        • tuyennhan
          Trả lời cho Sửa bộ nguồn DC 60V 45A
          bởi tuyennhan
          Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
          08-01-2025, 15:43
        • tuyennhan
          Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
          bởi tuyennhan
          Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
          08-01-2025, 15:28
        • mèomướp
          Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
          bởi mèomướp
          Dạ loa tép bé xíu như ngón chân cái thôi ạ. Thiếu gì chỗ để đâu. Quan trọng là gắn thêm nó loa nghe ok hay ko thôi ạ...
          08-01-2025, 11:44
        Đang tải...
        X