Thông báo

Collapse
No announcement yet.

Hiển thị số thực_LCD

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

  • Hiển thị số thực_LCD

    Khi mới học lập trình thì những bài toán giao tiếp với LCD và led 7 thanh là rất cơ bản và đơn giản.
    Vậy mà đã học được 1 thời gian rùi nay mình lại bị mắc một bài toán :

    " Hiển thị giá trị số thực lên LCD và Led 7 thanh "

    Nhờ các bá cao thủ trên diễn đàn chỉ giáo, ko biết làm thế nào để xác định giá trị trong một biến là số thực hay số nguyên ??? Rồi lại còn phải tách phần nguyên và phần thập phân nữa chứ ....... hóc búa quá .** Mong được mọi người chỉ giáo ...thank ****
    __________________
    ** xin hãy cho tôi là tượng đá
    ** Để muôn đời không nhớ thương ai ..!!
    ** Xin hãy cho tôi là tượng đá
    ** Để muôn đời không nhớ thương ai !!

  • #2
    Nguyên văn bởi picpen_dtk3 Xem bài viết
    Khi mới học lập trình thì những bài toán giao tiếp với LCD và led 7 thanh là rất cơ bản và đơn giản.
    Vậy mà đã học được 1 thời gian rùi nay mình lại bị mắc một bài toán :

    " Hiển thị giá trị số thực lên LCD và Led 7 thanh "

    Nhờ các bá cao thủ trên diễn đàn chỉ giáo, ko biết làm thế nào để xác định giá trị trong một biến là số thực hay số nguyên ??? Rồi lại còn phải tách phần nguyên và phần thập phân nữa chứ ....... hóc búa quá .** Mong được mọi người chỉ giáo ...thank ****
    __________________
    ** xin hãy cho tôi là tượng đá
    ** Để muôn đời không nhớ thương ai ..!!
    Em nghĩ số thực hay số nguyên thì bác phải biết chớ. Vì cùng một dữ liệu trên các byte thì tùy vào ta quy định nó là kiểu gì thì nó sẽ có giá trị tương ứng.

    Để giải quyết vấn đề viết số thực hay nguyên thì bác hãy đọc lại trong sách kỹ thuật số xem cách biểu diễn số thực, số nguyên trong hệ nhị phân như thế nào nhé. PM cho em nếu bác cần tài liệu này.
    Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
    Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.

    Comment


    • #3
      Nguyên văn bởi picpen_dtk3 Xem bài viết
      Khi mới học lập trình thì những bài toán giao tiếp với LCD và led 7 thanh là rất cơ bản và đơn giản.
      Vậy mà đã học được 1 thời gian rùi nay mình lại bị mắc một bài toán :

      " Hiển thị giá trị số thực lên LCD và Led 7 thanh "

      Nhờ các bá cao thủ trên diễn đàn chỉ giáo, ko biết làm thế nào để xác định giá trị trong một biến là số thực hay số nguyên ??? Rồi lại còn phải tách phần nguyên và phần thập phân nữa chứ ....... hóc búa quá .** Mong được mọi người chỉ giáo ...thank ****
      __________________
      ** xin hãy cho tôi là tượng đá
      ** Để muôn đời không nhớ thương ai ..!!
      Hóc búa gì đâu??
      Bác chịu khó xem lại tập lệnh và hàm đi, vấn đề này không khó. HIển thị được chữ số rồi, thêm tý nữa để hiển thị số nguyên, loằng ngoằng tẹo nữa là được nốt số thực
      Nếu vẫn bí, thì trong diễn đàn có nhiều chương trình mẫu đấy (như của anh linhnc)
      ●█═██▄▄▄▄▄▄▄▄▄
      ▄▅██████▅▄▃▂
      ████████████████
      ◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤

      Comment


      • #4
        Để hiển thị số thực ra LCD, thay vì dùng %d để hiển thị số nguyên ta đổi thành %f là được.
        Còn để quét ra led 7 thanh, nếu muốn lấy sau dấu phảy 2 số, bạn nhân số thực đó với 100. Sau đó ep kiểu thành kiểu nguyên, rồi mới tiến hành tách. ví dụ số t = 12,541

        //===================
        t *= 1000;
        t = (int)(t);
        phan_thuc = t%1000;
        phan_nguyen = t/1000;
        //===================
        đến đây ban tách tương tự 1 số 1 để đưa ra quét led.
        Last edited by minhhieu; 21-08-2008, 10:58.
        n
        ĐT: 0986 492 489

        Tham khảo:

        Comment


        • #5
          Nguyên văn bởi minhhieu Xem bài viết
          Để hiển thị số thực ra LCD, thay vì dùng %d để hiển thị số nguyên ta đổi thành %f là được.
          Còn để quét ra led 7 thanh, nếu muốn lấy sau dấu phảy 2 số, bạn nhân số thực đó với 100. Sau đó ep kiểu thành kiểu nguyên, rồi mới tiến hành tách. ví dụ số t = 12,541

          //===================
          t *= 1000;
          t = (int)(t);
          phan_thuc = t%1000;
          phan_nguyen = t/1000;
          //===================
          đến đây ban tách tương tự 1 số 1 để đưa ra quét led.
          Đang ở trong box 8051, lập trình asm đi bác. Đó mới là vấn đề.
          Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
          Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.

          Comment


          • #6
            Nguyên văn bởi nghaiha Xem bài viết
            Đang ở trong box 8051, lập trình asm đi bác. Đó mới là vấn đề.
            8051 thì C cũng được chớ sao đâu, mấy cái floating point mà làm asm định nghĩa cho giống người ta thì cũng là 1 mớ phức tạp.
            Đây, định nghĩa cho đúng đã: http://en.wikipedia.org/wiki/IBM_Flo...t_Architecture trước khi hiển thị,
            Tóm lại, làm asm cũng được, mỗi tội, mấy cái việc tính toán này em nghĩ nên để cho compiler nó làm thì hay hơn, thế nên em viết C

            Nhưng viết C rồi thì hiển thị thế nào, hàm fprintf hỗ trợ việc chuyển toàn bộ giá trị thực ra các giá trị ascii, mình viết thêm 1 hàm chuyển từ ascii sang 7 đoạn có thêm mã kí tự '.' là ok thôi, tham khảo thử cái này xem,
            PHP Code:
            unsigned char ptr 0num;
            unsigned char buffer[10]; //vùng RAM chứa mã LED 7 đoạn để xuất ra, 
            //ở đây là 10 LED 
            void led7segchar c) {
               if(
            c>0x30num 10;
               else {
                
            num += 0x30;
                
            buffer[ptr] = table_led7doan[num];
                
            ptr++;
                if(
            ptr>=10ptr 0;
                
            num 0;
               }
            }
            //với table_led7doan[] là bảng const chứa mã 7 đoạn từ 
            //0-9 và mã 7 đoạn từ 0-9 có dấu '.' ở sau
            //Bạn muốn in từ vị trí nào thì cho ptr bằng giá trị đó


            //Bạn sử dụng hàm fprintf như sau
            fprintf(buffer"Float: %f",fvar); //chuyển sang ascii vào trong buffer;
            unsigned char i=0;
            ptr 0;
            while(
            str[i] != '\0') {
            led7seg(buffer[i]);
             
            i++;

            Lưu ý là bảng mã 7 đoạn từ 0-9 chứa trong 10 byte đầu, và 0-9 có dấu chấm chứa trong 10 byte tiếp theo
            Diễn đàn Vi điều khiển:

            Comment


            • #7
              Bạn cứ lấy số đó chia cho #10 thì ra số nguyên và số dư ngay thôi.
              Sau khi thực hiện lệnh chia ta được
              Số nguyên mặc định chứa trong thanh ghi A.
              Số dư chứa trong tg B.
              Thế là xong rồi còn gì.

              Comment

              Về tác giả

              Collapse

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

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

              Collapse

              Đang tải...
              X