Showing posts with label Keypad. Show all posts
Showing posts with label Keypad. Show all posts

Monday, May 25, 2015

Khóa cửa điện tử mở cửa bằng password sử dụng vi điều khiển pic 16f887

Posted by dientudieukhien at 10:39 AM 0 Comments
Thật thú vị với project khóa cửa điện tử, bảo vệ bằng password. Ở project này mình sử dụng một vi điều khiển pic 16f887, một LCD 16x2, một motor bước để thiết kế một hệ thống đóng-mở cửa, hệ thống này được cài đặt password bảo vệ. Sau đây là sơ đồ nguyên lý.
Hệ thống khóa cửa điện tử, bảo vệ bằng password
Hệ thống khóa cửa điện tử, bảo vệ bằng password

  • Mô tả hoạt động: Khi hệ thống khởi động, pass mặc định là 12345, sau đó bạn "press *" để đổi pass, bạn nhập pass mới vào (4 ký tự), nhấn # để hoàn tất việc đổi pass mới. Lần tiếp theo bạn muốn mở cửa thì nhập lại pass, nếu nhập sai pass thì hệ thống hiển thị thông báo và bạn phải nhập lại.
  • Video sau giúp bạn theo dõi quá trình đổi pass và thao tác đóng, mở cửa:

|| Tải project (Protues, code C)
Read More »

Wednesday, August 27, 2014

Pic 16f887 giao tiếp bàn phím keypad 4x4

Posted by dientudieukhien at 7:39 AM 0 Comments

Pic 16f887 giao tiếp bàn phím keypad 4x4

Một trong nhiều ứng dụng mà vi điều khiển có thể thực hiện là giao tiếp với một bàn phím để người sử dụng có thể nhập liệu một cách dễ dàng. Sau đây, dientudieukhien.net chia sẽ cùng bạn một bài học lập trình về giao tiếp bàn phím với pic16f887, ngôn ngữ lập trình C, trình biên dịch Mikroc.

Thư viện hàm dùng trong bài này là:
  • Keypad_Init
  • Keypad_Key_Press
  • Keypad_Key_Click

Sau đây là một số khái niệm, định nghĩa và ví dụ cho các hàm trên:
Keypad_Init
Prototype
void Keypad_Init(void);
Returns
Nothing.
Description
Initializes port for working with keypad.
Requires
Global variable :
  • keypadPort - Keypad port
must be defined before using this function.
Example
// Keypad module connections
char keypadPort at PORTD;
// End of keypad module connections
...
Keypad_Init();


Keypad_Key_Press
Prototype
char Keypad_Key_Press(void);
Returns
The code of a pressed key (1..16).
If no key is pressed, returns 0.
Description
Reads the key from keypad when key gets pressed.
Requires
Port needs to be initialized for working with the Keypad library, see Keypad_Init.
Example
char kp;
...
kp = Keypad_Key_Press();


Keypad_Key_Click
Prototype
char Keypad_Key_Click(void);
Returns
The code of a clicked key (1..16).
If no key is clicked, returns 0.
Description
Call to Keypad_Key_Click is a blocking call: the function waits until some key is pressed and released. When released, the function returns 1 to 16, depending on the key. If more than one key is pressed simultaneously the function will wait until all pressed keys are released. After that the function will return the code of the first pressed key.
Requires
Port needs to be initialized for working with the Keypad library, see Keypad_Init.
Example
char kp;
...
kp = Keypad_Key_Click();

Sơ đồ nguyên lý của project;
4x4 keypad - ảnh: mikroe.com
Code:

/*share by dientudieukhien.net
  Source: mikroe.com
  Mikroc pro*/
unsigned short kp, cnt, oldstate = 0;
char txt[6];

// Keypad module connections
char  keypadPort at PORTD;
// End Keypad module connections

// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections

void main() {
  cnt = 0;                                 // Reset counter
  Keypad_Init();                           // Initialize Keypad                             
  ANSEL  = 0;                              // Configure AN pins as digital I/O
  ANSELH = 0;
  Lcd_Init();                              // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);                     // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);                // Cursor off
  Lcd_Out(1, 1, "1");
  Lcd_Out(1, 1, "Key  :");                 // Write message text on LCD
  Lcd_Out(2, 1, "Times:");

  do {
    kp = 0;                                // Reset key code variable

    // Wait for key to be pressed and released
    do
      // kp = Keypad_Key_Press();          // Store key code in kp variable
      kp = Keypad_Key_Click();             // Store key code in kp variable
    while (!kp);
   // Prepare value for output, transform key to it's ASCII value
    switch (kp) {
      //case 10: kp = 42; break;  // '*'   // Uncomment this block for keypad4x3
      //case 11: kp = 48; break;  // '0'  
      //case 12: kp = 35; break;  // '#'
      //default: kp += 48;

      case  1: kp = 49; break; // 1        // Uncomment this block for keypad4x4
      case  2: kp = 50; break; // 2
      case  3: kp = 51; break; // 3
      case  4: kp = 65; break; // A
      case  5: kp = 52; break; // 4
      case  6: kp = 53; break; // 5
      case  7: kp = 54; break; // 6
      case  8: kp = 66; break; // B       
      case  9: kp = 55; break; // 7
      case 10: kp = 56; break; // 8
      case 11: kp = 57; break; // 9
      case 12: kp = 67; break; // C
      case 13: kp = 42; break; // *
      case 14: kp = 48; break; // 0
      case 15: kp = 35; break; // #
      case 16: kp = 68; break; // D

    }

    if (kp != oldstate) {                  // Pressed key differs from previous
      cnt = 1;
      oldstate = kp;
      }
    else {                                 // Pressed key is same as previous
      cnt++;
      }

    Lcd_Chr(1, 10, kp);                    // Print key ASCII value on LCD

    if (cnt == 255) {                      // If counter varialble overflow
      cnt = 0;
      Lcd_Out(2, 10, "   ");
      }

    WordToStr(cnt, txt);                   // Transform counter value to string
    Lcd_Out(2, 10, txt);                   // Display counter value on LCD
  } while (1);
}
Read More »

Friday, July 25, 2014

Khóa điện tử AT89C2051

Posted by dientudieukhien at 1:31 PM 0 Comments
electronic Lock 
Dientudieukhien.net chia sẽ cùng bạn project Khóa điện tử được lập trình trên AT89c2051, sử dụng bàn phím 3x4 để giao tiếp.










* Sơ đồ nguyên lý:
Sơ đồ nguyên lý electronic lock
* Giải thích ngắn gọn hoạt động của project
Nhìn vào sơ đồ nguyên lý trên ta thấy các cụm chính sau: Vi điều khiển 89c2051, một bàn phím 3x4 để giao tiếp với CPU, một eeproom 24C02 để lưu mật mã, 1 relay để đóng - mở cửa.

* Code cho 89c2051
Ở đây có 2 code: code1 sử dụng cho mật khẩu có độ dai 4 ký tự, code2 sử dụng cho mật khẩu có độ dài 8 ký tự.
|| Tải code1 (hex)
|| Tải code2 (hex)
|| Tải code c (.bas)
|| Tải hướng dẫn sử dụng
|| Tải CPB (pdf)


nguồn: avr.4mg.com
Read More »

Monday, December 23, 2013

Lập trình bảng tinh (calculator)

Posted by dientudieukhien at 2:09 PM 0 Comments
Tên project: Scientific calculator
CMU: ATMEGA16
Ngôn ngữ: AVR C

ảnh:


Video:




Read More »

    tab

back to top