Chào mừng đến với Câu Lạc Bộ Sáng Tạo
Chia sẻ kinh nghiệm
Kết nối đam mê
Đang cập nhật thời gian...
BÀI VIẾT NỔI BẬT
Xin chào! Tôi là Ếch Sáng Tạo :-)
Chia sẻ trang




Chuyên mục
Bài mới
Xem nhiều
Thống kê
  • Bài viết: 334/334
  • Thành viên: 10.084
  • Đang online: 2
  • Khách hôm nay: 1.360
  • Khách hôm qua: 4.189
  • Tổng khách: 16.105.154
Bài viết
Bài 6: Lập trình giao tiếp IC ghi dịch 74HC595 - SangTaoClub.Net
Bài 6: Lập trình giao tiếp IC ghi dịch 74HC595
Đăng bởi: Vũ Văn Thái - Thời gian: 11-10-2013, 14:51
Chuyên mục: Học lập trình 8051 - Lượt xem: 37.395

Lập trình giao tiếp IC ghi dịch 74HC595

1. Sơ lược về IC ghi dịch 74HC595:

Là ic ghi dịch 8bit kết hợp chốt dữ liệu , đầu vào nối tiếp đầu ra song song .
Chức năng: Thường dùng trong các mạch quét led 7 , led matrix …để tiết kiệm số chân VDK tối đa (3 chân) . Có thể mở rộng số chân vi điều khiển bao nhiêu tùy thích mà k ic nào có thể làm dc bằng việc mắc nối tiếp đầu vào dữ liệu các ic với nhau .

Cách mở rộng ta chỉ việc nối Q7' của IC trước với chân DATA (chân 14) của IC sau, với IC đầu tiên nhận dữ liệu từ VĐK

2. Sơ đồ chân IC:

Lập trình giao tiếp IC ghi dịch 74HC595

Giải thích ý nghĩa hoạt động của một số chân quan trọng:
(input)
Chân 14 : đầu vào dữ liệu nối tiếp . Tại 1 thời điểm xung clock chỉ đưa vào được 1 bit
(output)
Q0=>Q7 : trên các chân (15,1,2,3,4,5,6,7)
Xuất dữ liệu khi chân chân 13 tích cực ở mức thấp và có một xung tích cực ở sườn âm tại chân chốt 12
(output-enable)
Chân 13 : Chân cho phép tích cực ở mức thấp (0) .Khi ở mức cao, tất cả các đầu ra của 74595 trở về trạng thái cao trở, không có đầu ra nào được cho phép.
(SQH)
Chân 9: Chân dữ liệu nối tiếp . Nếu dùng nhiều 74595 mắc nối tiếp nhau thì chân này đưa vào đầu vào của con tiếp theo khi đã dịch đủ 8bit.
(Shift clock)
Chân 11: Chân vào xung clock . Khi có 1 xung clock tích cực ở sườn dương(từ 0 lên 1) thì 1bit được dịch vào ic.
(Latch clock)
Chân 12 : xung clock chốt dữ liệu . Khi có 1 xung clock tích cực ở sườn dương thì cho phép xuất dữ liệu trên các chân output . lưu ý có thể xuất dữ liệu bất kỳ lúc nào bạn muốn ,ví dụ đầu vào chân 14 dc 2 bit khi có xung clock ở chân 12 thì dữ liệu sẽ ra ở chân Q0và Q1 (chú ý chiều dịch dữ liệu từ Q0=>Q7)
(Reset)
Chân 10: khi chân này ở mức thấp(mức 0) thì dữ liệu sẽ bị xóa trên chip)

3. CODE lập trình giao tiếp

#include <REGX51.H>
sbit CLK = P2^0; //Chan 11 clock
sbit SDI = P2^1; //Chan 14 data
sbit STR = P2^2; //Chan 12 chot
void delay(unsigned char time){
//Chuong trinh tao tre 50ms
        unsigned char t;
        for(t=0;t<time;t++){
                TMOD=0x01;
                TH0=0x3c;
                TL0=0xb0;
                TR0=1;
                while(!TF0);
                TF0=TR0=0;
        }
}
void truyen(unsigned char b1, unsigned char b2, unsigned char b3){
/*Chuong trinh truyen du lieu vao 3 IC 74HC595
Cac ban co the mo rong them bao nhieu IC tuy thich
bang cach them code theo mau cua chuong trinh goc
*/
        unsigned char i,Q;
        Q=b3; for(i=0;i<8;i++){SDI=Q&0x80;CLK=0;CLK=1;Q<<=1;} //ic 3
        Q=b2; for(i=0;i<8;i++){SDI=Q&0x80;CLK=0;CLK=1;Q<<=1;} //ic 2
        Q=b1; for(i=0;i<8;i++){SDI=Q&0x80;CLK=0;CLK=1;Q<<=1;} //ic 1
        STR=0; STR=1; //Chot hien thi du lieu
}

