PIC Lesson: Push Button


Bagaimana untuk PIC membaca signal dari switch atau push button?

Langkah pertama anda perlu tahu cara sambungannya. Untuk di sambungkan kepada Microcontroller PIC, anda boleh memilih untuk membuat ‘active high’ atau ‘active low’. Sambungannya seperti di bawah.

Bagi active low, dalam keadaan biasa port PIC adalah high. Apabila suis di tekan, port PIC akan menjadi low.

Manakala bagi active high, dalam keadaan biasa port PIC adalah low. Apabila suis di tekan, port PIC akan menjadi high.

Saya membuat sample program dengan empat active low switch dan lapan active high LED.

Di bawah adalah videonya

PIC Source Code

/*
Project: Push Button Lesson
Programmer: Shahrulnizam Mat Rejab
PIC (Crystal Frequency):
PIC16F877A (20MHz), PIC16F887 (20MHz), PIC16F1939 (Internal 32MHz) 
PIC18F4520 (10MHz), PIC18F4550 (10MHz), PIC18F46K22 (Internal 16MHz)
Compiler: HI-TECH C for PIC10/12/16 V9.83, PIC18 V9.80
Last Modified: 8 November 2013
Website: http://shahrulnizam.com
*/

#define	PUSH_BUTTON
#if defined (_16F877A) || (_16F887)
	#define LED			PORTD
#elif defined (_16F1939) || (_18F4520) || (_18F4550) || (_18F46K22)
	#define LED			LATD
#endif

#include "LibraryHardware.h"

void setup()
{
initialize();
TRISA=0b00000000;
TRISB=0b00000000;
TRISC=0b00000000;
TRISD=0b00000000;
TRISE=0b00000000;
BUZZER=1;
}

void loop()
{
char button;
button=read_button();
if(button>0) delay(200);
switch(button){
	case 1:{LED=LED+1;break;}
	case 2:{LED=LED-1;break;}
	case 4:{LED=LED>>1;break;}
	case 8:{LED=LED<<1;break;}
	default:{LED=LED;break;}}
}

22 responses to “PIC Lesson: Push Button”

  1. leh x tnjk mcm mane nk gune software protel.., klau leh bg exp. strt dr mule desgn cct smpi auroute pcb…library pun x tau nk cri mane(kt tenet error je)….

  2. slm.. bro shahrul… sifu PIC..
    kalo di remove kan SUIs di kedua2 keadaan active high & active low…
    masih terjadi x keadaan atau situasi active HIGH & active low …
    apa beza active high dgn PULL up resistor
    dan apa beza active low dan pull down resistor…?
    ada perbezaan x?.. atau sama jer?

  3. Luqman,
    Suis dan resistor tersebut seperti voltage divider. Resistance suis ketika contact adalah zero dan ketika non-contact adalah infinity. Jadi, ia akan supply voltage 0V atau 5V kepada PIC, iaitu signal LOW atau HIGH.

    Term active low, saya define sebagai memberi signal LOW apabila suis diaktifkan. Namun suis juga ada jenis iaitu Normally Open (NO) atau Normally Close (NC). Litar di atas saya gunakan NO.

    Term pull-down resistor pula adalah resistor yang disambungkan ke 0V. Oleh itu, litar Active High diatas mempunyai pull-down resistor.

  4. pnah pkai softwere MPLAB x? ape kekurangan dan kebaikan die bbanding softwere lain ek??sy kne buat rbot dan report kne buat bahagian programming n control system mggunakan autonmous board yg dkuarkan oleh cytron…leh tlong ceritakan ckit x??n die mlibatkan pic juga…sy xbrapa pham sngat

  5. miftahul, memang sy gunakan software MPLAB. Kelebihannya boleh menggunakan C dan boleh program terus dari MPLAB tanpa menggunakan software lain.
    Untuk program board Cytron, perlu lihat apa interface dan rujuk PIC Lesson dlm blog ini.

  6. untk cmpile file dr assebly ke hex dcimal tu mmg leh pkai win pic je ke??klo yg len bleh pkai x??dan ade nota mngenai kod2 assebly yg digunakan untk pengaturcaraan dlm mplab x? cntoh
    BSF
    BCF
    BTFSS
    PWM n so more…sgktan2 smua ni sy xtaw die sgktan dr perktaan ape..dan mcm mna pnggunaannya…tlg ea cik shahrulnizam

  7. miftahul, mplab boleh compile assembly dan juga C. Sy buat contoh2 dlm C sebab lebih mudah berbanding assembly. Dh lama saya tinggalkan coding assembly.

  8. sy nk tnye encik,blh x klau sy nk gnkan program switch push button ni pda penutup tangki minyak kereta untuk bg isyart pd LCD yg pintu itu dh terbuka?

  9. arinah, boleh. Letakkan limit switch pd penutup tangki untuk mengesan penutup tersebut terbuka atau tertutup. Kemudian boleh display pd LCD.

  10. salam, maaf la klu post ni lame sgt tp nk tny sket
    klu pakai complier xc16, mcm mana nak declare 4 input port yg berlainan termasuk led?

  11. ok, dh dpt…
    skang ni klu nk letak input dlm switch statement pula mcm mana?
    saya ada 4 port berlainan…
    RA7, RE0, RE1 n RG12 ikut kehendak tenaga pengajar.
    klu port yg same bleh declare skali tp dlm keadaan camni yg kena selesaikan…

Leave a Reply to Shahrul Cancel reply

Your email address will not be published. Required fields are marked *