Thông báo

Collapse
No announcement yet.

Giúp mình quét 8 LED7 chạy sai

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

  • Giúp mình quét 8 LED7 chạy sai

    Mình mới học led7 avr trên kit atmega16 của minh hà group, hiện mới biết làm đếm tăng giảm và hiển thị nhiều số cùng lúc
    Nhưng từ hqa đến h mình muốn cho hiển thị 1 số cố định lên 8 LED7 cùng 1 lúc như là 99990000 hay là 20092858 thì nó lại chỉ hiện đúng 5 bit bên trái ngoài cùng, 3 bit còn lại thì sai
    Đây là hình kết nối phần cứng của kit

    Click image for larger version

Name:	Untitled.jpg
Views:	1
Size:	64.6 KB
ID:	1417385

    Đây là code quét của mình
    Mọi người liếc qua giúp mình chút vì mình cũng đau đầu vì nó cả chiều
    Code:
    #include <mega16.h>
    #include <delay.h>
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef   signed          char int8_t;
    typedef   signed            int int16_t;
    typedef   signed long      int int32_t;
    
    /*    Kieu So Nguyen Khong Dau */
    typedef   unsigned         char uint8_t;
    typedef   unsigned            int  uint16_t;
    typedef   unsigned long    int  uint32_t;
    
    static uint8_t num[]= { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
    uint32_t a,j;
    int	temp,i		;
    
    void display(uint32_t number)
    {
    	j=0x01;  
        for(i=7;i>=0;i--)
        {
            a=pow(10,i);
            temp = (uint32_t)number / a;
            PORTA = 0x08;                 //allow number
            PORTB = num[temp];
            PORTA = 0x10;                //allow led
            PORTB = j;
            delay_us(900);
            j=j<<1;
            number = number % a; 
        }        
    };
    
    void main()
    {
    
    PORTA=0x00;
    DDRA=0xFF;
    
    PORTB=0x00;
    DDRB=0xFF;
    
    while (1)
    {
    	display(99990000);
    }
    }

  • #2
    ai xem qua giúp mình với

    Comment


    • #3
      Bạn thử cho nó hiển thị 3 bit bên phải không xem có Đc ko. Có khi là hỏng LED.
      AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
      Xem thêm tại Online Store ---> Click here
      Mob: 0982.083.106

      Comment


      • #4
        Nguyên văn bởi FrozenSense Xem bài viết
        Mình mới học led7 avr trên kit atmega16 của minh hà group, hiện mới biết làm đếm tăng giảm và hiển thị nhiều số cùng lúc
        Nhưng từ hqa đến h mình muốn cho hiển thị 1 số cố định lên 8 LED7 cùng 1 lúc như là 99990000 hay là 20092858 thì nó lại chỉ hiện đúng 5 bit bên trái ngoài cùng, 3 bit còn lại thì sai
        Đây là hình kết nối phần cứng của kit

        [ATTACH=CONFIG]66980[/ATTACH]

        Đây là code quét của mình
        Mọi người liếc qua giúp mình chút vì mình cũng đau đầu vì nó cả chiều
        Code:
        #include <mega16.h>
        #include <delay.h>
        #include <math.h>
        #include <stdio.h>
        #include <stdlib.h>
        
        typedef   signed          char int8_t;
        typedef   signed            int int16_t;
        typedef   signed long      int int32_t;
        
        /*    Kieu So Nguyen Khong Dau */
        typedef   unsigned         char uint8_t;
        typedef   unsigned            int  uint16_t;
        typedef   unsigned long    int  uint32_t;
        
        static uint8_t num[]= { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
        uint32_t a,j;
        int	temp,i		;
        
        void display(uint32_t number)
        {
        	j=0x01;  
            for(i=7;i>=0;i--)
            {
                a=pow(10,i);
                temp = (uint32_t)number / a;
                PORTA = 0x08;                 //allow number
                PORTB = num[temp];
                PORTA = 0x10;                //allow led
                PORTB = j;
                delay_us(900);
                j=j<<1;
                number = number % a; 
            }        
        };
        
        void main()
        {
        
        PORTA=0x00;
        DDRA=0xFF;
        
        PORTB=0x00;
        DDRB=0xFF;
        
        while (1)
        {
        	display(99990000);
        }
        }
        cậu thử bỏ cái phần quét led bằng dịch bít bằng cách khai báo 1 mảng giá trị đẻ quét led xem.
        VD: led 1 thì Port B=1;
        led 2 thì Port B=2
        led 3 thì Port B=4.......

        Comment


        • #5
          Nguyên văn bởi VNarmy Xem bài viết
          Bạn thử cho nó hiển thị 3 bit bên phải không xem có Đc ko. Có khi là hỏng LED.
          mình đã thử cho hiển thị ngược lại từ phải sang trái, thì 3 bit bên trái ngoài cùng vẫn bị như thế
          VD số : 20090000
          mình cho nó hiện quét led từ trái sang thì là 20090300
          quét từ phải sang thì hiện 00309002
          và đặc biệt là 99999999 thì lại hiển thị linh tinh ( 1 ký tự không ra hình số)
          Trong khi mình chạy thử code = devC thì chả sai gì kết quả từng số biến temp rất chuẩn mà

          Comment


          • #6
            xem lại mã led 7 vạch xem đúng chưa..!!??
            với lại thêm dòng xóa các led nữa

            Comment


            • #7
              Nguyên văn bởi tan0710 Xem bài viết
              cậu thử bỏ cái phần quét led bằng dịch bít bằng cách khai báo 1 mảng giá trị đẻ quét led xem.
              VD: led 1 thì Port B=1;
              led 2 thì Port B=2
              led 3 thì Port B=4.......
              mình thử thay bằng hàm j = pow(2,i) nó vẫn bị lỗi vậy bạn ạ

              Comment


              • #8
                các bạn cho mình hỏi hàm a = 49999999/10000000 no se xap xi a = 5 dung ko, han nao no hien thi cai 99999999 ra sai;
                làm tnao de no không lấy xap xi a nua nhỉ

                Comment


                • #9
                  Cảm ơn các bạn mình sửa được rồi, hóa ra là lỗi tại hàm pow, ko biết tại sao nhưng mình sửa lại thành
                  Code:
                          uint32_t a=1;  
                          
                  		for(j=i;j>0;j--)
                  			a=a*10;
                  nó lại đúng rồi, mất bn tgian

                  Comment

                  Về tác giả

                  Collapse

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

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

                  Collapse

                  • bqviet
                    Trả lời cho Đấu tắt điện cho máy tính bảng
                    bởi bqviet
                    Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
                    06-12-2025, 17:17
                  • nguyendinhvan
                    Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
                    bởi nguyendinhvan
                    Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
                    05-12-2025, 19:59
                  • afrendly
                    Trả lời cho Đấu tắt điện cho máy tính bảng
                    bởi afrendly
                    Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
                    04-12-2025, 01:27
                  • nick22
                    Trả lời cho Máy điện châm ?
                    bởi nick22
                    Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
                    01-12-2025, 13:23
                  Đang tải...
                  X