void main(){ //ctr chinh
        unsigned int i;
        unsigned char ma[10]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00};
        while(1){
                for(i=0;i<10;i++){
                        truyen(0xff,ma[i],ma[9-i]); //Truyen du lieu vao IC
                        delay(5);
                        truyen(0x00,ma[i-1],ma[9-i]);
                        delay(5);
                }
        }
}

4. Sơ đồ nguyên lý:

Lập trình giao tiếp IC ghi dịch 74HC595

5. Download tài liệu:

Tải code và mô phỏng (Proteus 7.8): http://www.mediafire.com/?xuey75yy386wb0f


  • Bạn chưa đăng nhập, không thể viết bình luận!
    Bấm vào đây để Đăng nhập hoặc Đăng ký!
  • Vũ Văn Thái lúc 13-10-2015, 12:55
    74hc595 là ic số rất khó làm nó bị đơ, chỉ vi điều khiển đơ nó mới truyền sai dữ liệu dẫn tới 595 xuất sai data.
  • Vũ Văn Thái lúc 13-10-2015, 12:53
    Bạn dùng 8051 thì dính nhiễu là phải rồi, dùng avr nó chống nhiễu tốt hơn
    • badao_vc lúc 14-10-2015, 08:10
      không phải 8051, mình dùng pic, nó chỉ bị nhiễu chứ không phải bị đơ bạn hi
  • badao_vc lúc 13-10-2015, 09:16
    không phải anh ơi em dùng nguồn meanwel mà!nó chỉ bị nhiễu 595 thôi e dùng 74hc595 chip thì ko sao hết khi e đóng tải mấy cái máy cắt hay máy hàn là nó bị nhiễu,led nháy nhưng khi không dùng tải thì nó hết
  • Vũ Văn Thái lúc 10-10-2015, 17:00
    Do nguồn cấp k ổn, lọc chưa tốt hoặc do dùng nguồn AC-DC kém chất lượng lên bị nhiễu xung cao tần hay xung nhọn làm chip reset hoặc treo...
  • badao_vc lúc 10-10-2015, 10:43
    Mình có làm phần cứng về PIC và 74HC595 điều khiển led 7 đoạn mạch chạy ok nhưng khi sử dụng chung nguồn với các thiết bị khác có tải lớn như máy cắt máy hàn .. thì LED bị nhảy liên tục
  • HoangQuyen lúc 04-08-2015, 06:15
    Anh cho em hỏi. Dùng phần mềm ledimn để lập trình cho con 89c52 sáng dần từ 1 -> 32 thì khi xuất ra con 74hc595 thì đèn led sẽ nháy từ đâu trước ạ.
  • trinhcongdanh lúc 22-06-2015, 14:10
    Vũ văn thái ơi anh có chơi fb hay gì k cho em biết ních đc k.có nhiều cái em muốn hỏi anh lắm.e cũng mê lập trình lên mong a giúp đỡ
  • Vũ Văn Thái lúc 22-06-2015, 12:17
    Mô phỏng đi, biên dịch code ok là đúng rồi,xem lại mấy cái ngoặc nha, khai báo cho nó chính xác.
  • trinhcongdanh lúc 22-06-2015, 08:22
    Anh xem hộ e cái code xem e viết điều khiển led 7 thanh ntn đúng chưa
    #include <REGX51.H>
    sbit CLK = P2^0; //Chan 11 clock
    sbit SDI = P2^1; //Chan 14 data
    sbit STR = P2^2; //Chan 12 chot
    void delay(unsigned char time){
    //Chuong trinh tao tre 50ms
           unsigned char t;
           for(t=0;t<time;t++){
                    TMOD=0x01;
                    TH0=0x3c;
                    TL0=0xb0;
                    TR0=1;
                    while(!TF0);
                    TF0=TR0=0;
           }
    }
    void truyen(unsigned char b1)
           unsigned char i,Q;
           Q=b1; for(i=0;i<8;i++){SDI=Q&0x80;CLK=0;CLK=1;Q<<=1;}


    void main()
    {
    unsigned int i, k=0;
    unsigned char ma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//ma led 7
    while(1)
    {
    for(i=0;i<10;i++)
    {
    quet(ma[i]);
    delay();
    }
    }}
  • Vũ Văn Thái lúc 22-06-2015, 07:16
    Nó chỉ là ví dụ mẫu truyền 3 dữ liệu khác nhau vào 3 ic thôi chứ có gì đâu phải giải thích, cách sử dụng hàm truyền: truyen(data_ic1, data_ic2, data_ic3); cứ viết như thế này là 3 ic sẽ xuất đúng giá trị mà ta truyền cho nó.
    • Vũ Văn Thái lúc 22-06-2015, 07:20
      VD: truyen(0xff, 0x55, 0x00);
      ic 1 các ngõ ra ở mức 1
      ic 2 ngõ ra xen kẽ nhau 01010101
      ic 3 các ngõ ra ở mức 0
  • Trang 1/4: 1234Sau

    Bài viết cùng chuyên mục
    Điều khiển tốc độ động cơ Motor DC sử dụng PWM Điều khiển tốc độ động cơ Motor DC sử dụng PWM
    Đăng bởi: kienvuce - Thời gian: 04-11-2021, 22:40
    Chuyên mục: Học lập trình 8051 - Lượt xem: 3.032
    Chia sẻ bộ thư viện Driver chuẩn cho LCD Gphone và Home Phone Chia sẻ bộ thư viện Driver chuẩn cho LCD Gphone và Home Phone
    Đăng bởi: Vũ Văn Thái - Thời gian: 22-02-2017, 14:54
    Chuyên mục: Học lập trình 8051 - Lượt xem: 6.594
    Led 7 thanh 4 số điều khiển bằng nút bấm Led 7 thanh 4 số điều khiển bằng nút bấm
    Đăng bởi: HoangQuan69 - Thời gian: 09-10-2016, 15:08
    Chuyên mục: Học lập trình 8051 - Lượt xem: 5.840
    Chia sẻ Code đồng hồ số hiển thị trên LED 7 đoạn dùng 89S52 và DS1307 Chia sẻ Code đồng hồ số hiển thị trên LED 7 đoạn dùng 89S52 và DS1307
    Đăng bởi: Vũ Văn Thái - Thời gian: 13-05-2015, 09:00
    Chuyên mục: Học lập trình 8051 - Lượt xem: 28.574
    Bài 15: Lập trình quét phím matrix 4x4 hiển thị lên LCD 16x2 Bài 15: Lập trình quét phím matrix 4x4 hiển thị lên LCD 16x2
    Đăng bởi: Vũ Văn Thái - Thời gian: 20-11-2014, 08:57
    Chuyên mục: Học lập trình 8051 - Lượt xem: 31.507
    [Share] Code giao tiếp Graphic LCD 12864 SPI của máy GPHONE ZTE [Share] Code giao tiếp Graphic LCD 12864 SPI của máy GPHONE ZTE
    Đăng bởi: Vũ Văn Thái - Thời gian: 12-11-2014, 22:06
    Chuyên mục: Học lập trình 8051 - Lượt xem: 19.207
    [Share] Code C đo nhiệt độ dùng DS18B20 hiển thị lên LED 7 thanh [Share] Code C đo nhiệt độ dùng DS18B20 hiển thị lên LED 7 thanh
    Đăng bởi: Vũ Văn Thái - Thời gian: 12-11-2014, 09:02
    Chuyên mục: Học lập trình 8051 - Lượt xem: 19.494
    Bài 14: Đo nhiệt độ dùng cảm biến DS18B20 với 8051 Bài 14: Đo nhiệt độ dùng cảm biến DS18B20 với 8051
    Đăng bởi: Vũ Văn Thái - Thời gian: 19-10-2014, 10:11
    Chuyên mục: Học lập trình 8051 - Lượt xem: 25.308
    Bài 13: Đo nhiệt độ dùng LM35 kết hợp IC ADC0808 với 8051 Bài 13: Đo nhiệt độ dùng LM35 kết hợp IC ADC0808 với 8051
    Đăng bởi: Vũ Văn Thái - Thời gian: 22-08-2014, 22:18
    Chuyên mục: Học lập trình 8051 - Lượt xem: 45.853
    Bài 12: Tạo xung PWM dùng ngắt timer 8051 Bài 12: Tạo xung PWM dùng ngắt timer 8051
    Đăng bởi: Vũ Văn Thái - Thời gian: 02-03-2014, 20:45
    Chuyên mục: Học lập trình 8051 - Lượt xem: 23.994
    
    Chào mừng Hungnguyen123 đã tham gia câu lạc bộ sáng tạo!
    Vũ Văn Thái - vuthai
    Hôm nay là sinh nhật của kudai93, ninhthuan85, huylak01, phamngocvinh117123, bboy_lovely, hieu123, thangcdt1, Tran_viettrung, elnino2803, zghieu, phikhanhk11, kuquyen, d9tam81, vannhan738, Truong_97, imagine_02, autobot413, prokiemrong0000, ← Gửi tin nhắn chúc mừng
    Múi giờ: UTC+07:00 - Asia/Ho Chi Minh ***** IP của bạn: 35.173.178.60 ***** Status: Cache Update thành công!