Terdapat kemungkinan dalam reka bentuk tertanam di mana anda tidak mempunyai pin I / O yang mencukupi di mikrokontroler anda. Itu boleh disebabkan oleh sebab apa pun, mungkin aplikasi anda memerlukan banyak LED atau anda ingin menggunakan beberapa paparan 7 segmen, tetapi anda tidak memerlukan pin I / O di mikrokontroler anda. Di sinilah komponen sempurna, shift shift. Shift register menerima data bersiri dan memberikan output selari. Ia memerlukan hanya 3 pin untuk berhubung dengan mikrokontroler anda dan anda akan mendapat lebih daripada 8 pin Output daripadanya. Salah satu daftar shift yang popular ialah 74HC595. Ia mempunyai 8 bit penyimpanan daftar dan 8 bit daftar anjak. Ketahui lebih lanjut mengenai daftar shift di sini.
Anda akan memberikan data bersiri ke daftar pergeseran dan ia akan terkunci pada daftar simpanan dan kemudian daftar simpanan akan mengawal 8 output. Sekiranya anda mahukan lebih banyak output, tambah daftar shift yang lain. Dengan melancarkan dua register shift, anda akan mendapat 8 output tambahan, jumlah output 16bit.
Daftar Shift 74HC595:
Berikut adalah gambarajah pin out 74HC595 mengikut lembaran data-
HC595 mempunyai 16 pin; jika kita melihat lembaran data, kita akan memahami fungsi pin-
The QA untuk QH, dari nombor pin 1 hingga 7 dan 15 digunakan sebagai 8 bit output daripada daftar peralihan, di mana sebagai pin 14 digunakan untuk menerima data siri. Terdapat juga jadual kebenaran tentang cara menggunakan pin lain dan memanfaatkan fungsi lain dari shift shift.
Apabila kita menulis kod untuk menghubungkan antara 74HC595, kita akan menerapkan jadual kebenaran ini untuk mendapatkan output yang diinginkan.
Sekarang, kita akan menghubungkan 74HC595 dengan PIC16F877A dan mengawal 8 LED. Kami telah menghubungkan shift shift 74HC595 dengan mikrokontroler lain:
- Antarmuka 74HC595 Serial Shift Register dengan Raspberry Pi
- Bagaimana Menggunakan Shift Register 74HC595 dengan Arduino Uno?
- Memadankan LCD dengan NodeMCU menggunakan shift Register
Komponen yang Diperlukan:
- PIC16F877A
- Kapasitor cakera seramik 2pcs 33pF
- Kristal 20Mhz
- Perintang 4.7k
- LED 8pcs
- 1k perintang -1 pc (8 pcs perintang 1k diperlukan jika perintang berasingan pada setiap led diperlukan)
- 74HC595 ic
- Penyesuai dinding 5V
- Persekitaran pengaturcaraan PIC
- Papan roti dan wayar
Rajah Litar:
Dalam rajah litar, kami telah menyambungkan pin data bersiri; pin jam dan strob (selak) pada pin RB0, RB1 dan RB2 mikrokontroler masing-masing. Di sini kami telah menggunakan satu perintang untuk 8 LED. Berdasarkan jadual kebenaran, kami mengaktifkan output dengan menghubungkan pin 13 dari 74HC595 ke tanah. The QH pin dibiarkan kerana kami tidak akan terjun lain 74HC595 dengannya. Kami mematikan bendera masukan yang jelas dengan menyambungkan pin 10 dari daftar shift dengan VCC.
Pengayun Crystal disambungkan pada pin OSC mikrokontroler. PIC16F877A tidak mempunyai pengayun dalaman. Dalam projek ini kita akan menyalakan led satu demi satu dari Q0 ke Q7 menggunakan shift regitster.
Kami telah membina litar di papan roti-
Penjelasan Kod:
Kod lengkap untuk mengawal LED dengan shift shift diberikan di akhir artikel. Seperti biasa, kita perlu menetapkan bit konfigurasi dalam mikrokontroler PIC.
#pragma config FOSC = HS // Oscillator Selection bit (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit ( WDTabled ) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT dilumpuhkan) # pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled) #pragma config LVP = OFF // Voltan Rendah (Bekalan Tunggal) In-Circuit Serial Programming Enable bit (pin RB3 / PGM mempunyai fungsi PGM; rendah Pengaturcaraan voltan diaktifkan) #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off) #pragma config WRT = OFF // Flash Program Memory Write Enable bit (Hapus perlindungan; semua memori program mungkin ditulis oleh kawalan EECON) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Perlindungan kod mati)
Selepas itu kami menyatakan frekuensi kristal yang diperlukan untuk penundaan dan pernyataan pin-out untuk 74HC595.
#sertakan
Seterusnya kami menyatakan fungsi system_init () untuk menginisialisasi arah pin.
void system_init (void) { TRISB = 0x00; }
Kami mencipta denyut jam dan denyut selak menggunakan dua fungsi yang berbeza
/ * * Fungsi ini akan membolehkan Jam. * / jam kosong (tidak sah) { CLK_595 = 1; __delay_us (500); CLK_595 = 0; __delay_us (500); }
dan
/ * * Fungsi ini akan menyekat dan mengaktifkan pencetus output. * / void strobe (void) { STROBE_595 = 1; __delay_us (500); STROBE_595 = 0; }
Setelah dua fungsi ini, kami menyatakan fungsi data_submit (data int yang tidak ditandatangani) untuk mengirimkan data bersiri ke 74HC595.
batal data_submit (data int yang tidak ditandatangani) { untuk (int i = 0; i <8; i ++) { DATA_595 = (data >> i) & 0x01; jam (); } strob (); // Data akhirnya dihantar }
Dalam fungsi ini kami menerima data 8bit dan menghantar setiap bit menggunakan dua operator bitwise shift kiri dan operator AND. Mula-mula kami mengalihkan data satu persatu dan mengetahui bit yang tepat sama ada 0 atau 1 menggunakan operator AND dengan 0x01. Setiap data disimpan oleh denyut jam dan output data akhir dilakukan menggunakan denyut kait atau strobe. Dalam proses ini output data akan menjadi MSB (Bit Paling Penting) terlebih dahulu.
Dalam fungsi utama kami menyerahkan perduaan dan membuat pin output tinggi satu persatu.
system_init (); // Sistem bersiap sedia semasa (1) { data_submit (0b00000000); __delay_ms (200); data_submit (0b10000000); __delay_ms (200); data_submit (0b01000000); __delay_ms (200); data_submit (0b00100000); __delay_ms (200); data_submit (0b00010000); __delay_ms (200); data_submit (0b00001000); __delay_ms (200); data_submit (0b00000100); __delay_ms (200); data_submit (0b00000010); __delay_ms (200); data_submit (0b00000001); __delay_ms (200); data_submit (0xFF); __delay_ms (200); } kembali; }
Begitulah cara shift register dapat digunakan untuk mendapatkan pin I / O lebih percuma di mana-mana mikrokontroler untuk menghubungkan lebih banyak sensor.