#freeze 閲覧総計:&counter(); (本日:&counter(today); 昨日:&counter(yesterday);)~ *スイッチ入力(16F1827 XC8) [#n8347044] 今回はスイッチ動作の確認を行った。 スイッチ(RB4)を押している間だけLED(RA1)が点灯するプログラム。 【ポイント】 ・スイッチ(RB4)のプルアップは、16F1827のPORTBは内部ウィークプルアップ機能 を持っているので、これを利用した。 OPTION_REGbits.nWPUEN = 0; // 0:PORTB内部プルアップ利用に設定 WPUBbits.WPUB4 = 1; // RB4をウィークプルアップ 2014/1/1 |&attachref(TS3V0004.JPG,zoom,200x300,button){新しい写真添付};|&attachref(1827switchのプログラム画面.jpg,zoom,200x250,button){新しい写真添付};| /*スイッチを押してる間だけLEDが点灯する * PIC16F1827 * XC8 v1.20 * LED:RA1,RA2 * スイッチ:RB4 */ #include <xc.h> #pragma config FOSC = INTOSC, WDTE = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF #pragma config PLLEN = OFF, STVREN = OFF, LVP = OFF int main(void) { //PICの初期設定 PORTA = 0b00000000; //PORTAの中身をきれいにする PORTB = 0b00000000; //PORTBの中身をきれいにする TRISA = 0b00000000; //PORTA全てを0:出力に設定 TRISB = 0b00010000; //PORTBはRB4を1:入力に他を全て0:出力に設定 OSCCON = 0b01110000; //PLL:OFF, 内部クロック8MHzで駆動 OPTION_REGbits.nWPUEN = 0; // 0:PORTB内部プルアップ利用に設定 WPUBbits.WPUB4 = 1; // RB4をウィークプルアップ ANSELA = 0b00000000; //RA4(AN4)-RA0(AN0)は全て0:デジタルI/Oとする ANSELB = 0b00000000; //RB7(AN6)-RB1(AN11)は全て0:デジタルI/Oとする //メイン処理 LATAbits.LATA2 = 1; //RA2:パワーオンを示すLED点灯 while(1) { if(PORTBbits.RB4 == 0) { //RB4のswitch 0:downの時 LATAbits.LATA1 = 1; //RA1 LED ON } else { //RB4のswitch 1:upの時 LATAbits.LATA1 = 0; //RA1 LED OFF } } } ★この情報は役に立ちましたか? #vote(はい[6],普通[0],いいえ[0]) #comment_nospam