toilet

Led 7 thanh

Thảo luận trong 'Nhập môn điện tử'

Đang xem chủ đề này ( Thành viên: 0, Khách: 0)

  1. Đăng 7/11/13 #1

    THUONGDTQB Moderator

    Số bài viết: 586
    Đã được thích: 900
    Lục lại thấy có mấy bài giới thiệu về led 7 thanh nên post lên tạm cho bạn nào mới tìm hiểu tham khảo.
    1/Cấu tạo led 7 thanh

    7 seng. 7seng1.
    - Led 7 đoạn có cấu tạo bao gồm 7 led đơn xếp theo hình phía trên và có thêm một led đơn hình tròn nhỏ thể hiện dấu chấm tròn ở góc dưới, bên phải của led 7 thanh.
    - 8 led đơn trên led 7 thanh có Anode (cực +) hoặc Cathode (cực -) được nối chung với nhau vào một điểm và được đưa chân ra ngoài để kết nối với mạch điện. 7 cực còn lại trên mỗi led đơn của led 7 đoạn và 1 cực trên led đơn ở góc dưới, bên phải của led 7 đoạn được đưa thành 8 chân riêng để điều khiển cho led sáng tắt theo ý muốn.
    - Nếu led 7 đoạn có Anode (cực +) chung, đầu chung này được nối với +Vcc, các chân còn lại dùng để điều khiển trạng thái sáng tắt của các led đơn, led chỉ sáng khi tín hiệu đặt vào các chân này ở mức 0.
    - Nếu led 7 đoạn có Cathode (cực -) chung, đầu chung này được nối xuống Ground (hay Mass), các chân còn lại dùng để điều khiển trạng thái sáng tắt của các led đơn, led chỉ sáng khi tín hiệu đặt vào các chân này ở mức 1.

    2/Mã led 7 thanh
    - Mã LED 7 đoạn có Anode chung, muốn thanh nào sáng ta xuất ra chân Cathode của LED đơn đó mức 0. Từ đó ta có bảng giải mã LED 7 đoạn Anode chung như sau:
    3.
    - Mã LED 7 đoạn Cathode chung, muốn thanh nào sáng ta xuất ra chân Anode của LED đơn đó mức 1. Từ đó ta có bảng giãi mã LED 7 đoạn Cathode chung như sau:
    4.
    3/ Giao tiếp cơ bản giữa vdk và led 7 thanh
    - ở đây mình code giao tiếp cơ bản giửa vdk AT89C51 và 1 led 7 thanh Anode chung, loại cathode chung làm tương tự.
    5.
    - Code cơ bản Asembly.
    Mã:
        ORG    000H
        SJMP    MAIN
    MAIN:
        MOV    P3,#00H
        MOV    P3,#0C0H        ;mã số 0
        CALL    DELAY
    
        MOV    P3,#0F9H        ;mã số 1
        CALL    DELAY
    
        MOV    P3,#0A4H        ;mã số 2
        CALL    DELAY
    
        MOV    P3,#0B0H        ;mã số 3
        CALL    DELAY
    
        MOV    P3,#99H            ;mã số 4
        CALL    DELAY
    
        MOV    P3,#92H            ;mã số 5
        CALL    DELAY
    
        MOV    P3,#82H            ;mã số 6
        CALL    DELAY
    
        MOV    P3,#0F8H        ;mã số 7
        CALL    DELAY
    
        MOV    P3,#80H            ;MA SO 8
        CALL    DELAY
    
        MOV    P3,#90H            ;mã số 9
        CALL    DELAY
        JMP    MAIN
    ;****************************************************************
    DELAY:
        MOV    R7,#10
    LOOP:    MOV    R6,#250
    LOOP1:    MOV    R5,#250
        DJNZ    R5,$
        DJNZ    R6,LOOP1
        DJNZ    R7,LOOP
        RET
    RET
    END
    - Code rút gọn Asembly
    Mã:
        ORG    00H
        SJMP    MAIN
    MAIN:
        MOV    DPTR,#MALED7SEG        ;chuyển nội dung MALED7SEG  vào thanh ghi DPTR
        MOV    R1,#0            ;thanh ghi R1 làm nhiệm vụ lưu số đếm từ 0-9
    HIEN_THI:
        MOV    R2,#10            ;biến tốc độ
    LAP:
        MOV    A,R1            ;đưa số đếm ở R1 vào A
        MOVC    A,@A+DPTR        ;chuyển nội dung MALED7SEG tại vị trí A trở đến vào thanh ghi A
        MOV    P3,A            ;xuất A ra Port3
        CALL    DELAY            ;
        DJNZ    R2,LAP            ;lặp biến tốc độ cho hiển thị nhiều lần tại giá trị R1 để kéo dài thời gian đếm
        INC    R1            ;sau khi hiển thị xong thì tăng số đếm lưu tại r1 lên 1 đơn vị
        CJNE    R1,#10,HIEN_THI        ;so sánh xem số đếm trong R1 =10 hay không, nếu chưa =10 thì nhảy đến nhản                                                       hiển thị, nếu = 10 rồi thì thoát khỏi vòng lặp.
        JMP    MAIN
    DELAY:
        MOV    R7,#250
    LOOP:    MOV    R6,#250
        DJNZ    R6,$
        DJNZ    R7,LOOP
        RET
    MALED7SEG: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
        END
    Code C
    Mã:
    #include <REGX51.H>
    unsigned char ma_led_7seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};    //mã led Anode chung
    //=======================================================
    void delay_us(unsigned int us)     // chương trình tạo trể
    {
        while(us--)
        {
            unsigned int i=1000;
              while(i--);
        }
    }
    //=======================================================
    void main()
    {
        unsigned char toc_do,so_dem;                  //khai báo biến
        so_dem=0;                              //cho số đếm =0
        while(so_dem<10)                   // vòng lặp điều kiện
        {
            for(toc_do=0;toc_do<10;toc_do++)                // biến tốc độ
            {
                P3=ma_led_7seg[so_dem];        //đưa mã led tại vị trí ''so_dem'' chỉ tới ra Port3
                delay_us(5);                  //
            }
            so_dem++;                        //sau khi hiển thị xong thì cho số đếm tăng lên 1 đơn vị
        }
       so_dem=0;                          // khi số đếm =10 rồi thì cho số đếm =0;
    }

    Các file đính kèm:

    • 7 seng.
      7 seng.png
      Kích thước:
      10.8 KB
      Đọc:
      0
    • 7seng1.
      7seng1.png
      Kích thước:
      11.2 KB
      Đọc:
      0
    • 3.
      3.png
      Kích thước:
      21 KB
      Đọc:
      0
    • 4.
      4.png
      Kích thước:
      19.9 KB
      Đọc:
      0
    • 5.
      5.png
      Kích thước:
      14.4 KB
      Đọc:
      0
    • 7seg.rar
      Kích thước:
      20.8 KB
      Đọc:
      129
    Chủ đề cùng chuyên mục
    Chia sẻ Share





    quybgtnut, loivannhudon, QUANG THANH13 others thích bài này.
    #1
  2. Đăng 14/11/13 #2

    THUONGDTQB Moderator

    Số bài viết: 586
    Đã được thích: 900
    - Ở phần trên mình đẳ giới thiệu sơ qua cấu tạo của led 7 thanh loại Anode chung và Cathode chung, cách đưa mã để hiện thị kí tự số và chử cái cơ bản lên một led 7 thanh dùng ngôn ngử Asembly và C cơ bản. Phần này mình sẻ giới thiệu cách hiển thị lên 2 hay nhiều led 7 thanh bằng phương pháp quét cơ bản mong rằng sẻ giúp được các bạn mới vào học vi xử lý không bở ngở khi giao tiếp với led 7 thanh. ;)
    - Nói về việc quét led 7 thanh thì việc hiển thị kí tự mã lên nó khác với việc hiển thị lên 1 led 7 thanh ở phần trên vì nó liên quan đến việc quét tần số và thời gian hiển thị của 1 led.
    - Cụ thể trong bài này mình sẻ giới thiệu phương pháp quét hiển thị lên 2 led 7 thanh loại anode chung, việc hiển thị lên nhiều led 7 thanh thì các bạn sau khi nắm rỏ phần này sẻ tự mở rộng.

    - Phương pháp quét led:
    xung.
    + Ở trên là sơ đồ xung của phương pháp quét led ( 2 led ).
    xung led.
    + Ở hình trên là sơ đồ xung của phương pháp quét 4 led.
    + Như vậy so sánh 2 giản đồ ta nhận thấy bản chất của phương pháp quét led là trong một thời điểm chỉ có 1 led 7seg sáng. Hay nói cách khác là trong một chu kì T các led thay nhau lần lượt sáng. Điều đó sẻ làm cho việc đưa mã hiển thị ra led 1 cách dể dàng, code ngắn gọn và đở tiêu tốn nhiều công suất và VDK sẻ đảm nhận nhiệm vụ quét này thông qua ngôn ngử lập trình.
    + Nếu quét 2 led thì 2 chân của VDK sẻ đảm nhận nhiệm vụ đống mở điện cấp cho led còn 8 chân sẻ đưa data ra led.
    + Nếu quét 4 led thì 4 chân của VDK sẻ đảm nhận nhiệm vụ đống mở điện cấp cho led còn 8 chân sẻ đưa data ra led.
    + Tương tự cho số led >4 nhưng phải đảm bảo đủ chân dùng VDK bằng cách này và tần số quét phù hợp.

    Tần số quét led:
    - VD nhỏ : Nếu chúng ta bật tắt 1 bóng đèn mổi giây 1 lần thì mắt ta sẻ cảm nhận được bóng đèn chớp tắt nhưng nếu chúng ta bật tắt bóng đèn >24 lần trong 1 giây thì mắt ta sẻ cảm nhận thấy bóng đèn luôn luôn sáng. 24 lần đấy trong 1 giây đấy gọi là tần số đóng mở đèn. Hay gọi là tần số đóng ngắt đèn là >24Hz.
    - Trong phương pháp quét led thông thường quét ở tần số tầm 50Hz đến 100Hz là đẹp tùy theo số lượng led và tất nhiên led sẻ không bị chớp chớp.
    - Với giản đồ xung quét 4 led trên với tần số quét led 50Hz ( quét 50 lượt trong 1 giây ) thì thời gian quét xong 4 led ( 1 lượt ) là T=1/50=0.02 giây hay T= 20 000uS. Vì quét 4 led nên mổi led sẻ sáng 5 000uS lần lượt. Như vậy chứng ta sẻ tạo hàm trể 5 000uS để làm trể cho mổi lần led sáng.
    - Với giản đồ xung quét 2 led trên với tần số quét led 50Hz ( quét 50 lượt trong 1 giây ) thì thời gian quét xong 2 led ( 1 lượt ) là T=1/50=0.02 giây hay T= 20 000uS. Vì quét 2 led nên mổi led sẻ sáng 10 000uS lần lượt. Như vậy chúng ta sẻ tạo hàm trể 10 000uS để làm trể cho mổi lần led sáng.
    - Có 1 ý ở đây là vì sao không quét với tần số >100 hay quét với tần số 500Hz chẳng hạn. Lý do ở đây là tần số càng lớn thì thời gian sáng của 1 led sẻ nhỏ lại và không đủ điều kiện cho led sáng ( vì chưa sáng nổi đẳ tắt rồi ) hay led sẻ mờ đi không được đẹp.

    Quét cụ thể 2 led đếm lên
    Lưu đồ thuật toán việc hiển thị lên 2 led 7 thanh dùng cho việc đếm lên như sau:
    led.
    - Giải thích lưu đồ thuật toán như sau:
    + Ban đầu gán cho số đếm có giá trị là 0 rồi tiến hành giải mã số đếm đó.
    + Việc giải mã số đếm nhằm giúp ta chia số đếm đó thành 2 số hàng chục và hàng đơn vị riêng biệt để cho tiện việc gọi mã hiển thị trông RAM của vi xử lý tương ứng.
    + Tiếp theo ta sẻ cho hiển thị mã số hàng đơn vị và cho Led 2 sáng rồi trì hoản 1 thời gian
    + Tiếp theo ta sẻ cho hiển thị mã số hàng chục và cho Led 1 sáng rồi trì hoản 1 thời gian
    + Sau khi cho hiển thị xong 2 số hàng chục và hàng đơn vị thì tăng giá trị biến đếm lên 1 đơn vị rồi so sánh giá trị biến đếm sau khi tăng với 100. nếu biến đếm chưa bằng 100 thì tiếp tục giải mã và hiển thị. nếu biến đếm =100 thì ta cho biến đếm=0 và tiếp tục chu kì đếm tiếp theo.

    - Dưới đây là 1 ví dụ quét 2 led 7 seg đếm lên 00-99 dùng 2 ngôn ngử C và Asembly
    7seg.
    - Code Asembly
    Mã:
    TOCDO    EQU    40H
    BIENDEM    EQU    R1
    SAVE1    EQU    41H
    SAVE2    EQU    42H
    LED1    BIT    P3.0
    LED2    BIT    P3.1
    ;================================================
        ORG    00H
        SJMP    MAIN
    MAIN:
        MOV    BIENDEM,#0        ; gán biến đếm =0
        MOV    DPTR,#MA_LED_7SEG    ; đưa mã led vào thanh ghi DPTR
    HERE:    LCALL    DECODE            ; gọi chương trình giải mã led 7 thanh
        LCALL    DISPLAY            ; gọi chương trình hiển thị
        INC    BIENDEM            ; sau khi hiển thị xong thì tăng biến đếm lên 1 đơn vị
        CJNE    BIENDEM,#100,HERE    ; so sánh biến đếm với 100, nếu chưa bằng 100 thì hiển thị tiếp
        JMP    MAIN            ;
    ;===============================================
    DECODE:                    ;chương trình giải mã
        MOV    A,BIENDEM        ; đưa biến đếm vào A
        MOV    B,#10            ; gán B=10
        DIV    AB            ; lấy A chia B, phần nguyên lưu ở A, phần dư lưu ở B
        MOVC    A,@A+DPTR        ; gán A= mã led tại vị trí A chỉ đến trong DPTR
        MOV    SAVE1,A            ; lưu A vào một ô nhớ SAVER1
        MOV    A,B            ; đưa B vào A (A=B)
        MOVC    A,@A+DPTR        ; gán A= mã led tại vị trí A chỉ đến trong DPTR
        MOV    SAVE2,A            ; ưu A vào một ô nhớ SAVER2
        RET
    ;==============================================   
    DISPLAY:                        ; hiển thị
        MOV    TOCDO,#50        ; tần số 50Hz thì quét 50 hình trong 1S, như vậy 1 giây sẻ tăng số đếm lên 1 đơn vị
    LAP:    CLR    LED1            ; tắ led
        CLR    LED2            ;   tắt led
        MOV    P2,SAVE1        ; đưa saver1 vào P2
        SETB    LED1            ; bật led hiển thị
        CALL    DELAY            ; gọi chương trình trể 10uS
       
        CLR    LED1
        CLR    LED2
        MOV    P2,SAVE2        ; đưa data lưu trong saver2 vào P2
        SETB    LED2            ; bật led2
        CALL    DELAY            ;
       
        DJNZ    TOCDO,LAP        ; giảm biến tốc độ nếu chưa=0 thì cho hiển thị và giảm tiếp đến =0 thì thoát
        RET
    ;===============================================
    DELAY:                    ;delay 10uS
        MOV    43H,#20
    LAP1:    MOV    44H,#250
        DJNZ    44H,$
        DJNZ    43H,LAP1
        RET
    ;================================================
    MA_LED_7SEG:
    DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
        END
    ;===============================================
    Code C
    Mã:
    #include <REGX51.H>
    sbit led1=P3^0;
    sbit led2=P3^1;
    unsigned char ma_led_7seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
    unsigned char tocdo,biendem,chuc,donvi;
    //===================== delay 1mS ================================
    void delay_ms(unsigned char time){
        while(time--)
        {
            unsigned char j=121;
            while(j--);
        }
    }
    //=========================================================================
    void decode()
    {
        donvi=biendem%10;
        chuc=biendem/10;
    }
    //=========================================================================
    void display()
    {
        for(tocdo=50;tocdo>0;tocdo--)            // tần số 50Hz thì quét 50 hình trong 1S, như vậy 1 giây sẻ tăng số đếm lên 1 đơn vị
        {
            led1=led2=0;
            P2=0x00;
            P2=ma_led_7seg[chuc];   //gán P2= mã led tại vị trí thứ chục trong ma_led_7seg
            led1=1;
            delay_ms(10);
    
            led1=led2=0;
            P2=0x00;
            P2=ma_led_7seg[donvi];
            led2=1;
            delay_ms(10);
        }
    }
    //============================================================================
    void main()
    {
        biendem=0;
        while(biendem<100)
        {
            decode();
            display();
            biendem++;
        }
    }

    Các file đính kèm:

    • 7seg.rar
      Kích thước:
      43.5 KB
      Đọc:
      116
    vietthai, phamhoang251, dungvt11 others thích bài này.
    #2
  3. Đăng 14/12/13 #3

    anh_sang0001 Học sinh phổ thông

    Số bài viết: 5
    Đã được thích: 3
    cảm ơn rất nhiều
    #3
  4. Đăng 19/12/13 #4

    double0mint Học sinh phổ thông

    Số bài viết: 1
    Đã được thích: 0
    Rất chi tiết, cảm ơn bạn nhiều!
    #4
  5. Đăng 2/2/14 #5

    acadin_k Học sinh phổ thông

    Số bài viết: 2
    Đã được thích: 1
    bài viết của bạn chi tiết và có hình vẽ mô phỏng quá trình quét, ( chỗ T off + t on ) rất rõ ràng, bạn có thể làm một bài hướng dãn về phương pháp chốt và phương pháp kết hợp nữa được không , mình rất cảm ơn
    #5

Chia sẻ trang này