- ส่วนประกอบที่ต้องการ:
- แผนภูมิวงจรรวม:
- ไมโครคอนโทรลเลอร์ 8051:
- 16x2 LCD:
- เครื่องอ่าน RFID EM-18:
- คำอธิบายการทำงานและรหัส:
การระบุความถี่วิทยุ (RFID)ใช้คลื่นความถี่วิทยุเพื่ออ่านข้อมูลที่เก็บไว้ในบัตรหรือแท็ก RFID ในโครงการนี้เราจะใช้อินเทอร์เฟซ EM-18 เครื่องอ่าน RFID พร้อมไมโครคอนโทรลเลอร์ 8051และแสดงหมายเลขบัตร RFID บนจอ LCD 16 * 2 การระบุ RF แบบไร้สายนี้ใช้ในหลายระบบเช่น RFID Based Attendance System ระบบรักษาความปลอดภัยเครื่องลงคะแนนเป็นต้นโครงการนี้จะทำหน้าที่เชื่อมต่อ LCD 16 * 2 กับไมโครคอนโทรลเลอร์ 8051 อย่างเหมาะสม
ส่วนประกอบที่ต้องการ:
- ไมโครคอนโทรลเลอร์ 8051
- เครื่องอ่าน RFID EM-18
- จอ LCD 16 * 2
- บัตร / แท็ก RFID
- โพเทนชิออมิเตอร์
- สายจัมเปอร์
แผนภูมิวงจรรวม:
ไมโครคอนโทรลเลอร์ 8051:
ไมโครคอนโทรลเลอร์ 8051 เป็นไมโครคอนโทรลเลอร์ 8 บิตซึ่งมี 128 ไบต์บนชิป RAM, 4K ไบต์ของชิป ROM, ตัวจับเวลาสองตัว, พอร์ตอนุกรมหนึ่งพอร์ตและพอร์ต 8 บิตสี่พอร์ต ไมโครคอนโทรลเลอร์ 8052 เป็นส่วนขยายของไมโครคอนโทรลเลอร์ ตารางด้านล่างแสดงการเปรียบเทียบสมาชิกในครอบครัว 8051 คน
ลักษณะเฉพาะ |
8051 |
8052 |
ROM (เป็นไบต์) |
4K |
8K |
RAM (ไบต์) |
128 |
256 |
ตัวจับเวลา |
2 |
3 |
หมุด I / O |
32 |
32 |
พอร์ตอนุกรม |
1 |
1 |
ขัดจังหวะแหล่งที่มา |
6 |
8 |
16x2 LCD:
16 * 2 LCD เป็นจอแสดงผลที่ใช้กันอย่างแพร่หลายสำหรับแอพพลิเคชั่นฝังตัว นี่คือคำอธิบายสั้น ๆ เกี่ยวกับพินและการทำงานของจอ LCD 16 * 2 มีการลงทะเบียนที่สำคัญมากสองรายการภายในจอ LCD เป็นทะเบียนข้อมูลและลงทะเบียนคำสั่ง ลงทะเบียนคำสั่งใช้ในการส่งคำสั่งเช่นการแสดงผลที่ชัดเจนเคอร์เซอร์ที่บ้านเป็นต้นการลงทะเบียนข้อมูลใช้ในการส่งข้อมูลซึ่งจะแสดงบนจอ LCD 16 * 2 ตารางด้านล่างแสดงคำอธิบายพินของจอ LCD 16 * 2
พิน |
สัญลักษณ์ |
I / O |
คำอธิบาย |
1 |
Vss |
- |
พื้น |
2 |
Vdd |
- |
+ แหล่งจ่ายไฟ 5V |
3 |
วี |
- |
แหล่งจ่ายไฟเพื่อควบคุมความคมชัด |
4 |
อาร์เอส |
ผม |
RS = 0 สำหรับการลงทะเบียนคำสั่ง RS = 1 สำหรับการลงทะเบียนข้อมูล |
5 |
RW |
ผม |
R / W = 0 สำหรับเขียน R / W = 1 สำหรับการอ่าน |
6 |
จ |
I / O |
เปิดใช้งาน |
7 |
D0 |
I / O |
บัสข้อมูล 8 บิต (LSB) |
8 |
D1 |
I / O |
บัสข้อมูล 8 บิต |
9 |
D2 |
I / O |
บัสข้อมูล 8 บิต |
10 |
D3 |
I / O |
บัสข้อมูล 8 บิต |
11 |
D4 |
I / O |
บัสข้อมูล 8 บิต |
12 |
D5 |
I / O |
บัสข้อมูล 8 บิต |
13 |
D6 |
I / O |
บัสข้อมูล 8 บิต |
14 |
D7 |
I / O |
บัสข้อมูล 8 บิต (MSB) |
15 |
ก |
- |
+ 5V สำหรับแบ็คไลท์ |
16 |
เค |
- |
พื้น |
ตารางด้านล่างแสดงรหัสคำสั่ง LCD ที่ใช้บ่อย
รหัส (ฐานสิบหก) |
คำอธิบาย |
01 |
หน้าจอแสดงผลชัดเจน |
06 |
เคอร์เซอร์ที่เพิ่มขึ้น (เลื่อนไปทางขวา) |
0A |
ปิดการแสดงเคอร์เซอร์เปิด |
0C |
แสดงเปิดเคอร์เซอร์ปิด |
0F |
แสดงเคอร์เซอร์กะพริบ |
80 |
บังคับเคอร์เซอร์ไปยังจุดเริ่มต้นของ 1 เซนต์บรรทัด |
C0 |
บังคับเคอร์เซอร์ไป beginningof 2 ครั้งบรรทัด |
38 |
2 บรรทัดและ 5 * 7 เมทริกซ์ |
เครื่องอ่าน RFID EM-18:
เครื่องอ่าน RFID EM-18 ทำงานที่ 125 KHz และมาพร้อมกับเสาอากาศบนชิปและสามารถขับเคลื่อนด้วยแหล่งจ่ายไฟ 5V ให้เอาต์พุตแบบอนุกรมพร้อมกับเอาต์พุต weigand ช่วงประมาณ 8-12cm. พารามิเตอร์การสื่อสารแบบอนุกรมคือ 9600bps, 8 บิตข้อมูล, 1 บิตหยุด แอพพลิเคชั่นรวมถึงการพิสูจน์ตัวตน, การกำหนดราคาค่าผ่านทางอิเล็กทรอนิกส์, การออกตั๋วอิเล็กทรอนิกส์สำหรับระบบขนส่งสาธารณะ, ระบบการเข้างาน ฯลฯ ตรวจสอบโครงการ RFID ทั้งหมดที่นี่
เอาต์พุตจากเครื่องอ่าน RFID EM-18 อยู่ในรูปแบบ ASCII 12 หลัก จาก 12 หลัก 10 หลักแรกคือหมายเลขบัตรและสองหลักสุดท้ายเป็นผลลัพธ์ XOR ของหมายเลขบัตร ใช้ตัวเลขสองหลักสุดท้ายสำหรับการตรวจสอบข้อผิดพลาด
ตัวอย่างเช่นหมายเลขบัตรคือ 0200107D0D62 อ่านจากเครื่องอ่านหมายเลขบัตรจะเป็นดังต่อไปนี้
02 - คำนำ
00107D0D = 1080589 ในทศนิยม
62 คือค่า XOR สำหรับ (02 XOR 00 XOR 10 XOR 7D XOR 0D)
ดังนั้นหมายเลขบนการ์ดคือ 0001080589
คำอธิบายการทำงานและรหัส:
สมบูรณ์โปรแกรม C และวิดีโอสาธิตสำหรับโครงการนี้จะได้รับในตอนท้ายของโครงการนี้ รหัสจะแบ่งออกเป็นส่วนเล็ก ๆ ที่มีความหมายและอธิบายไว้ด้านล่าง
สำหรับการเชื่อมต่อ LCD 16 * 2 กับไมโครคอนโทรลเลอร์ 8051 เราต้องกำหนดพินที่จอ LCD 16 * 2 เชื่อมต่อกับไมโครคอนโทรลเลอร์ 8051 ขา RS ของจอ LCD 16 * 2 เชื่อมต่อกับ P3.7, ขา RW ของจอ LCD 16 * 2 เชื่อมต่อกับ P3.6 และขา E ของจอ LCD 16 * 2 เชื่อมต่อกับ P3.5 พินข้อมูลเชื่อมต่อกับพอร์ต 1 ของไมโครคอนโทรลเลอร์ 8051
sbit rs = P3 ^ 7; sbit rw = P3 ^ 6; sbit th = P3 ^ 5;
ต่อไปเราจะต้องกำหนดฟังก์ชั่นบางอย่างที่ใช้ในโปรแกรม ฟังก์ชัน Delay ใช้เพื่อสร้างการหน่วงเวลาที่ระบุ ฟังก์ชัน Cmdwrt ใช้เพื่อส่งคำสั่งไปยังจอแสดงผล LCD 16 * 2 ฟังก์ชัน datawrt ใช้ในการส่งข้อมูลไปยังจอ LCD 16 * 2 ฟังก์ชัน Rxdata ใช้เพื่อรับข้อมูลจากพอร์ตอนุกรม
ความล่าช้าเป็นโมฆะ (int ไม่ได้ลงนาม); เป็นโมฆะ cmdwrt (ถ่านที่ไม่ได้ลงนาม); เป็นโมฆะ datawrt (ถ่านที่ไม่ได้ลงชื่อ); ถ่าน rxdata (โมฆะ);
ในส่วนของรหัสนี้เราจะไปกำหนดค่า 8051 ไมโครคอนโทรลเลอร์สำหรับการสื่อสารแบบอนุกรม
TMOD register ถูกโหลดด้วย 0x20 สำหรับตัวจับเวลา 1, โหมด 2 (โหลดอัตโนมัติ) SCON register โหลดด้วย 0x50 สำหรับ 8 data bits, 1 stop bit และเปิดใช้งาน TH1 register โหลดด้วย 0xfd สำหรับอัตรา baud 9600 บิตต่อวินาที TR1 = 1 ใช้เพื่อเริ่มจับเวลา
TMOD = 0x20; SCON = 0x50; TH1 = 0xfd; TR1 = 1;
ในส่วนนี้ของรหัสเรากำลังส่งคำสั่งไปยังจอ LCD 16 * 2 คำสั่งดังกล่าวเป็นจอแสดงผลที่ชัดเจนเคอร์เซอร์เพิ่มขึ้นบังคับเคอร์เซอร์ไปยังจุดเริ่มต้นของ 1 เซนต์สายจะถูกส่งไป 16 * 2 จอแสดงผล LCD หนึ่งโดยหนึ่งหลังจากที่บางบางล่าช้าเวลาที่กำหนด
สำหรับ (i = 0; i <5; i ++) {cmdwrt (cmd); ล่าช้า (1); }
ในส่วนนี้ของรหัสเราได้รับเอาต์พุตของเครื่องอ่านRFID EM-18ผ่านอินเทอร์เฟซแบบอนุกรมของไมโครคอนโทรลเลอร์ 8051 และเก็บไว้ในตัวแปร Count ใช้เพื่อติดตามจำนวนไบต์ที่ได้รับ เมื่อได้รับข้อมูลทั้งหมด 12 ไบต์แล้วต่อไปเราจะต้องแสดงบนจอ LCD 16 * 2 กระบวนการนี้จะทำซ้ำตลอดไปเพื่ออ่านไพ่ต่างๆ
ในขณะที่ (1) {count = 0; cmdwrt (0xC2); ในขณะที่ (นับ <12) {input = rxdata (); นับ ++; } สำหรับ (i = 0; i <12; i ++) {datawrt (อินพุต); ล่าช้า (1); } ล่าช้า (100); }
ในส่วนของรหัสนี้เราจะส่งคำสั่งไปยังจอแสดงผล 16 * 2 จอแอลซีดี คำสั่งถูกคัดลอกไปยังพอร์ต 1 ของไมโครคอนโทรลเลอร์ 8051 RS ถูกทำให้ต่ำสำหรับการเขียนคำสั่ง RW ถูกทำให้ต่ำสำหรับการเขียน ใช้พัลส์สูงถึงต่ำบนพินเปิดใช้งาน (E) เพื่อเริ่มดำเนินการเขียนคำสั่ง
เป็นโมฆะ cmdwrt (ถ่าน x ที่ไม่ได้ลงชื่อ) {P1 = x; rs = 0; rw = 0; th = 1; ล่าช้า (1); th = 0; }
ในส่วนนี้ของรหัสเรากำลังส่งข้อมูลไปยังจอแสดงผล LCD 16 * 2 ข้อมูลจะถูกคัดลอกไปยังพอร์ต 1 ของไมโครคอนโทรลเลอร์ 8051 RS ถูกสร้างให้สูงสำหรับการเขียนคำสั่ง RW ถูกทำให้ต่ำสำหรับการเขียน ใช้พัลส์สูงถึงต่ำบนพินเปิดใช้งาน (E) เพื่อเริ่มการดำเนินการเขียนข้อมูล
เป็นโมฆะ datawrt (ถ่าน y ที่ไม่ได้ลงชื่อ) {P1 = y; rs = 1; rw = 0; th = 1; ล่าช้า (1); th = 0; } นอกจากนี้ตรวจสอบโครงการ RFID ทั้งหมดของเรากับไมโครคอนโทรลเลอร์อื่น ๆ