มีความเป็นไปได้ในการออกแบบฝังตัวซึ่งคุณมีพิน I / O ไม่เพียงพอในไมโครคอนโทรลเลอร์ของคุณ อาจเกิดจากสาเหตุใดก็ตามอาจเป็นเพราะแอปพลิเคชันของคุณต้องการ LED หลายตัวหรือคุณต้องการใช้จอแสดงผล 7 ส่วนหลายจอ แต่คุณไม่จำเป็นต้องมีพิน I / O ในไมโครคอนโทรลเลอร์ของคุณ ที่นี่มาเป็นองค์ประกอบที่สมบูรณ์แบบลงทะเบียนเปลี่ยนแปลง Shift register ยอมรับข้อมูลอนุกรมและให้เอาต์พุตแบบขนาน มันต้องมีเพียง3 ขาเพื่อเชื่อมต่อกับไมโครคอนโทรลเลอร์ของคุณและคุณจะได้รับมากกว่า8 พินเอาท์พุทจากมัน หนึ่งของการลงทะเบียนการเปลี่ยนแปลงที่เป็นที่นิยม74HC595มันมีการลงทะเบียนการจัดเก็บข้อมูล 8 บิตและ8 บิตกะลงทะเบียนเรียนรู้เพิ่มเติมเกี่ยวกับการลงทะเบียนกะที่นี่
คุณจะให้ข้อมูลแบบอนุกรมไปยังทะเบียนกะและข้อมูลนั้นจะถูกสลักไว้ที่รีจิสเตอร์ที่เก็บข้อมูลจากนั้นรีจิสเตอร์ที่เก็บข้อมูลจะควบคุมเอาต์พุตทั้ง 8 หากคุณต้องการผลลัพธ์เพิ่มเติมเพียงเพิ่มทะเบียนกะอื่น ด้วยการเรียงซ้อนรีจิสเตอร์สองตัวคุณจะได้รับเอาต์พุตเพิ่มอีก 8 เอาต์พุตรวมเอาต์พุต 16 บิต
กะลงทะเบียน 74HC595:
นี่คือแผนภาพพินเอาต์ของ74HC595ตามแผ่นข้อมูล -
HC595 มี 16 พิน; หากเราเห็นแผ่นข้อมูลเราจะเข้าใจฟังก์ชันพิน -
QA เพื่อ QHจากหมายเลข PIN 1-7 และ 15ใช้เป็นเอาท์พุทบิต 8จากการลงทะเบียนการเปลี่ยนแปลงที่เป็นขา 14ถูกนำมาใช้สำหรับการรับข้อมูลแบบอนุกรมนอกจากนี้ยังมีตารางความจริงเกี่ยวกับวิธีการใช้พินอื่น ๆ และฟังก์ชันอื่น ๆ ของ shift register
เมื่อเราเขียนโค้ดสำหรับเชื่อมต่อกับ74HC595เราจะใช้ตารางความจริงนี้เพื่อให้ได้ผลลัพธ์ที่ต้องการ
ตอนนี้เราจะเชื่อมต่อ 74HC595 กับ PIC16F877A และควบคุม LED 8 ดวง เราได้เชื่อมต่อทะเบียนกะ 74HC595 กับไมโครคอนโทรลเลอร์อื่น ๆ:
- การเชื่อมต่อ 74HC595 Serial Shift Register กับ Raspberry Pi
- จะใช้ Shift Register 74HC595 กับ Arduino Uno ได้อย่างไร
- การเชื่อมต่อ LCD กับ NodeMCU โดยใช้ shift Register
ส่วนประกอบที่ต้องการ:
- PIC16F877A
- 2 ชิ้น 33pF ตัวเก็บประจุดิสก์เซรามิก
- คริสตัล 20Mhz
- ตัวต้านทาน 4.7k
- ไฟ LED 8 ชิ้น
- ตัวต้านทาน 1k -1 ชิ้น (ต้องใช้ตัวต้านทาน 1k 8 ชิ้นหากต้องการตัวต้านทานแยกต่างหากในแต่ละไฟ LED)
- 74HC595 ไอซี
- อะแดปเตอร์ติดผนัง 5V
- สภาพแวดล้อมการเขียนโปรแกรม PIC
- เขียงหั่นขนมและสายไฟ
แผนภูมิวงจรรวม:
ในแผนภาพวงจรเราได้เชื่อมต่อพินข้อมูลอนุกรม เข็มนาฬิกาและไฟแฟลช (สลัก)บนขาRB0, RB1 และ RB2ของไมโครคอนโทรลเลอร์ตามลำดับ ที่นี่เราใช้ตัวต้านทานหนึ่งตัวสำหรับ LED 8 ตัว ตามตารางความจริงเราเปิดใช้งานเอาต์พุตโดยเชื่อมต่อพิน 13 ของ 74HC595 กับกราวด์ QHขาเปิดทิ้งไว้ในขณะที่เราจะไม่น้ำตกอีก74HC595กับมัน เราปิดการใช้งานค่าสถานะอินพุตที่ชัดเจนโดยเชื่อมต่อพิน 10 ของ shift register กับ VCC
Crystal oscillator เชื่อมต่อกับหมุด OSC ของไมโครคอนโทรลเลอร์ PIC16F877A ไม่มีออสซิลเลเตอร์ภายใน ในโครงการนี้เราจะสว่างขึ้นหนึ่งนำโดยหนึ่งจากQ0 เพื่อ Q7 ใช้ regitster
เราได้สร้างวงจรในเขียงหั่นขนม -
คำอธิบายรหัส:
รหัสที่สมบูรณ์สำหรับการควบคุม LED ที่มีการลงทะเบียนกะมีให้ที่ท้ายบทความ เช่นเคยเราต้องตั้งค่าบิตการกำหนดค่าในไมโครคอนโทรลเลอร์ PIC
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) # pragma config BOREN = ON // Brown-out Reset Enable bit (เปิดใช้งาน BOR) #pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 / PGM pin มีฟังก์ชัน PGM ต่ำ - เปิดใช้งานการเขียนโปรแกรมแรงดันไฟฟ้า) #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off) #pragma config WRT = OFF // Flash Program Memory Write เปิดใช้งานบิต (การป้องกันการเขียนปิดหน่วยความจำโปรแกรมทั้งหมดอาจเป็น เขียนถึงโดย EECON control) #pragma config CP = OFF // บิตการป้องกันรหัสหน่วยความจำโปรแกรมแฟลช (ปิดการป้องกันรหัส)
หลังจากที่เราประกาศความถี่คริสตัลซึ่งเป็นสิ่งจำเป็นสำหรับความล่าช้าและการประกาศขาออกสำหรับ74HC595
# รวม
ต่อไปเราจะประกาศ ฟังก์ชัน system_init () เพื่อเริ่มต้นทิศทางของพิน
โมฆะ system_init (โมฆะ) { TRISB = 0x00; }
เราสร้างพัลส์นาฬิกาและพัลส์สลักโดยใช้สองฟังก์ชันที่แตกต่างกัน
/ * * ฟังก์ชันนี้จะเปิดใช้งานนาฬิกา * / นาฬิกาโมฆะ (โมฆะ) { CLK_595 = 1; __delay_us (500); CLK_595 = 0; __delay_us (500); }
และ
/ * * ฟังก์ชั่นนี้จะแฟลชและเปิดใช้งานทริกเกอร์เอาต์พุต * / เป็นโมฆะแฟลช (โมฆะ) { STROBE_595 = 1; __delay_us (500); STROBE_595 = 0; }
หลังจากนี้ทั้งสองฟังก์ชั่นที่เราประกาศ data_submit (ข้อมูล int ไม่ได้ลงนาม) ฟังก์ชั่นในการส่งข้อมูลแบบอนุกรมกับ74HC595
เป็นโมฆะ data_submit (ข้อมูล int ที่ไม่ได้ลงชื่อ) { สำหรับ (int i = 0; i <8; i ++) { DATA_595 = (data >> i) & 0x01; นาฬิกา(); } ไฟแฟลช (); // ส่งข้อมูลในที่สุด }
ในฟังก์ชั่นนี้เรายอมรับข้อมูล 8 บิตและส่งแต่ละบิตโดยใช้ตัวดำเนินการสองตัวที่เลื่อนไปทางซ้ายและตัวดำเนินการAND ครั้งแรกที่เราเปลี่ยนข้อมูลหนึ่งโดยหนึ่งและหาบิตที่แน่นอนไม่ว่าจะเป็น 0 หรือ 1 ใช้และผู้ประกอบการที่มี 0x01 แต่ละข้อมูลจะถูกจัดเก็บโดยพัลส์นาฬิกาและส่งออกข้อมูลสุดท้ายทำได้โดยใช้สลักหรือแฟลชชีพจรในขั้นตอนนี้ส่งออกข้อมูลจะMSB (ส่วนใหญ่บิตที่สําคัญ) เป็นครั้งแรก
ในฟังก์ชั่น หลัก เราส่งไบนารีและทำให้พินเอาต์พุตสูงทีละพิน
system_init (); // ระบบเตรียมพร้อม ในขณะที่ (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); } คืน; }
นั่นคือวิธีที่สามารถใช้ shift register เพื่อรับพิน I / O ฟรีในไมโครคอนโทรลเลอร์สำหรับเชื่อมต่อเซ็นเซอร์เพิ่มเติม