Thông báo

Collapse
No announcement yet.

Dùng led 7 đoạn để hiện chử

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

  • Dùng led 7 đoạn để hiện chử

    Chào các bạn ,mình là thành viên mới ,mình mới hoc VĐK gần đây thôi
    Nay mình thiết kế 1 mạch thể hiện chữ chạy bằng 4 con led 7 doạn với họ 89S52, mình muốn ví dụ như chữ A sẽ chạy từ led 1 tới led 4 rồi dừng lại ở led 4. Sau đó chữ B sẽ chạy từ led 1 tới led 3 rồi dừng lại led 3 ..... cho tới chữ D thì ở led 4
    Xin các bạn hướng dẫn giùm mình .Thanks you

  • #2
    À cái này cũng không có gì khó lắm . Bạn muốn chạy chữ thì cứ sau một khoản thời gian thì bạn thay đổi giá trị hiển thị led là được thôi . Muốn rỏ hơn thì liên lạc mình qua yahoo nick : phucthinhel
    Mạch nạp Little Programmer
    MSC-51,AVR,EEPROM ... etc

    Site Fukusei shop :

    Comment


    • #3
      phần này thật đơn giản, trước tiên bạn dùng kỹ thuật bảng nạp dữ liệu vào trong chương trình chính (dữ liệu nảy bạn mã hóa bảng mã ascii thành mã led mà bạn hiển thị) chuyện bạn dùng 4 led 7 đoạn hiện 1 chữ ở 1 led rồi chạy sang led khac thì đơn giãn hơn nhiều = cách bạn mắc 7 chân dữ liệu của 4 led chung với nhau sau đó dùng 4 chân điều khác để chọn mass cho led, khi muốn chữ chạy thì ta truyền dữ liệu lên 7 bit dử liệu sau đó cho các chân điều khiển mass lần lượt 0001, 0010,0100,1000
      chúc vui!

      Comment


      • #4
        mình gởi bạn 1 ví dụ khó hơn yêu cầu của bạn nhiều nhưng sẽ giúp rất nhiều bạn về phần cứng và lập trình phần mền
        Attached Files

        Comment


        • #5
          cảm ơn các bạn

          Mình cảm ởn các bạn nhiều lắm ,hiện giờ mình cho các led 7 đoạn hiện thị như sau dùng cách tra bảng: vd nhử mình cho chu A chạy hết 4 led ,sau đó tới chữ B chạy hết 4 led ... cho tới chữ D .Mình đã làm được chuyện đó rồi nhưng cái mình muốn bây giờ là led 1 hiển thị chữ A, led 2 hiển thị chữ B, led 3 hiễn thị chu C...

          Cấu trúc phần cứng của mình như sau: các led 7 đoạn dùng A chung nối các đường dữ liệu vào P1 ,còn các chân điều khiển thì kết nối với cực C của transistor PNP ,còn cực B thì nối vào P3

          Comment


          • #6
            Nguyên văn bởi phucthinhel Xem bài viết
            À cái này cũng không có gì khó lắm . Bạn muốn chạy chữ thì cứ sau một khoản thời gian thì bạn thay đổi giá trị hiển thị led là được thôi . Muốn rỏ hơn thì liên lạc mình qua yahoo nick : phucthinhel
            nick name cua minh la minuchau

            Comment


            • #7
              Đơn giản thôi:
              Tạo 1 bảng mã ked 7 đoạn.
              Tạo 1 ngắt timer, cứ được 0,5s thì thay đổi số suất led VD chứa trong R4->R7
              chương trình chính thì vẫn xuất led bình thường, đọc trong R4-> R7 ra xuất.
              Tại t0 thì R4=10H(mã tắt hết),R5=10H,R6=10H, R7=0AH (chữ A)
              t1 thì R4=10H,R5=10H,R6=0AH,R7=10H.
              t2 thì R4=10H,R5=0Ah,R6=10h,R7=10H.
              t3 thì R4=0AH,R5=10H,R6=10H,R7=10H.
              t4 thì R4=0AH,R5=10H,R6=10H,R7=0BH(CHỮ B).
              t5 thì R4=0AH,R5=10H,R6=0BH,R7=10H.
              t6 thì R4=0AH,R5=0BH,R6=10H,R7=10H.
              t7 thì R4=0AH,R5=0BH,R6=10H,R7=0CH(CHŨ C).
              t8 thì R4=0AH,R5=0BH,R6=0CH,R7=10H.
              t9 thì R4=0AH,R5=0BH,R6=0CH,R7=0DH(CHỮ D).
              |

              Comment


              • #8
                mình muon hoi cách đáu nôi led 7doan trong orcad chan anot chung la nhu the nao

                Comment


                • #9
                  Bac nao chi dum em cach post bai len dien dan duoi dang file voi
                  thanks nhiu

                  Comment


                  • #10
                    bac nao giup em bai led 7doan voi,e dang lam bai hien thi led voi ban phim ma tran.led chi sang khi nhan phim cot1 thui,
                    e pót mach va bai cac bac jup dum nhe
                    ORG 00H
                    MOV TMOD,#11H
                    MAIN:
                    CALL HIENTHI
                    CALL TESTPHIM
                    CALL DKHIEN
                    LJMP MAIN
                    ;***************************
                    HIENTHI:
                    MOV DPTR,#BANGMALED
                    MOV A,50H
                    MOVC A,@A+DPTR
                    MOV P0,A
                    MOV P1,#11111110B
                    RET
                    ;***************************
                    TESTPHIM:
                    KT_4PHIM_COT1:
                    MOV A,#0FFH
                    MOV P1,A
                    CLR P1.4
                    MOV A,P1
                    ANL A,#0FH
                    CJNE A,#0FH,CO_PHIM_NHAN
                    ;-------VAN CHUA CO PHIM NHAN ----------
                    KT_4PHIM_COT2:
                    MOV A,#0FFH
                    MOV P1,A
                    CLR P1.5
                    MOV A,P1
                    ANL A,#0FH
                    CJNE A,#0FH,CO_PHIM_NHAN
                    ;-------VAN CHUA CO PHIM NHAN ----------
                    KT_4PHIM_COT3:
                    MOV A,#0FFH
                    MOV P1,A
                    CLR P1.6
                    MOV A,P1
                    ANL A,#0FH
                    CJNE A,#0FH,CO_PHIM_NHAN
                    ;-------VAN CHUA CO PHIM NHAN ----------
                    KT_4PHIM_COT4:
                    MOV A,#0FFH
                    MOV P1,A
                    CLR P1.7
                    MOV A,P1
                    ANL A,#0FH
                    CJNE A,#0FH,CO_PHIM_NHAN
                    LJMP KET_THUC


                    ;-------CO PHIM NHAN ----------
                    CO_PHIM_NHAN:
                    MOV A,P1
                    ;**************************
                    ;* KIEM TRA 4 PHIM COT 1 *
                    ;**************************

                    P0_C1:
                    CJNE A,#11101110B,P1_C1
                    MOV A,#0
                    MOV 50H,A
                    LJMP KET_THUC
                    ;--------------------------
                    P1_C1:
                    CJNE A,#11101101B,P2_C1
                    MOV A,#1
                    MOV 50H,A
                    LJMP KET_THUC
                    ;--------------------------
                    P2_C1:
                    CJNE A,#11101011B,P3_C1
                    MOV A,#2
                    MOV 50H,A
                    LJMP KET_THUC
                    ;--------------------------
                    P3_C1:
                    CJNE A,#11100111B,P0_C2
                    MOV A,#3
                    MOV 50H,A
                    LJMP KET_THUC
                    ;**************************
                    ;* KIEM TRA 4 PHIM COT 2 *
                    ;**************************

                    P0_C2:
                    CJNE A,#11011110B,P1_C2
                    MOV A,#4
                    MOV 50H,A
                    LJMP KET_THUC
                    ;--------------------------
                    P1_C2:
                    CJNE A,#11011101B,P2_C2
                    MOV A,#5
                    MOV 50H,A
                    LJMP KET_THUC
                    ;--------------------------
                    P2_C2:
                    CJNE A,#11011011B,P3_C2
                    MOV A,#6
                    MOV 50H,A
                    LJMP KET_THUC
                    ;--------------------------
                    P3_C2:
                    CJNE A,#11010111B,P0_C3
                    MOV A,#7
                    MOV 50H,A
                    LJMP KET_THUC
                    ;**************************
                    ;* KIEM TRA 4 PHIM COT 3 *
                    ;**************************
                    P0_C3:
                    CJNE A,#10111110B,P1_C3
                    MOV A,#8
                    MOV 50H,A
                    LJMP KET_THUC
                    ;--------------------------
                    P1_C3:
                    CJNE A,#10111101B,P2_C3
                    MOV A,#9
                    MOV 50H,A
                    LJMP KET_THUC
                    ;--------------------------
                    P2_C3:
                    CJNE A,#10111011B,P3_C3
                    MOV A,#10
                    MOV 50H,A
                    LJMP KET_THUC
                    ;--------------------------
                    P3_C3:
                    CJNE A,#10110111B,P0_C4
                    MOV A,#11
                    MOV 50H,A
                    LJMP KET_THUC

                    ;**************************
                    ;* KIEM TRA 4 PHIM COT 1 *
                    ;**************************
                    P0_C4:
                    CJNE A,#01111110B,P1_C4
                    MOV A,#12
                    MOV 50H,A
                    LJMP KET_THUC
                    ;--------------------------
                    P1_C4:
                    CJNE A,#01111101B,P2_C4
                    MOV A,#13
                    MOV 50H,A
                    LJMP KET_THUC
                    ;--------------------------
                    P2_C4:
                    CJNE A,#01111011B,P3_C4
                    MOV A,#14
                    MOV 50H,A
                    LJMP KET_THUC
                    ;--------------------------
                    P3_C4:
                    CJNE A,#01110111B,KET_THUC
                    MOV A,#15
                    MOV 50H,A
                    LJMP KET_THUC

                    KET_THUC:
                    RET
                    ;***************************
                    DKHIEN:
                    MOV A,50H
                    CJNE A,#1,THOAT
                    ACALL XUAT1
                    MOV A,50H
                    CJNE A,#2,THOAT
                    ACALL XUAT2
                    THOAT:
                    RET
                    XUAT1:
                    MOV A,#11111110B
                    MOV P1,A
                    RL A
                    INC A
                    RET
                    XUAT2:
                    MOV A,#01111111B
                    MOV P1,A
                    RR A
                    RET
                    DELAY:
                    MOV TH0,#HIGH(-50000)
                    MOV TL0,#LOW(-50000)
                    SETB TR0
                    JNB TF0,$
                    CLR TR0
                    CLR TF0
                    RET
                    BANGMALED:
                    DB 11000000B ;SO 0
                    DB 11001111B ;SO 1
                    DB 01100100B ;SO 2
                    DB 01000110B ;SO 3
                    DB 01001011B ;SO 4
                    DB 01010010B ;SO 5
                    DB 01010000B ;SO 6
                    DB 11000111B ;SO 7
                    DB 01000000B ;SO 8
                    DB 01000010B ;SO 9
                    DB 01000001B ;CHU A
                    DB 01011000B ;CHU B
                    DB 11110000B ;CHU C
                    DB 01001100B ;CHU D
                    DB 00110000B ;CHU E
                    DB 00110001B ;CHU F
                    END

                    Comment


                    • #11
                      CÁC anh ơi làm ơn cho em hỏi cái chương trình sau của em sai chỗ nào mà 2 led không thể hiển thị cùng một lúc 2 sỗ 0 vậy ah ?
                      "
                      ORG 0000H

                      JMP MAIN
                      MAIN:
                      CLR P1.0
                      CLR P1.1
                      MOV P0,#11000000B
                      SETB P1.0
                      CALL DELAY
                      CLR P1.0
                      MOV P0,#11000000B
                      SETB P1.1
                      CALL DELAY




                      JMP MAIN

                      //CAC CHUONG TRINH CON

                      //CHUONG TRINH TAO TRE~
                      DELAY1:
                      MOV TMOD,#01H
                      MOV TH0,#(-200)
                      MOV TL0,#(-200)
                      SETB TR0
                      JNB TF0,$
                      CLR TF0
                      CLR TR0
                      RET

                      DELAY:
                      PUSH 06
                      PUSH 07
                      MOV R6,#255
                      LAP:
                      MOV R7,#255
                      DJNZ R7,$
                      DJNZ R6,LAP
                      POP 07
                      POP 06
                      RET

                      END "


                      2led 7 thanh nối với p0

                      p1.0 và p1.1 nói với B của 2 trans. 1: mở led/ 0: tắt led.

                      em thử cái delay thế nào cũng không đc.

                      cái delay trên là em lấy của một cuốn giáo trình ( người ta cũng dùng nó trong viêc quét led 7 thanh) !

                      các anh giúp e với.

                      viết cho em cái code của delay với. hjk! đau đầu quá.

                      (em dùng proteus 7.2 ***** đàng hoàng! không phải nó ko mô phỏng đc chứ các anh?)

                      em gửi cái mạch lên l;un ah :
                      Last edited by tranvanhung; 19-04-2009, 14:19.

                      Comment


                      • #12
                        mình thấy vẫn mô phỏng được đấy chứ: mình có sủa chút it ban xem lại nhé:
                        $include(reg51.inc)
                        ORG 0000H
                        MAIN:
                        CLR P1.0
                        CLR P1.1
                        MOV P0,#11000000B
                        SETB P1.0
                        CALL DELAY
                        CLR P1.0
                        MOV P0,#11000000B
                        SETB P1.1
                        CALL DELAY
                        sJMP MAIN
                        DELAY:
                        PUSH 06
                        PUSH 07
                        MOV R6,#255
                        LAP:
                        MOV R7,#255
                        DJNZ R7,$
                        DJNZ R6,LAP
                        POP 07
                        POP 06
                        RET
                        end
                        con day la mach: ah nhu cua ban thoi:

                        Comment


                        • #13
                          to tranvanhung!
                          DELAY1:
                          MOV TMOD,#01H
                          MOV TH0,#(-200)
                          MOV TL0,#(-200)
                          SETB TR0
                          JNB TF0,$
                          CLR TF0
                          CLR TR0
                          RET

                          DELAY:
                          PUSH 06
                          PUSH 07
                          MOV R6,#255
                          LAP:
                          MOV R7,#255
                          DJNZ R7,$
                          DJNZ R6,LAP
                          POP 07
                          POP 06
                          RET
                          hai chương trình delay của bạn không chạy được là đúng rồi vì ở chương trình tạo trễ, bạn đặt điều kiện để chương trình nhảy đến nhãn $ nhưng trong chương trình của bạn không có chỗ nào là nhãn $ hết.

                          - ở chương trình tạo trễ đầu tiên, sử dụng timer. mỗi lần chương trình gọi hàm delay thì nó khởi tạo cho timer rồi cho timer đếm, sau đó thì đợi đến khi timer tràn thì thoát ra. bạn có thể viết thế này:

                          Delay:
                          mov TMOD,#01H
                          mov TH0,#(-200)
                          mov TL0,#(-200)
                          setb TR0
                          here: jnb TF0,here
                          TF0 = 0
                          TR0 = 0
                          ret
                          Thời gian trễ phụ thuộc vào giá trị bạn nạp vào 2 thanh ghi TH0 và TL0, muốn có thời gian trễ lớn thì bạn thêm một vòng lặp vào.
                          - Chương trình tạo trễ thứ 2 sử dụng vòng lặp, bạn có thể viết như sau:

                          Delay:
                          mov R6,#255
                          Lap1:
                          mov R7,#255
                          Lap2:
                          djnz R7,Lap2
                          djnz R6,Lap1
                          ret
                          Thời gian trễ phụ thuộc vào giá trị bạn nạp vào các thanh ghi R6 và R7. Mỗi thanh ghi có thể nạp tối đa giá trị 255, muốn tạo trễ lớn hơn thì tăng số lượng vòng lặp lồng nhau lên.

                          Để tạo trễ cho chương trình thì bạn chỉ cần sử dụng một trong hai chương trình tạo trễ thôi. Chương trình của bạn có thể được sửa lại như sau:

                          #include <regx51.inc>
                          ORG 00H
                          rjmp MAIN // bỏ qua bảng vector ngắt

                          ORG 30H
                          MAIN:
                          MOV P0,#11000000B //đưa dữ liệu ra trước
                          SETB P1.0 //Bật nguồn cho LED 1
                          ACALL DELAY //Cho sáng trong thời gian delay
                          CLR P1.0 //Tắt đi
                          MOV P0,#11000000B
                          SETB P1.1
                          ACALL DELAY
                          CLR P1.1
                          SJMP MAIN
                          DELAY:
                          MOV R6,#255
                          LAP1:
                          MOV R7,#255
                          LAP2:
                          DJNZ R7,LAP2
                          DJNZ R6,LAP1
                          RET
                          end

                          - Bạn chú ý là khi viết chương trình, bạn phải bỏ qua vùng bộ nhớ chương trình dành cho bảng vector ngắt.

                          Chúc bạn thành công!

                          Thân mến
                          For a better world

                          Comment


                          • #14
                            Nguyên văn bởi dung h Xem bài viết
                            mình thấy vẫn mô phỏng được đấy chứ: mình có sủa chút it ban xem lại nhé:
                            $include(reg51.inc)
                            ORG 0000H
                            MAIN:
                            CLR P1.0
                            CLR P1.1
                            MOV P0,#11000000B
                            SETB P1.0
                            CALL DELAY
                            CLR P1.0
                            MOV P0,#11000000B
                            SETB P1.1
                            CALL DELAY
                            sJMP MAIN
                            DELAY:
                            PUSH 06
                            PUSH 07
                            MOV R6,#255
                            LAP:
                            MOV R7,#255
                            DJNZ R7,$
                            DJNZ R6,LAP
                            POP 07
                            POP 06
                            RET
                            end
                            con day la mach: ah nhu cua ban thoi:


                            cảm ơn bạn rất nhiều !!! bạn thử chạy chương trình của bạn với cái mạch của tớ xem kết quả có như tớ chay không ? hjk !!! tớ thề là nó không cùng một lúc hiển thị 2 số !!!không biết có phải tại cái máy tính của tớ không nữa !!! rất nhiều delay tớ viết nhưng ko ăn thua !!! tớ copy nguyên cái chuơng trình của bạn cũng không đc lun ! tớ địnhchup ảnh nhưng mà hem chụp đc !! bạn cố giúp tớ nha ! bạn đã làm thành công cái mahc này chưa ? cho tớ cái mạch và cái code nhé ! thanks bạn nhiều !!1

                            Comment


                            • #15
                              Nguyên văn bởi Toan.Lv Xem bài viết
                              to tranvanhung!

                              hai chương trình delay của bạn không chạy được là đúng rồi vì ở chương trình tạo trễ, bạn đặt điều kiện để chương trình nhảy đến nhãn $ nhưng trong chương trình của bạn không có chỗ nào là nhãn $ hết.

                              - ở chương trình tạo trễ đầu tiên, sử dụng timer. mỗi lần chương trình gọi hàm delay thì nó khởi tạo cho timer rồi cho timer đếm, sau đó thì đợi đến khi timer tràn thì thoát ra. bạn có thể viết thế này:

                              Delay:
                              mov TMOD,#01H
                              mov TH0,#(-200)
                              mov TL0,#(-200)
                              setb TR0
                              here: jnb TF0,here
                              TF0 = 0
                              TR0 = 0
                              ret
                              Thời gian trễ phụ thuộc vào giá trị bạn nạp vào 2 thanh ghi TH0 và TL0, muốn có thời gian trễ lớn thì bạn thêm một vòng lặp vào.
                              - Chương trình tạo trễ thứ 2 sử dụng vòng lặp, bạn có thể viết như sau:

                              Delay:
                              mov R6,#255
                              Lap1:
                              mov R7,#255
                              Lap2:
                              djnz R7,Lap2
                              djnz R6,Lap1
                              ret
                              Thời gian trễ phụ thuộc vào giá trị bạn nạp vào các thanh ghi R6 và R7. Mỗi thanh ghi có thể nạp tối đa giá trị 255, muốn tạo trễ lớn hơn thì tăng số lượng vòng lặp lồng nhau lên.

                              Để tạo trễ cho chương trình thì bạn chỉ cần sử dụng một trong hai chương trình tạo trễ thôi. Chương trình của bạn có thể được sửa lại như sau:

                              #include <regx51.inc>
                              ORG 00H
                              rjmp MAIN // bỏ qua bảng vector ngắt

                              ORG 30H
                              MAIN:
                              MOV P0,#11000000B //đưa dữ liệu ra trước
                              SETB P1.0 //Bật nguồn cho LED 1
                              ACALL DELAY //Cho sáng trong thời gian delay
                              CLR P1.0 //Tắt đi
                              MOV P0,#11000000B
                              SETB P1.1
                              ACALL DELAY
                              CLR P1.1
                              SJMP MAIN
                              DELAY:
                              MOV R6,#255
                              LAP1:
                              MOV R7,#255
                              LAP2:
                              DJNZ R7,LAP2
                              DJNZ R6,LAP1
                              RET
                              end

                              - Bạn chú ý là khi viết chương trình, bạn phải bỏ qua vùng bộ nhớ chương trình dành cho bảng vector ngắt.

                              Chúc bạn thành công!

                              Thân mến


                              trước tiên mình xin cảm ơn bạn đã bỏ thời gian để đọc bài của mình và giúp minh !!!

                              nhưng .... mình mún nói một chút !!
                              2 cái delay kia là mình lấy từ 2 cuốn giáo trình của bk đà nẵng và một là ở đâu thì mình hem nhớ lăm !!hjk !!1

                              còn về câu lệnh này :"DJNZ R7,$ " thì mình cam đoan là đúng ! kí tự "$ " không phải là một nhãn !!!! câu lệnh trên sẽ giảm và dừng tai " đây" (vị trí con trỏ IP ).

                              mình cũng thử chương trình của bạn rồi ! copy và paste nhưng ...hjk ! vẫn không thể hiển thị cùng một lúc 2 số !! mình thực sự không hiểu ! mình tin các bạn đã làm và thành công roài nhưng không hiểu tại sao mình lại không làm đc ! mình thử trên các bản proteus cũ hơn cũng không đc !!! keil c thì hem bít thế nào ? không biết lỗi là ở đâu !!

                              bạn có thể cho mình cái mạch bạn làm và cái code đc không ??

                              vụ này mình đau đầu quá !

                              làm phiền bạn nhiều quá ! cảm ơn bạn nhiều

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X