Thông báo

Collapse
No announcement yet.

Hiển thị số có 3 chữ số thể nào?

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

  • Hiển thị số có 3 chữ số thể nào?

    Các brother ơi,giúp em đoạn này với.
    Em 1 hiển thị 1 biến( 1 số có 3 chữ số) ra LCD.Nói chung là ra đâu không quan trọng, nhưng vấn đề là thuật toán lấy ra chữ số hàng trăm, hàng chục, hàng đơn vị của em hình như không đúng, mà em chẳng thấy sai ở đâu cả,xin các brother giúp đỡ.
    Chương trình cụ thế em viết như sau:


    Code:
    #include "D:\vd\lcd1.h"
    #include<lcd_lib_4bit.c>
    
    int8 tram,chuc,donvi;
    void httram();
    void tinhtoan();
    int8 x;
    void tinh_toan(x)
    {x=210;//số này em viết thử nghiệm thui
    tram = x/100 + 0x30;
    x==x-tram/100;
     chuc=x/10 + 0x30;
     donvi=x-chuc*10;
    }
    void httram()
    {if(tram=0) printf(lcd_putchar,"0");else{
    if(tram=1) printf(lcd_putchar,"1");else{
    if(tram=2) printf(lcd_putchar,"2");}}
    }
    void htchuc()
    {
    if(chuc=0) printf(lcd_putchar,"0");else{
    if(chuc=1) printf(lcd_putchar,"1");else{
    if(chuc=2) printf(lcd_putchar,"2");}}}
    void htdonvi()
    {
    if(donvi=0) printf(lcd_putchar,"0");else{
    if(donvi=1) printf(lcd_putchar,"1");else{
    if(donvi=2) printf(lcd_putchar,"2");}}}
    
    void main()
    {
    
       setup_adc_ports(NO_ANALOGS);
       setup_adc(ADC_OFF);
       setup_psp(PSP_DISABLED);
       setup_spi(FALSE);
       setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
       setup_timer_1(T1_DISABLED);
       setup_timer_2(T2_DISABLED,0,1);
       lcd_init();
       delay_ms(200);
       printf(lcd_putchar,"hien thi nao");
       lcd_putcmd(0xc0);
       tinh_toan(x);
     httram();
     htchuc();
     htdonvi();
    }


    Hik,thế mà kêt quả hiện thị của em toàn là thế này ( mời các brother xem file đính kèm).
    Sau vài lần thử thì em thấy nó tất cả đều hiện thị ra giá trị của hàm if thứ 2,k hiểu nổi luôn.
    Attached Files
    Last edited by namqn; 29-04-2008, 17:25.

  • #2
    Bạn dùng code CCS phải không. Nếu tôi nhớ không nhầm thì lệnh sau sẽ giúp bạn in ra số trên LCD:
    printf(lcd_putchar,"%d",ten_bien);

    Tùy vào dải giá trị của biến mà bạn thay đổi %d,%lu ...Xem them phần Help về lệnh Printf
    Chương trình của bạn không chạy đúng vì có các lỗi sau:
    1. Chưa khởi tạo giá trị cho biến X trước khi gọi hàm tinhtoan(x)
    2. Chương trình tinhtoan với mục đích tách các số hàng trăm hàng chục của bạn có vấn đề. Chú ý rằng khi X là số có 3 chữ số thì X = tram*100 + chuc*10 + donvi

    Chương trình đúng(sửa theo chương trình cũ của bạn).
    Code:
    void tinhtoan_hienthi(int8 x) // thuc hien tach so va dua ra hien thi luon
    {
     tram = x / 100 + 0x30; // tách số hàng trăm
     x = x % 100; // chia lấy phần dữ
     chuc = x / 10 + 0x30; // tách lấy phần chục
     donvi = x % 10 + 0x30; // phần đơn vị
     lcd_putcmd(0xC0);
     printf(lcd_putchar,"X=");
     lcd_putchar(tram);
     lcd_putchar(chuc);
     lcd_putchar(donvi);
    }
    void main()
    {
    
    setup_adc_ports(NO_ANALOGS);
    setup_adc(ADC_OFF);
    setup_psp(PSP_DISABLED);
    setup_spi(FALSE);
    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
    setup_timer_1(T1_DISABLED);
    setup_timer_2(T2_DISABLED,0,1);
    lcd_init();
    delay_ms(200);
    printf(lcd_putchar,"hien thi nao");
     x = 0; // khoi tao gia tri cho X
    while(1) // doan chuong trinh hien thi X len LCD va dem tien gia tri X
    {
       tinhtoan(x);
       delay_ms(500);
       x++;
    }
    }
    Em cảm ơn anh Nam đã sửa,em quên không đưa đoạn code vào thẻ
    Last edited by linhnc308; 29-04-2008, 17:48. Lý do: updated
    Ethernet-RS232, PIC Webserver, RFID Reader
    CallerID, Cảnh báo BTS, ...
    0988006696
    linhnc308@gmail.com
    http://linhnc308.blogspot.com

    Comment


    • #3
      Nguyên văn bởi linhnc308 Xem bài viết
      Bạn dùng code CCS phải không. Nếu tôi nhớ không nhầm thì lệnh sau sẽ giúp bạn in ra số trên LCD:
      printf(lcd_putchar,"%d",ten_bien);

      Tùy vào dải giá trị của biến mà bạn thay đổi %d,%lu ...Xem them phần Help về lệnh Printf
      Chương trình của bạn không chạy đúng vì có các lỗi sau:
      1. Chưa khởi tạo giá trị cho biến X trước khi gọi hàm tinhtoan(x)
      2. Chương trình tinhtoan với mục đích tách các số hàng trăm hàng chục của bạn có vấn đề. Chú ý rằng khi X là số có 3 chữ số thì X = tram*100 + chuc*10 + donvi

      Chương trình đúng(sửa theo chương trình cũ của bạn).
      Code:
      void tinhtoan_hienthi(int8 x) // thuc hien tach so va dua ra hien thi luon
      {
       tram = x / 100 + 0x30; // tách số hàng trăm
       x = x % 100; // chia lấy phần dữ
       chuc = x / 10 + 0x30; // tách lấy phần chục
       donvi = x % 10 + 0x30; // phần đơn vị
       lcd_putcmd(0xC0);
       printf(lcd_putchar,"X=");
       lcd_putchar(tram);
       lcd_putchar(chuc);
       lcd_putchar(donvi);
      }
      void main()
      {
      
      setup_adc_ports(NO_ANALOGS);
      setup_adc(ADC_OFF);
      setup_psp(PSP_DISABLED);
      setup_spi(FALSE);
      setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
      setup_timer_1(T1_DISABLED);
      setup_timer_2(T2_DISABLED,0,1);
      lcd_init();
      delay_ms(200);
      printf(lcd_putchar,"hien thi nao");
       x = 0; // khoi tao gia tri cho X
      while(1) // doan chuong trinh hien thi X len LCD va dem tien gia tri X
      {
         tinhtoan(x);
         delay_ms(500);
         x++;
      }
      }
      Em cảm ơn anh Nam đã sửa,em quên không đưa đoạn code vào thẻ
      Cám ơn anh Linhnc308 nhiều nhiều. Em đã thử và nó chạy khá tốt, vì em chỉ muốn là nó hiển thị biến đầu vào của em nên em bỏ câu lệnh x++ đi.
      Tuy nhiên, nó chỉ hiển thị đúng đến giá trị 255 thôi, nếu mình cho x=256 thì nó hiển thị ra so 000, và khi dùng câu lệnh x++ của anh cũng vậy, nguyên nhân là gì mọi người biết k ạ,có cách nào khắc phục k ạ?

      Comment


      • #4
        A,em da hien thi duoc roi,doi bien int8 thanh int16,cam on anh linhnc308 nhieu.

        Comment


        • #5
          bị tràn thôi (int8 x) là sao?
          theo như bạn nói thì có thể đây là biến 8 ko dấu thử bỏ số 8 đi xem sao
          hoài giờ chưa làm kiểu này nên ko rõ lắm có gì sai thì bỏ qua nha!

          Comment

          Về tác giả

          Collapse

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

          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 qua, 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 qua, 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 qua, 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...
            09-01-2025, 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 ...
            09-01-2025, 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...
            09-01-2025, 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