Thông báo

Collapse
No announcement yet.

dung ic chot 595 de hien thi tu 00 99

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

  • dung ic chot 595 de hien thi tu 00 99

    ai biet giup ho minh nha ?

  • #2
    Đặt câu hỏi cho rõ mới giúp được chứ. 595 là để ghi dịch và chốt data, hiển thị (ở đây chắc là led 7 đoạn) thì cần đưa dữ liệu vào các chân tương ứng với mã 7 đoạn. Vi điều khiển cần "giao tiếp" với 595 theo kiểu truyền nối tiếp. Tìm trên diễn đàn có rất nhiều .Thế thôi

    Comment


    • #3
      em cảm ơn anh nka ? ở đây dùng led 7thanh ?em không ghi rõ .

      Comment


      • #4
        anh ơi sửa hộ em cái code : e viết đúng mà không chạy :
        #include <mega16.h>
        #include <delay.h>
        unsigned int i=0;
        unsigned char mang[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67} ;
        #define DATA PORTC.0
        #define SCK PORTC.1
        #define SCL PORTC.2
        void quet(unsigned char x)
        {
        int i;
        for(i=0;i<8;i++)
        {
        DATA=x&0x80;
        x<<=1;
        SCK=0;
        SCK=1;
        }
        SCL=0;
        SCL=1;
        }

        void hienthi(void )
        {
        PORTB.0=1;
        PORTB.0=0;delay_ms(10);
        PORTB.1=1;
        PORTB.1=0;delay_ms(10);
        }

        void main(void)
        {

        PORTA=0x00;
        DDRA=0x00;


        PORTB=0x00;
        DDRB=0x03;


        PORTC=0x00;
        DDRC=0x03;


        PORTD=0x00;
        DDRD=0x00;

        while (1)
        {
        for(i=0;i<100;i++)
        hienthi();
        {
        quet(mang[i]);delay_ms(100);
        }
        }
        }

        Comment


        • #5
          mạch của em nhá có gì anh sửa giúp hộ em ? em cảm ơn anh nhiều Click image for larger version

Name:	00 99999999.jpg
Views:	2
Size:	93.2 KB
ID:	1390727
          Last edited by anhthongm; 23-12-2013, 22:05.

          Comment


          • #6
            ai biết giúp sửa hộ mình cái code nhá ? 00 99 dùng atmega16 hiển thị led 7thanh 595

            #include <mega16.h>
            #include <delay.h>
            unsigned int i=0;
            unsigned char mang[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67} ;
            #define DATA PORTC.0
            #define SCK PORTC.1
            #define SCL PORTC.2
            void quet(unsigned char x)
            {
            int i;
            for(i=0;i<8;i++)
            {
            DATA=x&0x80;
            x<<=1;
            SCK=0;
            SCK=1;
            }
            SCL=0;
            SCL=1;
            }

            void hienthi(void )
            {
            PORTB.0=1;
            PORTB.0=0;delay_ms(10);
            PORTB.1=1;
            PORTB.1=0;delay_ms(10);
            }

            void main(void)
            {

            PORTA=0x00;
            DDRA=0x00;


            PORTB=0x00;
            DDRB=0x03;


            PORTC=0x00;
            DDRC=0x03;


            PORTD=0x00;
            DDRD=0x00;

            while (1)
            {
            for(i=0;i<100;i++)
            hienthi();
            {
            quet(mang[i]);delay_ms(100);
            }
            }
            }
            Attached Files

            Comment


            • #7
              Phải có xung ở chân chốt dữ liệu ra nữa, mình dùng điện thoại nhìn hình mờ quá ko rõ
              Last edited by vuhapassall; 24-12-2013, 09:52.

              Comment


              • #8
                bạn sai chỗ này này x&0x80 . đây là toán tử and 8 bit. bạn gán cho chân data sẽ luôn =0. sửA lại thành dâta=x && 0x80 nhé hoặc sửa data= (( x & 0x80)==0x80)

                Comment


                • #9
                  anh ơi vẫn không được ? code của em đấy em viết chạy từ 0 9 thi được rồi ? nhưng em viết chạy từ 00 99 thì em khai bao thêm chân ở cổng PORTB.0 VA PORTB.1 ở led 7 thanh ? không hiển thị gì cả . anh xem giúp em nhá

                  Comment


                  • #10
                    mắc sơ đồ như trên, muốn hiển thị 2 dìgit thì nối cả chân 1:2 và sử dụng kỹ thuật quét led nhé (hàm hiển thị của bạn) nhưng bạn viết hàm hiện thị sai rồi, 2 digit phải hiển thị thay phiên nhau với những giá trị tương ứng khác nhau ( truyền lại quyét data cho 595 trc khi đổi digit)

                    Comment


                    • #11
                      em cảm ơn anh nhá ? anh có thể viết cho em xin đoạn code hiển thi không ? vì em cũng mới học avr thôi ? không hiểu cho nhiều lắm .

                      Comment


                      • #12
                        bạn có thể sửa hàm hiển thị thành void hienthi(unsigned char x1,unsigned char x2 )
                        {
                        quyet(x1);
                        PORTB.0=1;
                        delay_ms(10);
                        PORTB.0=0;

                        quyet(x2);
                        PORTB.1=1;
                        delay_ms(10);
                        PORTB.1=0;

                        }
                        còn trong vòng lặp chính để hiển thị 23 thì như này
                        while (1)
                        {

                        hienthi(2,3);

                        }


                        Tuy nhiên code trên chạy vào thực tế rất nhiều nhược điểm cần căn chỉnh với việc mcu phải quét liên tục, và căn chỉnh thời gian làm led7 bị nhấp nháy và sáng không đều. 595 có ưu điểm là mở rộng số chân và chốt được dữ liệu, tuy nhiên bạn làm như thế này không tận dụng được ưu thế của nó (chốt dữ liệu để mcu làm việc khác). Bạn nên dùng 2 ic 595 cho 2 digit rời nhau

                        Comment


                        • #13
                          hiển thị thiếu ? và không thàh số anh à ? không biết bị làm sao anh ơi ? chạy loạn lắm anh xem ho em với "
                          Last edited by anhthongm; 24-12-2013, 20:39.

                          Comment


                          • #14
                            mình nhầm chút bạn sửa lại như vầy:
                            void hienthi(unsigned char x1,unsigned char x2 )
                            {
                            quyet(mang[x1]);
                            PORTB.0=1;
                            delay_ms(10);
                            PORTB.0=0;

                            quyet(mang[x2]);
                            PORTB.1=1;
                            delay_ms(10);
                            PORTB.1=0;

                            }
                            còn trong vòng lặp chính để hiển thị 23 thì như này
                            while (1)
                            {

                            hienthi(2,3);

                            }
                            BẠn chạy mô phỏng sợ không đáp ứng được hiển thị quyét led đâu. Tốt nhất bạn nên nối 2 con 595 với 2 led rời
                            Last edited by vuhapassall; 24-12-2013, 23:03.

                            Comment


                            • #15
                              anh ơi xem hộ em lại chương trình đi ... dùng phương pháp quét led .. hiển thị từ 00 99 thì cú hiển thị 2so giống nhau thôi như la: 00 11 22 33 44 ... không theo tuần tự chán lắm . hỏi nhiều anh quá 19 mãi mà không xong .

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X