AT89C51 VỚI MÀN HÌNH LCD KÈM THEO KHÓA CỬA
Thẻ điều khiển L293D được sử dụng để điều khiển các bộ phận (motor, relay) với các yêu cầu điện áp cao và dòng điện. Nếu động cơ cần dòng điện lớn hơn so với bảng điều khiển có thể, các mạch dẫn động phải được sử dụng để tăng điện áp và dòng điện, nếu không bảng điều khiển có thể bị cháy.
L293D Thông số kỹ thuật
- Hoạt động độc lập bên phải hoặc tay trái
- 1 x L293D có thể điều khiển hai động cơ hai chiều
Thiết lập ma quỷ
- Đầu tiên, chân ở giữa 4-5-12-13 chân nên được kết hợp và sử dụng làm đất.
- Các động cơ, 3-6 và 11-14, được kết nối với chân.
- 1-16-9 chân được cho 5 volts (có sẵn từ BASIC Stamp).
- Chân thứ 2 và thứ 7 Động cơ thứ 1, chân thứ 10 và chân thứ 15 bắt đầu.
- 8, điện áp được áp dụng cho động cơ được đưa ra (nó không nên được nhiều hơn 36 V)
Mã chương trình C
/ ************************************************* *********************** / / * Tên ứng dụng: Khóa cửa bí mật * / / * Tên tệp: sif_kapikilidi * / / * Ngày: tháng 5 năm 2006 * / / * Bộ xử lý đích: MCS-51 * / / ************************************************* *********************** / #include <89c51rd2 .h="">89c51rd2> #include/ * Mã ký tự của ký tự Thổ Nhĩ Kỳ * / / * mã định nghĩa mã bảng trong bộ nhớ * / mã const char TurkceKar [8] [8] = { {143,144,144,142,129,129,158,132}, // S {128, 128, 142, 144, 144, 145, 142, 132} {128, 128, 143, 144, 142, 129, 158, 132} {128, 128, 140, 132, 132, 132, 142, 128} {138,128,145,145,145,145,145,142}, // Ü {138,132,143,145,145,143,129,142}, // {138,142,145,145,145,145,142,128}, // Ö {132,142,132,132,132,132,142,128} // tôi }; #define KLAV P2 // Nút ấn mã dài int password = 2402; // xóa bộ nhớ mã số bit; int g = 20; int k = 10000; / ************************************************* ************************************************** ******** ************************************************** ************************************************** ******** ĐỌC TỪ KEYPAD ************************************************** ************************************************** ******** ************************************************** ************************************************** ******* / unsigned char keyboardOut (void) {// Xác định số đã nhập trên bàn phím unsigned char i = 0; unsigned char x = 0; / * Để gửi số không đến cột thứ nhất, thứ hai và thứ ba tương ứng bảng bắt buộc * / bảng chưa được ký [] = {0x7f, 0xbf, 0xdf}; KLAV = 0x0F; // Tất cả các hàng 1 trong khi ((KLAV & 0x0F) == 0x0F); // Quay lại đầu khóa cho (i = 0; i & lt; 3; i ++) { KLAV = bảng [i]; // Gửi số không đến cột x = KLAV & 0x0F; // Bốn lần cuối để phát hiện hàng // lấy bit switch (x) { trường hợp 7: // dòng D hoạt động (một trong số *, 0 hoặc #) { while ((KLAV & 0x0F)! = 0x0F); // Quay lại cho đến khi nút được nhả if (i! = 1) // Nếu phím bấm không phải là 0 (nếu bấm # hoặc *) count = 1; // Ủy quyền đếm trả về 0; // Gửi số không } break; trường hợp 11: // dòng C hoạt động (một trong 7, 8 hoặc 9 phím) { while ((KLAV & 0x0F)! = 0x0F); // Quay lại cho đến khi nút được nhả trở về 7 + i; // (gửi 7,8 hoặc 9 theo i) } break; trường hợp 13: // dòng B hoạt động (một trong 4, 5 hoặc 6 phím) { while ((KLAV & 0x0F)! = 0x0F); // Quay lại cho đến khi nút được nhả trả về 4 + i; // (gửi giá trị 4,5 hoặc 6 theo i) } break; trường hợp 14: // Dòng đang hoạt động (một trong 1, 2 hoặc 3 phím) { while ((KLAV & 0x0F)! = 0x0F); // Quay lại cho đến khi nút được nhả trả về 1 + i; // (gửi 1, 2 hoặc 3 theo i) } break; } } } / ************************************************* ************************************************** ******* ************************************************** ************************************************** ******* KEYPAD ĐỌC BiTTi ************************************************** ************************************************** ******* ************************************************** ************************************************** ****** / / ************************************************* ************************************************** ******* ************************************************** ************************************************** ******* GIỚI THIỆU HOẠT ĐỘNG HOẠT ĐỘNG SỬ DỤNG TRONG MÀN HÌNH LCD ************************************************** ************************************************** ******* ************************************************** ************************************************** ****** / #define Xóa 1 // Xóa màn hình #define BasaDon 2 // con trỏ di chuyển đến góc trên bên trái #define SolaYaz 4 // địa chỉ được chỉ định bởi con trỏ sẽ giảm #define SagaYaz 6 // con trỏ chỉ định địa chỉ #define ImlecGizle 12 // Mở chỉ báo, làm cho con trỏ hiển thị #define ImlecYanSon 15 // Nhấp nháy con trỏ khối #define ImlecGeri 16 // Con trỏ sao lưu một ký tự #define SlideSaga 24 // Trượt một saga nhân vật trên màn hình #define SlideSolve 28 // Trượt hiển thị một ký tự sang bên trái #define DisplayClose 8 // Đóng màn hình (dữ liệu sẽ không bị xóa) #define FirstSection 128 // Địa chỉ bắt đầu dòng đầu tiên của màn hình LCD // (địa chỉ DDRAM) #define SecondaryFirst 192 // Địa chỉ đầu tiên của hàng thứ hai #define KarakUretAdres 64 // Đặt địa chỉ của trình tạo ký tự // (địa chỉ CGRAM) / * Chức năng lựa chọn trên màn hình LCD * / #define CiftSatir8Bit 56 // giao diện 8 bit, 2 dòng, 5 * 7 pixel #define CiftSatir4Bit 48 // giao diện 8 bit, 1 dòng, 5 * 7 pixel #define TekSatir8Bit 40 // giao diện 4 bit, 2 dòng, 5 * 7 pixel #define TekSatir4Bit 32 // giao diện 4 bit, 1 dòng, 5 * 7 pixel / * Xác định đầu vào LCD * / #define Dữ liệu P1 // Gán cổng cho các mục Dữ liệu LCD #define RS P0_0 // Đăng ký lựa chọn đầu vào RS = 0 lệnh, RS = 1 dữ liệu #define RW P0_1 // Đọc / ghi đầu vào Viết RW = 0, ghi RW = 1 #define VI P0_2 // Mục ủy quyền / * Chức năng trễ LCD * / void delay (dài int chắc chắn) { dài int i; cho (i = 1; i <= chắc chắn; i + +) {;} } / * Chức năng chờ sẵn sàng LCD * / void LcdHead () { Data = 0xFF; // Chuẩn bị nhận dữ liệu LCD RS = 0; // chế độ lệnh RW = 1; // Đọc trên màn hình LCD EN = 1; // cài đặt cạnh cắt cho phép Delay (200); // thời gian chờ đợi ngắn trong khi (Dữ liệu & 0x7F == 0x80); // kiểm tra bit bận. } / * Chức năng in lệnh LCD * / void Command (lệnh int) { lcdhaz là (); // Đợi cho đến khi màn hình LCD sẵn sàng RS = 0; // RS trong chế độ lệnh RW = 0; // Chế độ ghi RW WIDTH = 1; // cài đặt cạnh giảm đối với ủy quyền quy trình Data = lệnh; // Chuyển thông tin lệnh tới đầu vào dữ liệu LCD EN = 0; // cạnh giảm cho phép được cấp Delay (1000); // chậm trễ } / * Chức năng in ký tự đơn trên màn hình LCD * / void Dữ liệu (dữ liệu char, dài int nhanh) { lcdhaz là (); // Đợi cho đến khi màn hình LCD sẵn sàng RS = 1; // RS trong chế độ lệnh RW = 0; // Chế độ ghi RW WIDTH = 1; // xử lý cạnh nhàn rỗi để ủy quyền Data = dữ liệu; // Chuyển thông tin dữ liệu sang đầu vào dữ liệu LCD EN = 0; // cạnh giảm cho phép được cấp Chậm trễ (vận tốc); // Thời gian giữa hiển thị các ký tự trên màn hình } / * Chuỗi ký tự LCD (Chuỗi) Chức năng in * / void DataDizi (dữ liệu char [], dài int nhanh) { int i = 0; while (dữ liệu [i]! = 0) { lcdhaz là (); // Đợi cho đến khi màn hình LCD sẵn sàng RS = 1; // RS trong chế độ lệnh RW = 0; // Chế độ ghi RW WIDTH = 1; // xử lý cạnh nhàn rỗi để ủy quyền Data = dữ liệu [i]; // Chuyển thông tin dữ liệu sang đầu vào dữ liệu LCD EN = 0; // cạnh giảm cho phép được cấp i ++; // tăng mảng bằng 1 để nhận bit dữ liệu tiếp theo Chậm trễ (vận tốc); // thời gian giữa các ký tự xuất hiện } } / * Chức năng tạo cài đặt ban đầu cho LCD * / void LcdAc (void) { Command (ımlecgizl A); Command (ciftsatir8bit); Command (sagayaz); } / ************************************************* ************************************************** ****** ************************************************** ************************************************** ****** GIỚI THIỆU CÁC LỆNH SỬ DỤNG TRONG HÌNH LCD BiTTi ************************************************** ************************************************** ****** ************************************************** ************************************************** ***** / / ************************************************* ************************************************** ******* ************************************************** ************************************************** ******* ỨNG DỤNG LCD METIN ************************************************** ************************************************** ******* ************************************************** ************************************************** ****** / / * Chức năng Shift chỉ trên dòng * / void UstSatirSagaKay (char kayan_yazi [], long int kayma_hizi) { int i; Command (Delete); Command (birincisat là + 16); VeriDizi (kayan_yazi, 100); // Nhập văn bản để cuộn cho (i = 0; i & lt; 40; i ++) { Command (kaydirsag A); // Di chuyển màn hình một ký tự sang bên phải Chậm trễ (kayma_hiz a); } } / * Chỉ chức năng phía trên bên trái Shift * / void UstSatirSolaKay (char kayan_yazi [], long int kayma_hizi) { int i; Command (Delete); Command (birincisat là + 16); VeriDizi (kayan_yazi, 100); // Nhập văn bản để cuộn cho (i = 0; i & lt; 40; i ++) { Command (kaydirsol A); // Di chuyển màn hình một ký tự sang bên trái Chậm trễ (kayma_hiz a); } } / * Chỉ chức năng Shift bên phải dòng phụ * / void AltSatirSagaKay (char kayan_yazi [], long int kayma_hizi) { int i; Command (Delete); Command (ıkincisat là + 16); VeriDizi (kayan_yazi, 100); // Nhập văn bản để cuộn cho (i = 0; i & lt; 40; i ++) { Command (kaydirsag A); // Di chuyển màn hình một ký tự sang bên phải Chậm trễ (kayma_hiz a); } } / * Chương trình con Chỉ có chức năng Shift trái * / void SubSatShortKay (char slat_yazi [], dài int slat_hizi) { int i; Command (Delete); Command (ıkincisat là + 16); VeriDizi (kayan_yazi, 100); // Nhập văn bản để cuộn cho (i = 0; i & lt; 40; i ++) { Command (kaydirsol A); // Di chuyển màn hình một ký tự sang bên trái Chậm trễ (kayma_hiz a); } } / * Cả hai dòng chức năng Shift tương tự và phải * / void TumSatirlarSagaKay (char ust_satir [], char alt_satir [], long int kayma_hizi) { int i; Command (Delete); Command (birincisat là + 16); DataDisplay (ust_satir, 100); // Nhập văn bản hàng trên cùng để cuộn Command (ıkincisat là + 16); veridiana của (alt_sat +, 100); // Nhập văn bản dòng dưới cùng để cuộn cho (i = 0; i & lt; 40; i ++) { Command (kaydirsag A); Chậm trễ (kayma_hiz a); } } / * Cả hai dòng chức năng tương tự và trái Shift * / void TumSatirlarSolaKay (char ust_satir [], char alt_satir [], long int kayma_hizi) { int i; Command (Delete); Command (birincisat là + 16); DataDisplay (ust_satir, 100); // Nhập văn bản dòng trên cùng để được dịch chuyển Command (ıkincisat là + 16); veridiana của (alt_sat +, 100); // Nhập văn bản dòng dưới cùng để cuộn cho (i = 0; i & lt; 40; i ++) { Command (kaydirsol A); Chậm trễ (kayma_hiz a); } } / * Chức năng nhân vật đặc biệt Giới thiệu màn hình LCD * / void ozelKarTanit (void) { int x, y; Command (karakuretadres); // Địa chỉ CGRAM Command (karakuretadres); // Địa chỉ CGRAM Command (karakuretadres); // Địa chỉ CGRAM = 0 = 0 = 0 = 0 cho (x = 0; x & lt; 8; x ++) { cho (y = 0; y <8 font="" y=""> { Dữ liệu (ngôn ngữ Turkic là [x] [y], 10); } } Command (birincisat); // Địa chỉ DDRAM = 0 } void encrypted () ngắt 0 { / ************************************************* ************************************************** ********* ************************************************** ************************************************** ********* MỞ HÌNH DẠNG ************************************************** ************************************************** ********* ************************************************** ************************************************** ******** / int m = 0; int f = 0; int, bin, khuôn mặt, chúng, là một; long int input_say; int bắt đầu; int sayac; Command (Delete); VeriDizi ("HOSGELDINIZ", g); // Ghi vào màn hình LCD Chậm trễ (k); Command (Delete); DataDizi ("LUTFEN DOOR", g); // In phông chữ LCD Command (ıkincisat); // Công tắc dòng thứ hai của LCD DataDizi (& quot; ACMAK iCiN & quot;, g); Chậm trễ (k); Command (Delete); VeriDizi ("YÊU CẦU", g); Command (ıkincisat); VeriDizi ("4 HANELI", g); Chậm trễ (k); Command (Delete); VeriDizi (& quot; SiFREYi GiRiNiZ & quot;, g); Chậm trễ (k); Command (Delete); counter = 0; start = 1; // chỉ định số chữ số được yêu cầu cho một số // bắt đầu nhập mật khẩu trong khi (bắt đầu) { // Nhập khóa trên bàn phím klavyeok ngàn = (); // Đọc hàng ngàn chữ số từ bàn phím DataDizi ("*", g); klavyeok khuôn mặt = (); // đọc hàng trăm chữ số từ bàn phím veridiana (the "*", g); klavyeok trong số họ = (); // đọc khóa tại bàn phím veridiana (the "*", g); = Klavyeok của một on (); // đọc phím trên bàn phím veridiana (the "*", g); Command (Delete); girilen_sa a = (1000 * ngàn) + (100 * khuôn mặt) + (10 * chúng) + một trên; // nhận số lượng // Đã nhập mật khẩu VeriDizi ("LUTFEN", g); // In phông chữ LCD Command (ıkincisat); DataDizi ("WAITING", g); Chậm trễ (k); Command (Delete); VeriDizi (& quot; KIỂM SOÁT SiFRENIZ & quot;, g); Command (ıkincisat); VeriDizi (& quot; EDILYOR & quot;, g); Chậm trễ (k); Delay (5000); // Cung cấp độ trễ Command (Delete); truy cập ++; if (password == input_server) // kiểm tra số đã nhập { start = 0; // bắt đầu thoát khỏi chu kỳ mở cửa nếu mật khẩu chính xác f = 1; // Cung cấp không vào cửa mà không cần nhập mật khẩu chính xác m = 1; // để mở cửa và nhập phân vùng tương ứng DataDizi (& quot; DOGRU SiFRE & quot;, g); Command (ıkincisat); VeriDizi ("CỬA GATE", g); Chậm trễ (k); P3_0 = P3_0!; // Động cơ mở cửa bằng chân 1 Chậm trễ (10000); P3_0 = P3_0!; // động cơ dừng lại Chậm trễ (100.000); Command (Delete); } khác if (counter <= 3) // Cho phép người dùng nhập mật khẩu chính xác cho một bộ đếm cụ thể {DATADIZI ("ONLY SiFRE", g); Command (ıkincisat); VeriDizi ("RETURN EXPERIENCE", g); Chậm trễ (k); Command (Delete); } if (counter> = 4) // Cho phép người dùng nhập mật khẩu chính xác { start = 0; // ngăn không cho nhập hơn bốn mật khẩu Command (Delete); DataDizi (& quot; SiFREY & quot;, g); Command (ıkincisat); VeriDizi (& quot; BiLMiYORSUNUZ & quot;, g); Chậm trễ (k); Command (Delete); VeriDizi (& quot; iCERI & quot;, g); Command (ıkincisat); VeriDizi (& quot; GiREMEZSiNiZ & quot;, g); Chậm trễ (k); Command (Delete); } } / ************************************************* ************************************************** ****** ************************************************** ************************************************** ****** CỬA BÌA ************************************************** ************************************************** ****** ************************************************** ************************************************** ***** / if (m == 1) // cho phép không thấy dữ liệu nếu cửa không mở { girilen_sa = 0; // Đặt lại số chính xác trong khi mở cửa VeriDizi ("LUTFEN DOOR", g); // In phông chữ LCD Command (ıkincisat); // Công tắc dòng thứ hai của LCD DataDizi ("CLOSE", g); Chậm trễ (k); Command (Delete); // Vệ sinh màn hình LCD VeriDizi ("DOOR", g); Command (ıkincisat); VeriDizi ("ĐÓNG iCiN", g); Chậm trễ (k); Command (Delete); VeriDizi ("YÊU CẦU", g); Command (ıkincisat); VeriDizi ("4 HANELI", g); Chậm trễ (k); Command (Delete); VeriDizi (& quot; SiFREYi GiRiNiZ & quot;, g); Chậm trễ (k); Command (Delete); m = 0; } counter = 0, bắt đầu = 1; while (basla && f) { klavyeok ngàn = (); // Đọc hàng ngàn chữ số từ bàn phím DataDizi ("*", 1000); klavyeok khuôn mặt = (); // đọc hàng trăm chữ số từ bàn phím veridiana (the "*", 1000); klavyeok trong số họ = (); // đọc khóa tại bàn phím veridiana (the "*", 1000); = Klavyeok của một on (); // đọc một trong các phím từ bàn phím veridiana (the "*", 1000); Command (Delete); girilen_sa a = (1000 * ngàn) + (100 * khuôn mặt) + (10 * chúng) + một trên; // nhận số lượng VeriDizi ("LUTFEN", g); Command (ıkincisat); DataDizi ("WAITING", g); Chậm trễ (k); Command (Delete); VeriDizi (& quot; KIỂM SOÁT SiFRENIZ & quot;, g); Command (ıkincisat); VeriDizi (& quot; EDILYOR & quot;, g); Chậm trễ (k); Delay (5000); Command (Delete); truy cập ++; if (password == input_server) { start = 0; // bật cửa để thoát sau khi đóng cửa f = 0; // bật cửa để thoát sau khi đóng cửa DataDizi (& quot; DOGRU SiFRE & quot;, g); Command (ıkincisat); VeriDizi ("DOOR CLOSE", g); Chậm trễ (k); P3_1 = P3_1!; // đang quay về hướng đóng động cơ Chậm trễ (10000); P3_1 = P3_1!; // động cơ dừng lại Chậm trễ (100.000); Command (Delete); } khác if (counter <= 3) {DataDisci ("CHỈ SiFRE", g); Command (ıkincisat); VeriDizi ("RETURN EXPERIENCE", g); Chậm trễ (k); Command (Delete); } if (counter> = 4) // Cho phép người dùng nhập mật khẩu chính xác { start = 0; Command (Delete); VeriDizi ("DOOR COVER", g); Command (ıkincisat); DataDizi ("POI", g); Chậm trễ (k); Command (Delete); VeriDizi (& quot; GOREVLi KiSiYi & quot;, g); Command (ıkincisat); VeriDizi ("ÇAGIRINIZ", g); Chậm trễ (k); Command (Delete); f = 0; } } / ************************************************* ************************************************** ******* ************************************************** ************************************************** ******* CỬA BÌA ************************************************** ************************************************** ******* ************************************************** ************************************************** ****** / DataDizi ("GOODLER", g * 2); Chậm trễ (k); Command (Delete); } void chính (void) { EX0 = 1; // ngắt 0 hoạt động E = 1; // tất cả các lần cắt đang hoạt động P3_0 = 0; // giá trị ban đầu của động cơ kết thúc đặt lại P3_1 = 0; // giá trị ban đầu của động cơ kết thúc đặt lại lcdac (); / * Quá trình mở màn hình LCD * / ozelkartanit (); // Tải ký tự tiếng Thổ Nhĩ Kỳ trên LCD while (1) { Command (Delete); // Vệ sinh màn hình LCD VeriDizi ("KOCAELI", g); Command (ıkincisat); // Công tắc dòng thứ hai của LCD VeriDizi ("ĐẠI HỌC", g); Chậm trễ (k); Command (Delete); // Vệ sinh màn hình LCD VeriDizi (& quot; ĐIỆN TỬ & quot ;, g); Command (ıkincisat); // Công tắc dòng thứ hai của LCD DataDizi (& quot; OGRETMENLiGi & quot;, g); Chậm trễ (k); Command (Delete); // Vệ sinh màn hình LCD VeriDizi ("Fatih", g); Command (ıkincisat); // Công tắc dòng thứ hai của LCD VeriDizi (& quot; BAYRAMCAVUS & quot;, g); Chậm trễ (k); Command (Delete); DataDizi (& quot; 010303032 & quot;, g); Command (ıkincisat); VeriDizi (& quot; Elo.4 & quot;, g); Chậm trễ (k); Command (Delete); VeriDizi ("DỰ ÁN", g); Command (ıkincisat); VeriDizi ("ADI", g); Chậm trễ (k); Command (Delete); VeriDizi ("Cửa được mã hóa", g); Command (ıkincisat); VeriDizi ("Khóa", g); Chậm trễ (k); Command (Delete); } }8>
Dự án được chuẩn bị bởi: Fatih Bayram Sergeant Projenin Files AT89C51 Lcd hiển thị khóa cửa được mã hóa
Tải xuống danh sách LINK (ở định dạng TXT) link-3594.zip mật khẩu-pass: 320volt.com Cảm ơn bạn
Post a Comment