Thông báo

Collapse
No announcement yet.

help me! Hiển thị led 7 dùng 74HC595

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

  • help me! Hiển thị led 7 dùng 74HC595

    Mình đang tìm hiểu lập trình hiển thị LED 7 đoạn dùng 74HC595. Mình lập trình cho hiển thị đếm lên 2 chũ số, nhưng khi mô phỏng gặp phải như sau:
    Nếu cho thời gian quét led dài (Hàm delay): Hiển thị đúng nhưng bị nhấp nháy, cái này thì không vấn đề gì. Nhưng nếu cho thời gian quét nhỏ lại thì sẽ bị lỗi, nhưng các số 00,11,22... thì không bị lỗi. Mình gửi kèm mạch mô phỏng bên dưới.
    Mình không biết sai vì do lập trình sai hay do mô phỏng không đáp ứng. Vì mình chưa kiểm tra trên mạch thực tế. Các bạn xem thử nhé.
    - Mô phỏng (mình không thể đính kèm file):http://www.mediafire.com/?1ygglq4id8w3y49
    Code:
    DL	BIT	P3.1
    SH_CP	BIT	P3.0
    ST_CP	BIT	P3.3
    DV	DATA	21H
    CH	DATA	22H
    	
    	ORG	00H
    	LJMP 	MAIN
    	ORG	1BH
    ;Chuong trinh ngat de 1s thi tang 1 DON VI
    T1ISR:	DJNZ	R1,OUT
    	INC	DV
    	MOV	R1,#20
    OUT:	SETB	TR1
    	RETI
    
    MAIN:	CLR	SH_CP
    	CLR	ST_CP
    	MOV	P2,#0
    	MOV	TMOD,#10H
    	MOV	TH1,#HIGH(-50000)
    	MOV	TL1,#LOW(-50000)
    	SETB	TR1
    	MOV	IE,#88H
    	MOV	R1,#20; su dung cho ham ngat T1
    	MOV	DV,#0
    	MOV	CH,#0
    LAM_VIEC:
    	LCALL	HIEN_THI
    	LCALL	TEST
    	LJMP	LAM_VIEC
    	
    HIEN_THI:
    LOOP2:	MOV	DPTR,#BANG
    	MOV	A,DV
    	MOVC	A,@A+DPTR
    	LCALL	SERIAL
    	MOV	P2,#11111110B
    	LCALL	DELAY
    	
    	MOV	DPTR,#BANG
    	MOV	A,CH
    	MOVC	A,@A+DPTR
    	LCALL	SERIAL
    	MOV	P2,#1111101B
    	LCALL	DELAY
    	RET
    
    ;Ham kiem tra dem tu 00-45	
    TEST:	MOV	A,CH
    	CJNE	A,#4,KT_DV
    	MOV	A,DV
    	CJNE	A,#5,OUT2
    	MOV	DV,#0
    	MOV	CH,#0
    KT_DV:	MOV	A,DV
    	CJNE	A,#10,OUT2
    	MOV	DV,#0
    	INC	CH
    OUT2:	
    	RET
    
    SERIAL:	MOV	R4,#7
    LOOP1:	CLR	C
    	RRC	A
    	MOV	DL,C
    	SETB	SH_CP
    	CLR	SH_CP
    	DJNZ	R4,LOOP1
    	SETB	ST_CP
    	CLR	ST_CP
    	RET
    ;Ham delay dung de quet led hien thi	
    DELAY:	MOV	31H,#5
    K:	MOV	30H,#250
    	DJNZ	30H,$
    	DJNZ	31H,K
    	RET
    BANG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
    END

  • #2
    Nguyên văn bởi nch.bkdmec Xem bài viết
    mình đang tìm hiểu lập trình hiển thị led 7 đoạn dùng 74hc595. Mình lập trình cho hiển thị đếm lên 2 chũ số, nhưng khi mô phỏng gặp phải như sau:
    Nếu cho thời gian quét led dài (hàm delay): Hiển thị đúng nhưng bị nhấp nháy, cái này thì không vấn đề gì. Nhưng nếu cho thời gian quét nhỏ lại thì sẽ bị lỗi, nhưng các số 00,11,22... Thì không bị lỗi. Mình gửi kèm mạch mô phỏng bên dưới.
    Mình không biết sai vì do lập trình sai hay do mô phỏng không đáp ứng. Vì mình chưa kiểm tra trên mạch thực tế. Các bạn xem thử nhé.
    - mô phỏng (mình không thể đính kèm file):http://www.mediafire.com/?1ygglq4id8w3y49
    Code:
    dl    bit    p3.1
    sh_cp    bit    p3.0
    st_cp    bit    p3.3
    dv    data    21h
    ch    data    22h
        
        org    00h
        ljmp     main
        org    1bh
    ;chuong trinh ngat de 1s thi tang 1 don vi
    t1isr:    Djnz    r1,out
        inc    dv
        mov    r1,#20
    out:    Setb    tr1
        reti
    
    main:    Clr    sh_cp
        clr    st_cp
        mov    p2,#0
        mov    tmod,#10h
        mov    th1,#high(-50000)
        mov    tl1,#low(-50000)
        setb    tr1
        mov    ie,#88h
        mov    r1,#20; su dung cho ham ngat t1
        mov    dv,#0
        mov    ch,#0
    lam_viec:
        Lcall    hien_thi
        lcall    test
        ljmp    lam_viec
        
    hien_thi:
    Loop2:    Mov    dptr,#bang
        mov    a,dv
        movc    a,@a+dptr
        lcall    serial
        mov    p2,#11111110b
        lcall    delay
        
        mov    dptr,#bang
        mov    a,ch
        movc    a,@a+dptr
        lcall    serial
        mov    p2,#1111101b
        lcall    delay
        ret
    
    ;ham kiem tra dem tu 00-45    
    test:    Mov    a,ch
        cjne    a,#4,kt_dv
        mov    a,dv
        cjne    a,#5,out2
        mov    dv,#0
        mov    ch,#0
    kt_dv:    Mov    a,dv
        cjne    a,#10,out2
        mov    dv,#0
        inc    ch
    out2:    
        Ret
    
    serial:    Mov    r4,#7
    loop1:    Clr    c
        rrc    a
        mov    dl,c
        setb    sh_cp
        clr    sh_cp
        djnz    r4,loop1
        setb    st_cp
        clr    st_cp
        ret
    ;ham delay dung de quet led hien thi    
    delay:    Mov    31h,#5
    k:    Mov    30h,#250
        djnz    30h,$
        djnz    31h,k
        ret
    bang: Db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
    end
    chèn thêm lệnh xóa led sẽ hết.
    Code:
    dl    bit    p3.1
    sh_cp    bit    p3.0
    st_cp    bit    p3.3
    dv    data    21h
    ch    data    22h
        
        org    00h
        ljmp     main
        org    1bh
    ;chuong trinh ngat de 1s thi tang 1 don vi
    t1isr:    Djnz    r1,out
        inc    dv
        mov    r1,#20
    out:    Setb    tr1
        reti
    
    main:    Clr    sh_cp
        clr    st_cp
        mov    p2,#0
        mov    tmod,#10h
        mov    th1,#high(-50000)
        mov    tl1,#low(-50000)
        setb    tr1
        mov    ie,#88h
        mov    r1,#20; su dung cho ham ngat t1
        mov    dv,#0
        mov    ch,#0
    lam_viec:
        Lcall    hien_thi
        lcall    test
        ljmp    lam_viec
        
    hien_thi:
    Loop2:    Mov    dptr,#bang
        mov    a,dv
        movc    a,@a+dptr
        lcall    serial
        mov    p2,#11111110b
        lcall    delay
        mov a,#0
        lcall    serial;xóa led
     
        mov    dptr,#bang
        mov    a,ch
        movc    a,@a+dptr
        lcall    serial
        mov    p2,#1111101b
        lcall    delay
         mov a,#0
        lcall    serial;xóa led
     
        ret
    
    ;ham kiem tra dem tu 00-45    
    test:    Mov    a,ch
        cjne    a,#4,kt_dv
        mov    a,dv
        cjne    a,#5,out2
        mov    dv,#0
        mov    ch,#0
    kt_dv:    Mov    a,dv
        cjne    a,#10,out2
        mov    dv,#0
        inc    ch
    out2:    
        Ret
    
    serial:    Mov    r4,#7
    loop1:    Clr    c
        rrc    a
        mov    dl,c
        setb    sh_cp
        clr    sh_cp
        djnz    r4,loop1
        setb    st_cp
        clr    st_cp
        ret
    ;ham delay dung de quet led hien thi    
    delay:    Mov    31h,#5
    k:    Mov    30h,#250
        djnz    30h,$
        djnz    31h,k
        ret
    bang: Db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
    end
    Last edited by tdm; 30-03-2011, 10:54.
    |

    Comment


    • #3
      Nếu sửa lại vậy cũng không chạy được, mình thấy nó không thể hiển thị được. Mình có kèm link mô phỏng của chương trình mình viết ở trên.

      Comment


      • #4
        Nguyên văn bởi nch.bkdmec Xem bài viết
        Nếu sửa lại vậy cũng không chạy được, mình thấy nó không thể hiển thị được. Mình có kèm link mô phỏng của chương trình mình viết ở trên.
        bạn copy đoạn code tôi sửa chạy thử xem.
        Attached Files
        |

        Comment


        • #5
          Nguyên văn bởi nch.bkdmec Xem bài viết
          Mình đang tìm hiểu lập trình hiển thị LED 7 đoạn dùng 74HC595. Mình lập trình cho hiển thị đếm lên 2 chũ số, nhưng khi mô phỏng gặp phải như sau:
          Nếu cho thời gian quét led dài (Hàm delay): Hiển thị đúng nhưng bị nhấp nháy, cái này thì không vấn đề gì. Nhưng nếu cho thời gian quét nhỏ lại thì sẽ bị lỗi, nhưng các số 00,11,22... thì không bị lỗi. Mình gửi kèm mạch mô phỏng bên dưới.
          Mình không biết sai vì do lập trình sai hay do mô phỏng không đáp ứng. Vì mình chưa kiểm tra trên mạch thực tế. Các bạn xem thử nhé.
          - Mô phỏng (mình không thể đính kèm file):http://www.mediafire.com/?1ygglq4id8w3y49
          Code:
          DL	BIT	P3.1
          SH_CP	BIT	P3.0
          ST_CP	BIT	P3.3
          DV	DATA	21H
          CH	DATA	22H
          	
          	ORG	00H
          	LJMP 	MAIN
          	ORG	1BH
          ;Chuong trinh ngat de 1s thi tang 1 DON VI
          T1ISR:	DJNZ	R1,OUT
          	INC	DV
          	MOV	R1,#20
          OUT:	SETB	TR1
          	RETI
          
          MAIN:	CLR	SH_CP
          	CLR	ST_CP
          	MOV	P2,#0
          	MOV	TMOD,#10H
          	MOV	TH1,#HIGH(-50000)
          	MOV	TL1,#LOW(-50000)
          	SETB	TR1
          	MOV	IE,#88H
          	MOV	R1,#20; su dung cho ham ngat T1
          	MOV	DV,#0
          	MOV	CH,#0
          LAM_VIEC:
          	LCALL	HIEN_THI
          	LCALL	TEST
          	LJMP	LAM_VIEC
          	
          HIEN_THI:
          LOOP2:	MOV	DPTR,#BANG
          	MOV	A,DV
          	MOVC	A,@A+DPTR
          	LCALL	SERIAL
          	MOV	P2,#11111110B
          	LCALL	DELAY
          	
          	MOV	DPTR,#BANG
          	MOV	A,CH
          	MOVC	A,@A+DPTR
          	LCALL	SERIAL
          	MOV	P2,#1111101B
          	LCALL	DELAY
          	RET
          
          ;Ham kiem tra dem tu 00-45	
          TEST:	MOV	A,CH
          	CJNE	A,#4,KT_DV
          	MOV	A,DV
          	CJNE	A,#5,OUT2
          	MOV	DV,#0
          	MOV	CH,#0
          KT_DV:	MOV	A,DV
          	CJNE	A,#10,OUT2
          	MOV	DV,#0
          	INC	CH
          OUT2:	
          	RET
          
          SERIAL:	MOV	R4,#7
          LOOP1:	CLR	C
          	RRC	A
          	MOV	DL,C
          	SETB	SH_CP
          	CLR	SH_CP
          	DJNZ	R4,LOOP1
          	SETB	ST_CP
          	CLR	ST_CP
          	RET
          ;Ham delay dung de quet led hien thi	
          DELAY:	MOV	31H,#5
          K:	MOV	30H,#250
          	DJNZ	30H,$
          	DJNZ	31H,K
          	RET
          BANG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
          END
          Khi dùng 595 để hiển thị led7 đoạn phải để thời gian delay dài, nếu thời gian delay ngắn thì số lần dịch trong một đơn vị thời gian sẽ tăng làm ta không thể quan sát được do hiện tượng lưu ảnh trên mắt. Trường hợp cặp số giống thì đương nhiên vẫn quan sát được vì dù có số dịch có nhiều thế nào thì 2 led vẫn chỉ hiện cùng một số thôi.

          Comment


          • #6
            Nguyên văn bởi tdm Xem bài viết
            bạn copy đoạn code tôi sửa chạy thử xem.
            Vậy là do thuật toán của mình chưa đúng. Cám ơn bác tdm.

            Comment


            • #7
              Chào các bạn,

              Mình xin góp một số ý kiến về việc điều khiển LED 7 thanh bằng 74HC595 nhé.

              74hC595 là IC ghi dịch có chốt vì vậy khi dùng nó để điều khiển LED 7 thanh tức là chúng ta dùng phương pháp chốt. Phương pháp này khác với phương pháp thường dùng gọi là phương pháp quét. Sự khác nhau này có ở cả việc thiết kế phần cứng và lập trình phần mềm.
              Phần cứng:
              - Phương pháp chốt: Các LED 7 thanh sẽ luôn được nối nguồn (với LED A chung). Dữ liệu của mỗi LED sẽ được nối với 1 IC 74HC595 --> có bao nhiêu LED 7 thanh thì cần bấy nhiêu IC 74HC595. Mỗi IC 74HC595 có 3 đường tín hiệu nối tiếp cần điều khiển đó là: chân data, chân clock và chân chốt. Các đường clock và chốt của tất cả các IC 595 tương ứng nối chung với nhau và nối với 1 chân của VDK. Chân data thì mắc nối tiếp các IC 595 lại như các toa tàu (dữ liệu vào nối tiếp của con sau lấy từ dữ liệu ra nối tiếp của con trước) ---> Với cách nối như vậy bạn điều khiển n LED 7 thanh thì cũng chỉ cần 3 chân GPIO của VDK là được. Cách này điều khiển dễ, tiết kiệm chân cổng nhưng tốn đô la vì mỗi em led 7 thanh cần 1 em 595.

              Phần mềm:
              Muốn điều khiển con LED 7 thanh nào thì dịch dữ liệu tương ứng đến đúng vị trí của con đó rồi ra lệnh chốt một cái là xong. 595 nó sẽ tự giữ trạng thái của LED cho đến lần thay đổi sau. Cần lưu ý là đường chôt nối chung nên khi bạn ra lệnh, tất cả các LED 7 thanh cùng được chốt dữ liệu --> bạn phải có thuật toán phù hợp để thay đổi dữ liệu ở một con LED nào đó thì các con LED khác không bị ảnh hưởng.

              Best Regards,
              Kiếm tiền ONLINE nhàn như ăn cháo -

              Comment


              • #8
                Do mình đang dự định làm mạch đèn giao thông nên đang tìm hiểu các linh kiện để tiết kiệm chân VĐK nhất và dễ dàng lập trình điều chỉnh thời gian đếm, chuyển các mod điều khiển...Sau đó, mình sẽ tìm ra thuật toán hợp lý nhất. Cám ơn những chia sẻ của các bạn.

                Comment

                Về tác giả

                Collapse

                nch.bkdmec Tìm hiểu thêm về nch.bkdmec

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

                Collapse

                Đang tải...
                X