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

                  Đang tải...
                  X