KeyPad

2016. 2. 8. 12:44
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


2-Wire Keypad Interface Using a 555 Timer - Embedded Lab.pdf


2Stepping control.rar


PDF를 받으면 안에 링크가 있는데 그곳에서도 두번째줄의 rar파일을 받을 수 있습니다.

Chip : PIC16F628A

Code : MikroC pro for PIC

Parts : 16x2 LCD, KeyPad(4x3)



▼전체 회로도 입니다.



▼주파수를 계산해서 어느 좌표의 키패드가 눌렸는지 감지합니다.

그러기 위해서는 주파수 공식을 알아야 겠죠?

뭔가 어려워 보이지만 중2정도의 수학실력만 있다면 가능합니다.

아래 공식을 보여드리겠습니다.



R1과 C가 fix되있으면, R2에 따라서 Frequency가 달라지게 됩니다.

이 값을 갖고 PIC가 KeyPad위치를 찾아가게 됩니다.

팁을 드리자면 허용오차가 작은 Resistor, Capacitor를 사용해야 좋습니다.



/*

  Project Name: 2 Wire Keypad using 555

  * Copyright:

     (c) Rajendra Bhatt, 2011.

 * Test configuration:

     MCU:             PIC16F628A

     Oscillator:      XT, 4.0 MHz

  */


// LCD module connections

sbit LCD_RS at RA0_bit;

sbit LCD_EN at RA1_bit;

sbit LCD_D4 at RB4_bit;

sbit LCD_D5 at RB5_bit;

sbit LCD_D6 at RB6_bit;

sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISA0_bit;

sbit LCD_EN_Direction at TRISA1_bit;

sbit LCD_D4_Direction at TRISB4_bit;

sbit LCD_D5_Direction at TRISB5_bit;

sbit LCD_D6_Direction at TRISB6_bit;

sbit LCD_D7_Direction at TRISB7_bit;

// End LCD module connections


sbit Pressed at RA2_bit;


// Define Messages

 char message1[] = "Key Pressed =  ";

 char numbers[] = "0123456789*#";

 unsigned short count, Released, Num;


 void interrupt(){

  Num ++;           // Interrupt causes Num to be incremented by 1

  INTCON.T0IF = 0;  // Bit T0IF is cleared so that the interrupt could reoccur

 }

 void debounce(){

  Delay_ms(25);

 }

 

 void main() {

  CMCON  |= 7;                       // Disable Comparators

  TRISB = 0b00000000;          // set direction to be output

  TRISA = 0b00110100;

  Lcd_Init();

  Lcd_Cmd(_LCD_CLEAR);               // Clear display

  Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off

  Lcd_Out(1,1,message1);             // Write message1 in 1st row

  OPTION_REG = 0b00101000; // TOCS=1 for Counter mode, PSA=0 for 1:2 prescaler

  Released = 1;

  do {

    if (Pressed && Released) {

    debounce();

    Num = 0;

    Released = 0;

    INTCON = 0xA0;  // Enable interrupt TMR0 and Global Interrupts

    TMR0=0;

    Delay_ms(100);  // Delay 100 mSec

    INTCON = 0x00;  // Disable interrupt TMR0

    Lcd_Chr(1,14,numbers[Num]);


    }

    

    if(!Pressed) {

    debounce();

    Released = 1;

    }

    

  } while(1);

 }

Posted by ElectricShock
:
BLOG main image
잡동사니들(지극히 개인취향인...) (다른글에도 댓글 부탁해요♥) You May Leave English Messages on GuestBook. by ElectricShock

공지사항

카테고리

분류 전체보기 (782)
Programming(=프로그래밍) (3)
MiDi (2)
Animation (4)
Blender (3D Graphic Program.. (10)
Blendtuts.com (Series) (1)
Blender 기초 팁들 (2)
Processing (디지털미디어과) (2)
Music (1)
Books in the world (0)
Communication(CAN, UART, et.. (12)
MCU Examples (PIC 기반) (7)
Transistor (1)
Mikro C Pro (11)
Mikro Pascal (1)
Proton IDE (0)
Robot (0)
Swift 3D (1)
Dummies Series (1)
All about Hacking (0)
제2 외국어 (1)
PIC 해외서적들 (3)
AVR (25)
PIC (MikroC) (MPLAB) (4)
Assembly (2)
ARM (3)
Arduino (26)
PSpice (1)
Proteus ISIS (14)
CodeVision (2)
FPGA (15)
MPLAB (24)
PCB (the Procedure) (15)
3D Printer (5)
PICKIT3 (6)
Matlab (11)
RaspBerry PI (15)
BeagleBone (1)
Android Studio (17)
졸업작품 (172)
Korea History (0)
Issue(사회) (73)
Multimeter 리뷰 (1)
Oscilloscope (1)
A (34)
B (19)
J (6)
C (32)
P (12)
T (37)
H (12)
I (12)
M (44)
R (5)
E (5)
F (2)
D (9)
O (2)
L (7)
S (9)
W (2)
V (6)
G (14)
Visual C++ or Visual Studio (2)
Android App Development (0)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백