Thông báo

Collapse
No announcement yet.

[ Cấp cứu ] Giúp code về hiển thị led 7 thanh qua 89C51 + 74HC595

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

  • [ Cấp cứu ] Giúp code về hiển thị led 7 thanh qua 89C51 + 74HC595

    mình mới tìm hiểu về con IC 595 mà không hiểu chi tiết về nó cho lắm mong các bác giúp dùm
    Đề tài là như này : Em muốn hiển thị dòng và áp từ con ADC 0809 lên led 7 thanh thông qua con 74HC595...mà không biết phải làm như thế nào
    Đây là sơ đồ nguyên lí bên phân hiển thị của mình....mong các bác giúp đỡ
    Attached Files

  • #2
    IC ghi dịch 74HC595
    http://www.dientuvietnam.net/forums/...c-0809-a-7268/

    Comment


    • #3
      đoạn code dưới là mình cho hiển thị từ 0-->9 cho cả 2 led....từ đoạn dưới a e ai biết viết ...ví dụ như cho số ngẫu nhiên vào 2 led...code làm sao để 2 số đó có thể hiển thị lên 2 led 7 đoạn nhỉ...ai biết giúp mình với

      Sơ đồ nguyên lí tương tự phía trên nha( mi chỉ dùng 2 con 595 thôi vì 2 con còn lại tương tự )
      Đây là code của mình :
      #include<regx51.h>sbit dulieu = P2^1;
      sbit xung= P2^0;
      sbit chot= P2^2;
      void quet(unsigned char x,unsigned char y)
      {
      unsigned char i;
      for(i=0;i<8;i++)
      {
      dulieu=y&0x80;
      y=y<<1;
      xung=1;
      xung=0;
      }
      for(i=0;i<16;i++)
      {
      dulieu=x&0x80;
      x=x<<1;
      xung=1;
      xung=0;
      }


      chot=0; //xuat du lieu ra output
      chot=1;
      }
      void delay(unsigned int time)
      {
      unsigned int i;
      for(i=0;i<time;i++);
      }




      void main()
      {
      unsigned int i, k=0;
      unsigned char ma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
      unsigned char me[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};


      while(1){
      for(i=0;i<10;i++)
      {
      quet(ma[i],me[i]);
      delay(30000);
      } }


      }
      Last edited by kubjn810; 18-02-2014, 17:46.

      Comment


      • #4
        Nguyên văn bởi kubjn810 Xem bài viết
        mình mới tìm hiểu về con IC 595 mà không hiểu chi tiết về nó cho lắm mong các bác giúp dùm
        Đề tài là như này : Em muốn hiển thị dòng và áp từ con ADC 0809 lên led 7 thanh thông qua con 74HC595...mà không biết phải làm như thế nào
        Đây là sơ đồ nguyên lí bên phân hiển thị của mình....mong các bác giúp đỡ
        Send cho bạn cái code 595 còn ADC mình làm biếng viết quá, bạn tự phát triển thêm nhé. thân !

        noi tiep qua song song.pdf


        #include <reg52.h> //Dinh kem file thu vien

        sbit SCK = P2^0;
        sbit DATA = P2^1;
        sbit SCL = P2^2;

        const unsigned char dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0}; //MA 7 DOAN CHO LED A CHUNG (CA)
        unsigned char chuc, donvi;

        /*------------------------------------------GHI DICH 595-----------------------------------------*/
        void nap_1_bit()
        {
        SCK = 1;
        SCK = 0;
        }

        void xuatdata595()
        {
        SCL = 1;
        SCL = 0;
        }

        bit ghidich595(unsigned char dat)
        {
        unsigned char i;
        bit outbit;
        for (i = 0; i <= 7; i++)
        {
        outbit = dat&0x80;
        DATA = outbit;
        dat = dat << 1;
        nap_1_bit();
        }
        return(outbit);
        }
        /*-------------------------------CHUONG TRINH CON DICH TU HEX SANG BCD--------------------------------*/
        void hextobcd (unsigned char a)
        {
        chuc = dig[a/10];
        donvi = dig[a%10];
        }
        /*---------------------------------------HIEN THI LED 7 DOAN---------------------------------------*/
        void hienthi ()
        {
        ghidich595(donvi);
        ghidich595(chuc);
        xuatdata595();
        }
        /*------------------------------------------CHUONG TRINH CHINH-----------------------------------------*/
        void main()
        {
        unsigned char bien = 0;
        SCK = 0;
        DATA = 0;
        SCL = 0;

        TMOD = 0x05;
        TL0 = 0x00;

        TR0 = 1;
        TF0 = 0;
        while (1)
        {
        bien = TL0;
        if (bien == 100)
        {
        TL0 = 0;
        }
        hextobcd(bien);
        hienthi();
        }
        }
        Last edited by tramng; 18-02-2014, 19:15.

        Comment


        • #5
          Nguyên văn bởi kubjn810 Xem bài viết
          mình mới tìm hiểu về con IC 595 mà không hiểu chi tiết về nó cho lắm mong các bác giúp dùm
          Đề tài là như này : Em muốn hiển thị dòng và áp từ con ADC 0809 lên led 7 thanh thông qua con 74HC595...mà không biết phải làm như thế nào
          Đây là sơ đồ nguyên lí bên phân hiển thị của mình....mong các bác giúp đỡ
          lên mạng search cách hoạt động của 595 trước rồi test thử send vài số mình đặt sẵn xem rồi tính tiếp đến ADC

          Comment


          • #6
            Send cho bạn cái code 595 còn ADC mình làm biếng viết quá, bạn tự phát triển thêm nhé. thân !

            noi tiep qua song song.pdf


            #include <reg52.h> //Dinh kem file thu vien

            sbit SCK = P2^0;
            sbit DATA = P2^1;
            sbit SCL = P2^2;

            const unsigned char dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0}; //MA 7 DOAN CHO LED A CHUNG (CA)
            unsigned char chuc, donvi;

            /*------------------------------------------GHI DICH 595-----------------------------------------*/
            void nap_1_bit()
            {
            SCK = 1;
            SCK = 0;
            }

            void xuatdata595()
            {
            SCL = 1;
            SCL = 0;
            }

            bit ghidich595(unsigned char dat)
            {
            unsigned char i;
            bit outbit;
            for (i = 0; i <= 7; i++)
            {
            outbit = dat&0x80;
            DATA = outbit;
            dat = dat << 1;
            nap_1_bit();
            }
            return(outbit);
            }
            /*-------------------------------CHUONG TRINH CON DICH TU HEX SANG BCD--------------------------------*/
            void hextobcd (unsigned char a)
            {
            chuc = dig[a/10];
            donvi = dig[a%10];
            }
            /*---------------------------------------HIEN THI LED 7 DOAN---------------------------------------*/
            void hienthi ()
            {
            ghidich595(donvi);
            ghidich595(chuc);
            xuatdata595();
            }
            /*------------------------------------------CHUONG TRINH CHINH-----------------------------------------*/
            void main()
            {
            unsigned char bien = 0;
            SCK = 0;
            DATA = 0;
            SCL = 0;

            TMOD = 0x05;
            TL0 = 0x00;

            TR0 = 1;
            TF0 = 0;
            while (1)
            {
            bien = TL0;
            if (bien == 100)
            {
            TL0 = 0;
            }
            hextobcd(bien);
            hienthi();
            }
            }
            thầy mình yêu cầu code asm ban ơi...mình cũng chuyển file hex sang asm để xem thử ....nhưng dài hơn mình tưởng tượng @@...bạn có thể viết code asm cho mình được k

            Comment


            • #7
              phần của mình là nhận dữ liệu và hiển thị nó ra led từ còn ADC thôi...còn code bên ADC là nhiệm vụ của người khác...mình ngĩ code của bạn là đủ cho phần của mình rồi...nhưng có cái là code C ...hjx

              Comment


              • #8
                các a giúp em sửa mạch này cho nó chạy với ạ! https://www.facebook.com/groups/599271470154237/
                gmail: kimsonbka@gmail.com

                Comment


                • #9
                  Nguyên văn bởi kubjn810 Xem bài viết
                  thầy mình yêu cầu code asm ban ơi...mình cũng chuyển file hex sang asm để xem thử ....nhưng dài hơn mình tưởng tượng @@...bạn có thể viết code asm cho mình được k
                  Trong C, mình dùng 1 biến tên là bien để làm biến trung gian nhận data để xử lý hiển thị. Trong ASM, mình dùng thanh ghi A làm thanh ghi trung gian nhận data để xử lý hiển thị nhé !

                  DONVI EQU 20H ; DAT BIEN DON VI LA O NHO 20H
                  CHUC EQU 21H ; DAT BIEN CHUC LA O NHO 21H

                  MDONVI EQU 30H ; DAT BIEN MDONVI LA O NHO 30H
                  MCHUC EQU 31H ; DAT BIEN MCHUC LA O NHO 31H

                  DEM EQU 32H ;DAT BIEN DEM LA O NHO 32H
                  ;BIEN EQU 22H ;DAT BIEN BIEN LA O NHO 22H

                  XUNGSCK BIT P2.0
                  BITDATA BIT P2.1
                  XUNGSCL BIT P2.2

                  ORG 0000H

                  MOV DPTR,#MA7DOAN
                  MOV TMOD,#00000101B ; COUNTER 0, MOD 1
                  SETB TR0 ; CHO TIMER DEM
                  CLR TF0 ; XOA CO TRAN

                  MAIN:
                  LCALL HEXTOBCD
                  LCALL GIAIMA
                  LCALL DELAY_HIENTHI
                  MOV A,TL0
                  CJNE A,#100,MAIN
                  MOV TL0,#00H
                  JMP MAIN
                  ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXX
                  ;CHUYEN KET QUA DEM TRONG THANH GHI TL0 SANG SO BCD
                  ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXX
                  HEXTOBCD:
                  MOV A,TL0
                  MOV B,#10
                  DIV AB ; CHIA A CHO B, KET QUA LUU VAO A, SO DU LUU VAO B

                  MOV DONVI,B ; LUU BCD_DVI VAO ON 20H
                  MOV CHUC,A ; LUU BCD_CHUC VAO ON 21H
                  RET
                  ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXX
                  ;GIAI MA: CHUYEN SO BCD SANG MA 7 DOAN
                  ;;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXX
                  GIAIMA:
                  MOV A,DONVI
                  MOVC A,@A+DPTR ; GIAI MA DVI
                  MOV MDONVI,A

                  MOV A,CHUC
                  MOVC A,@A+DPTR ; GIAI MA CHUC
                  MOV MCHUC,A
                  RET
                  ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                  ;HIEN THI KET QUA TREN 2 LED QUET
                  ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                  HIENTHI:
                  MOV A,MDONVI
                  LCALL WRITE_1_BYTE_595

                  MOV A,MCHUC
                  LCALL WRITE_1_BYTE_595

                  LCALL XUATDATA
                  LCALL DELAY510US
                  RET
                  ;=====================================
                  DELAY510US:
                  MOV 78H,#255
                  DJNZ 78H,$
                  RET
                  ;===================================
                  DELAY_HIENTHI:
                  MOV R1,#15
                  DEL1:
                  LCALL HIENTHI
                  DJNZ R1,DEL1
                  RET
                  ;=============================================
                  NAP1BIT:
                  SETB XUNGSCK
                  NOP
                  NOP
                  CLR XUNGSCK
                  RET
                  ;==================================
                  XUATDATA:
                  SETB XUNGSCL
                  NOP
                  NOP
                  CLR XUNGSCL
                  RET
                  ;=====================================
                  WRITE_1_BYTE_595:
                  MOV DEM,#8
                  WRITE_LAI:
                  RLC A
                  MOV BITDATA,C
                  NOP
                  NOP
                  LCALL NAP1BIT
                  DJNZ DEM,WRITE_LAI
                  NOP
                  NOP
                  RET
                  ;==============================================
                  MA7DOAN:
                  DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
                  ;=======================================
                  END

                  Comment


                  • #10
                    bạn ví dụ như mình muốn kiểm tra code trên mô phỏng...giả sử mình set giá trị vào là 25 thì mình thêm dòng đó vào chỗ nào bạn nhỉ
                    Last edited by kubjn810; 20-02-2014, 19:00.

                    Comment


                    • #11
                      ok...mình biết rồi ban...chỉ cần thêm dòng MOV TLO,#25 thôi...cảm ơn bạn nhiều....

                      Comment


                      • #12
                        tramng
                        bạn ơi ...từ cái đoạn của bạn mình viết thêm cho port 1 1 cái như thê nữa sao k thấy thay đổi j hết bạn ...hjx


                        DONVI1 EQU 20H ; DAT BIEN DON VI LA O NHO 20H
                        DONVI2 EQU 22H
                        CHUC1 EQU 21H ; DAT BIEN CHUC LA O NHO 21H
                        CHUC2 EQU 23H
                        MDONVI1 EQU 30H ; DAT BIEN MDONVI LA O NHO 30H
                        MDONVI2 EQU 34H
                        MCHUC1 EQU 31H ; DAT BIEN MCHUC LA O NHO 31H
                        MCHUC2 EQU 35H
                        DEM1 EQU 32H ;DAT BIEN DEM LA O NHO 32H
                        DEM2 EQU 33H

                        ;BIEN EQU 22H ;DAT BIEN BIEN LA O NHO 22H
                        XUNGSCK1 BIT P2.0
                        XUNGSCK2 BIT P1.0
                        BITDATA1 BIT P2.1
                        BITDATA2 BIT P1.1
                        XUNGSCL1 BIT P2.2
                        XUNGSCL2 BIT P1.2

                        ORG 0000H

                        MOV DPTR,#MA7DOAN
                        MOV TMOD,#00000101B ; COUNTER 0, MOD 1
                        SETB TR0 ; CHO TIMER DEM
                        CLR TF0 ; XOA CO TRAN

                        MAIN:
                        L1:LCALL HEXTOBCD1
                        LCALL GIAIMA1
                        LCALL DELAY_HIENTHI1
                        MOV R1,#34
                        MOV A,R1
                        CJNE A,#100,MAIN
                        MOV R1,#00H
                        JMP MAIN
                        L2: LCALL HEXTOBCD2
                        LCALL GIAIMA2
                        LCALL DELAY_HIENTHI2
                        MOV R2,#35
                        MOV A,R2
                        CJNE A,#100,MAIN
                        MOV R2,#00H
                        JMP MAIN
                        ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXX
                        ;CHUYEN KET QUA DEM TRONG THANH GHI TL0 SANG SO BCD
                        ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXX
                        HEXTOBCD1:
                        MOV A,R1
                        MOV B,#10
                        DIV AB ; CHIA A CHO B, KET QUA LUU VAO A, SO DU LUU VAO B

                        MOV DONVI1,B ; LUU BCD_DVI VAO ON 20H
                        MOV CHUC1,A ; LUU BCD_CHUC VAO ON 21H
                        RET
                        HEXTOBCD2: MOV A,R2
                        MOV B,#10
                        DIV AB
                        MOV DONVI2,B
                        MOV CHUC2,A
                        RET
                        ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXX
                        ;GIAI MA: CHUYEN SO BCD SANG MA 7 DOAN
                        ;;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXX
                        GIAIMA1:
                        MOV A,DONVI1
                        MOVC A,@A+DPTR ; GIAI MA DVI
                        MOV MDONVI1,A

                        MOV A,CHUC1
                        MOVC A,@A+DPTR ; GIAI MA CHUC
                        MOV MCHUC1,A
                        RET
                        GIAIMA2:
                        MOV A,DONVI2
                        MOVC A,@A+DPTR ; GIAI MA DVI
                        MOV MDONVI2,A

                        MOV A,CHUC2
                        MOVC A,@A+DPTR ; GIAI MA CHUC
                        MOV MCHUC2,A
                        RET
                        ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                        ;HIEN THI KET QUA TREN 2 LED QUET
                        ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                        HIENTHI1:
                        MOV A,MDONVI1
                        LCALL WRITE_1_BYTE_595_1

                        MOV A,MCHUC1
                        LCALL WRITE_1_BYTE_595_1

                        LCALL XUATDATA1
                        LCALL DELAY510US
                        RET
                        HIENTHI2:
                        MOV A,MDONVI2
                        LCALL WRITE_1_BYTE_595_2

                        MOV A,MCHUC2
                        LCALL WRITE_1_BYTE_595_2

                        LCALL XUATDATA2
                        LCALL DELAY510US
                        RET
                        ;=====================================
                        DELAY510US:
                        MOV 78H,#255
                        DJNZ 78H,$
                        RET
                        ;===================================
                        DELAY_HIENTHI1:
                        MOV R1,#15
                        DEL1:
                        LCALL HIENTHI1
                        DJNZ R1,DEL1
                        RET
                        DELAY_HIENTHI2:
                        MOV R1,#15
                        DEL2:
                        LCALL HIENTHI2
                        DJNZ R1,DEL2
                        RET
                        ;=============================================
                        NAP1BIT_1:
                        SETB XUNGSCK1
                        NOP
                        NOP
                        CLR XUNGSCK1
                        RET
                        NAP1BIT_2:
                        SETB XUNGSCK2
                        NOP
                        NOP
                        CLR XUNGSCK2
                        RET
                        ;==================================
                        XUATDATA1:
                        SETB XUNGSCL1
                        NOP
                        NOP
                        CLR XUNGSCL1
                        RET
                        XUATDATA2:
                        SETB XUNGSCL2
                        NOP
                        NOP
                        CLR XUNGSCL2
                        RET
                        ;=====================================
                        WRITE_1_BYTE_595_1:
                        MOV DEM1,#8
                        WRITE_LAI_1:
                        RLC A
                        MOV BITDATA1,C
                        NOP
                        NOP
                        LCALL NAP1BIT_1
                        DJNZ DEM1,WRITE_LAI_1
                        NOP
                        NOP
                        RET
                        WRITE_1_BYTE_595_2:
                        MOV DEM2,#8
                        WRITE_LAI_2:
                        RLC A
                        MOV BITDATA2,C
                        NOP
                        NOP
                        LCALL NAP1BIT_2
                        DJNZ DEM2,WRITE_LAI_2
                        NOP
                        NOP
                        RET
                        ;==============================================
                        MA7DOAN:
                        DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
                        ;=======================================
                        END
                        Last edited by kubjn810; 21-02-2014, 14:59.

                        Comment


                        • #13
                          Sửa lại đoạn MAIN bạn nhé !

                          MAIN:
                          MOV R1,#34
                          MOV R2,#35
                          LCALL HEXTOBCD1
                          LCALL HEXTOBCD2
                          LCALL GIAIMA1
                          LCALL GIAIMA2
                          LCALL DELAY_HIENTHI1
                          LCALL DELAY_HIENTHI2
                          JMP MAIN

                          Comment


                          • #14
                            bạn cho mình hỏi...nếu mình muốn R1 R2 nếu trên 100 thì quay lại từ đầu thì viết sao nhỉ
                            Last edited by kubjn810; 21-02-2014, 16:10.

                            Comment


                            • #15
                              Bạn chèn thêm đoạn này nhé !

                              LCALL DELAY_HIENTHI2
                              SOSANHR1:
                              CJNE R1,#100,SOSANHR2
                              MOV R1,#0
                              SOSANHR2:
                              CJNE R2,#100,MAIN
                              MOV R2,#0
                              JMP MAIN
                              Last edited by tramng; 21-02-2014, 18:06.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X