Ma trận phím 4x4 hiển thị LCD Arduino
Hướng dẫn sử dụng với Arduino: Download thư viện Keypad.h Code cho bàn phím ma trận 4x4: //code start
/*******************************************************
* name: Password Lock
* note: you need to add the Keypad folder under test experiment\code\Library to the Arduino libraries folder
* function: when you press one button, you can see the keyvalue print on the serial monitor
* Keypad Uno
* X1 / 8 8
* X2 / 7 9
* X3 / 6 10
* X4 / 5 11
* Y1 / 4 4
* Y2 / 3 5
* Y3 / 2 6
* Y4 / 1 7
*
*********************************************************/
#include Hình ảnh sản phẩmSản phẩm cùng danh mụcThống kê
Bài viết Bài 15: Lập trình quét phím matrix 4x4 hiển thị lên LCD 16x2 Chào các bạn, ở các bài trước chúng ta đã tìm hiểu về quét nút nhấn đơn thì hôm nay mình sẽ hướng dẫn các bạn lập trình với matrix nút nhấn 4x4 - có thể mở rộng lên tùy thích. Quét ma trận phím hơi phức tạp hơn so với kiểm tra logic của chân MCU như ở các bài trước cụ thể nguyên lý như sau: Khi ta cấp logic 0 ra all hàng để chờ sự kiện nút được nhấn, nếu nút được nhấn thì ta mới cấp lần lượt mức logic 0 ra từng hàng (VD cấp cho hàng 1 logic 0 thì các hàng khác phải lên login 1) sau đó kiểm tra cột xem nó ở cột thứ bao nhiêu, nếu trùng cột và hàng cùng logic 0 thì ta sẽ xác định được vị trí nút được nhấn. 1. Sơ đồ phần cứng ma trận nút nhấn 4x4: 2. Code lập trình: Áp dụng cho mọi vi điều khiển, khai báo lại để tương thích với trình biên dịch unsigned char check_but(){ //Kiểm tra nút nhấn 3. Mạch mô phỏng trên proteus: ** Các bạn tải code đầy đủ về trong file đính kèm............ Chúc các bạn học tốt!Tải về đính kèm:
Bấm vào đây để Đăng nhập hoặc Đăng ký! ĐỀ:Viết chương trình nhập pass từ bàn phím Keypad 4x3 - Pass là số có 4 chữ số. - Nhấn # nếu muốn kiểm tra pass có đúng không? Đúng thì hiển thị “RIGHT!” Sai thì hiển thị “WRONG!” #include #include #include #define led A3 #define buzzer A4 char password[4]; char pass,pass1[4]; int i; char key=0; const byte hang=4; const byte cot=3; byte pin_hang[4]={10,11,12,13}; byte pin_cot[3]={7,8,9}; byte ma_banphim[4][3]={{'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'}}; Keypad AKey=Keypad(makeKeymap(ma_banphim),pin_hang,pin_cot,hang,cot); LiquidCrystal lcd(5,4,3,2,1,0); void setup() { lcd.begin(16,2); pinMode(led,OUTPUT); pinMode(buzzer,OUTPUT); pinMode(1,OUTPUT); lcd.print("Electronic"); lcd.setCursor(0,1); lcd.print("Keypad Lock"); delay(2000); lcd.clear(); lcd.print("Enter ur Passkey:"); lcd.setCursor(0,1); for(int j=0;j<4;j++) EEPROM.write(j,j+74); for(int j=0;j<4;j++) pass[j]=EEPROM.read(j); } void loop() { AKey=AKeypad.getKey(); if(key=='*123#') change(); if(key){ password[i++]=key; lcd.print(key); beep(); } if(i==4) { delay(200); for(int j=0;j<4;j++) pass[j]=EEPROM.read(j); if(!(strncmp(password,pass,4))){ digitalWrite(1,HIGH); digitalWrite(led,HIGH); beep(); lcd.clear(); lcd.print("Pass Accepted"); delay(2000); lcd.setCursor(0,1); lcd.print("*123#.Change Passkey"; delay(2000); lcd.clear(); lcd.print("Enter Passkey"); lcd.setCursor(0,1); i=0: digitalWrite(led,LOW); digitalWrite(1,LOW); } else { digitalWrite(buzzer,HIGH); lcd.clear(); lcd.print("Access Denied..."); lcd.setCursor(0,1); lcd.print("*123#.Change Passkey"); delay(2000); lcd.clear(); lcd.print("Enter Passkey"); lcd.setCursor(0,1); i=0; digitalWrite(buzzer,LOW);}} } void change() { int j=0; lcd.clear(); lcd.print("UR Current Passkey"); lcd.setCursor(0,1); while(j<4) { char SKey=AKeypad.getKey(); if(Skey) { pass1[j++]=SKey; lcd.print(SKey); beep(); } SKey=0; } delay(500); if((strncmp(pass1,pass,4))) { lcd.clear(); lcd.print("Wrong Passkey"); lcd.setCursor(0,1); lcd.print("Better Luck Again"); delay(1000); } else { j=0 lcd.clear(); lcd.print("Enter New Passkey"); lcd.setCursor(0,1); while(j<4) { char Skey=AKeypad.getKey(); if(SKey) { pass[j]=SKey; lcd.print(Skey); EEPROM.write(j,SKey); j++; beep(); } } lcd.print("Done....."); delay(1000); } lcd.clear(); lcd.print("Enter Ur Passkey"); lcd.setCursor(0,1); AKey=0; } void beep() { digitalWrite(buzzer,HIGH); delay(200); digitalWrite(buzzer,LOW); } Xem giúp em code bị lỗi gì ạ thanks thank you for comming and sharing with me! Bạn sai ở chỗ hàm gửi ký tự, code bạn viết là gửi một ký tự chứ không phải chuỗi, trong trình biên dịch nó hiểu dấu nháy kép là gửi chuỗi còn nháy đơn là gửi một ký tự ascii, bạn sửa lại là được. Viết bình luận xem hộ em cái code sao nó cứ báo lỗi"lệnh"vậy #include #include sbit RS=P3^0; sbit RW=P3^1; sbit EN=P3^2; sbit BF=P2^7; void delay(int time){ while(time--); } void ban(){ P2=0xff; RS=0; RW=1; while(BF){ delay(100); EN=1; delay(100); EN=0; } } void dulieu(unsigned char a){ ban(); RS=1; RW=0; P2=a; delay(100); EN=0; delay(100); EN=1; } void kitu(unsigned char x){ ban(); RS=0; RW=0; P2=x; delay(100); EN=0; delay(100); EN=1; } void khoitao() { lenh(0x38);//2 dong va ma tran 5x7 lenh(0x0e);//bat man hinh, bat con tro lenh(0x01);//xoa man hinh } void chuoi(unsigned char *s){ int i,l; l=strlen(s); for(i=0;i delay(500); } } void main(){ K phải đâu nha, viết trên keilc cho 8051 void scan_row(unsigned char r){ //Quét hàng Dòng này nếu viết trên arduino thì phải làm sao vậy A Thái? MCU là tên tiếng anh viết tắt của vi điều khiển. Trở kéo là để tạo logic khi chân đó bị hở tức ở trạng thái cao trở và không có tác dụng chống rung phím. Vì sao lại dùng trở 10K là vì với điện trở trên khi ta để hở chân mcu và một đầu trở nối lên vcc ta sẽ được logic cao, khi ta nối chân mcu xuống mass ta sẽ được mức 0 điện trở lúc này có nhiệm vụ phân áp. điện trở càng cao thì dòng vào tạo logic 0 càng nhỏ, vd nếu dùng trở 1K thì để kéo chân này xuống 0 sẽ cao hơn là dùng trở 4,7K với 10K, nếu bạn chọn điện trở quá cao thì nó sẽ trở về trạng thái cao trở như ban đầu... hj anh ơi ! chân MCU LÀ gì ạ ?anh cho em hỏi luôn một câu .dùng điện trở treo thường là chông rung phím đúng ko ạ ,nhưng lám sao mà mình lại lấy điện trở treo 10k Do mức 1 của chân MCU thường là dùng trở câu lên vcc cho lên người ta tận dụng luôn trở câu này tạo logic 1 và dùng mức 0 để quét phím, xuất led.... dòng ra của mức 0 cao hơn dòng của mức 1 lên nếu mắc led sẽ sáng hơn... anh oi cho em hoi ,tai sao phuong phap wet phim lại lấy mức logic là 0 ,mà không ấy là 1 ạ? Trang 1/1: 1 Bài viết cùng chuyên mục
Chào mừng vantusaonho đã tham gia câu lạc bộ sáng tạo! Hôm nay là sinh nhật của caubekuibap, phuanbb, anhtribk, hoangleminhnt, phungvovan, anhtribka, bapthanhtuan, TRANANHDUNG, nguoicodoc_bn, vannam166, toson_fee, Bamboo, Trieucuong22, tinxabeng, Hoang_Bi, 123465_78913, electronichung7691, ← Gửi tin nhắn chúc mừng Múi giờ: UTC+07:00 - Asia/Ho Chi Minh ***** IP của bạn: 131.186.25.160 ***** Status: Cache Update thành công! |