16F18326で「スイッチONするとLED点灯」 | ||||||
18F18326でスイッチONするとLEDを点灯させてみます。 スイッチON/OFFの判定方法 基本プルアップして使用するので RC3 に電圧をかけて RC3の電圧が0になったらスイッチがONになったことを判断します RC3をプルアップします
スイッチONを検知してLEDを点灯するプログラム if を使用してスイッチがONになっているか判定します
プログラム /* * 16F18326 LED点灯 * * スイッチを押している間LED点灯 * * * クロックは内部クロック使用 * ------------------------------------------------------- * 16F18326接続 * 1pin VDD +5V * 2pin RA5 * 3pin RA4 * 4pin RA3 * 5pin RC5 * 6pin RC4 * 7pin RC3 スイッチ プルアップする * 8pin RC2 LED * 9pin RC1 * 10pin RC2 * 11pin RA2 * 12pin RA1 * 13pin RA0 * 14pin GND * ------------------------------------------------------- */ #include <stdio.h> #include <stdlib.h> #include <xc.h> // CONFIG1 #pragma config FEXTOSC = OFF //*** FEXTOSC External Oscillator mode Selection bits (Oscillator not enabled) #pragma config RSTOSC = HFINT32 //*** Power-up default value for COSC bits (HFINTOSC with 2x PLL (32MHz)) #pragma config CLKOUTEN = OFF //クロック出力を無効とし、RA4ピンとして使用する // Clock Out Enable bit (CLKOUT function is disabled; I/O or oscillator function on OSC2) #pragma config CSWEN = ON //*** Clock Switch Enable bit (Writing to NOSC and NDIV is allowed) #pragma config FCMEN = OFF //外部クロックを監視しない // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled) // CONFIG2 #pragma config MCLRE = OFF //MCLRピンをRA3として使用する // Master Clear Enable bit (MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up under control of port pin's WPU control bit.) #pragma config PWRTE = ON //パワーアップタイマーを有効にする // Power-up Timer Enable bit (PWRT enabled) #pragma config WDTE = OFF //ウォッチドックタイマー無効 // Watchdog Timer Enable bits (WDT disabled; SWDTEN is ignored) #pragma config LPBOREN = OFF //LPBOR = OFF //低消費電力ブラウンアウトリセット無効 // Low-power BOR enable bit (ULPBOR disabled) #pragma config BOREN = ON //ブラウンアウトリセットを有効にする // Brown-out Reset Enable bits (Brown-out Reset enabled, SBOREN bit ignored) #pragma config BORV = HIGH //ブラウンアウトリセット電圧を高(?V)に設定 // Brown-out Reset Voltage selection bit (Brown-out voltage (Vbor) set to 2.45V) #pragma config PPS1WAY = OFF //ロック解除シーケンスで何度でもPPSLOCKをセット/クリアできる // PPSLOCK bit One-Way Set Enable bit (The PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle) #pragma config STVREN = ON //スタックオーバーフローリセットを行う // Stack Overflow/Underflow Reset Enable bit (Stack Overflow or Underflow will cause a Reset) #pragma config DEBUG = OFF //*** Debugger enable bit (Background debugger disabled) // CONFIG3 #pragma config WRT = OFF //フラッシュメモリを保護しない // User NVM self-write protection bits (Write protection off) #pragma config LVP = OFF //低電圧プログラミングを行わない // Low Voltage Programming Enable bit (High Voltage on MCLR/VPP must be used for programming.) // CONFIG4 #pragma config CP = OFF //プログラムメモリを保護しない // User NVM Program Memory Code Protection bit (User NVM code protection disabled) #pragma config CPD = OFF //1840と同じ設定 // Data NVM Memory Code Protection bit (Data NVM code protection disabled) #define _XTAL_FREQ 32000000 //クロック32MHz void main() { OSCCON1 = 0b01110000 ; // 内部クロック8MHz ×4=32MHz ANSELA = 0b00000000 ; // デジタル(0) ANSELC = 0b00000000 ; // デジタル(0) TRISA = 0b00111111 ; // RA0 RA1 RA2 RA3 RA4 RA5 全て入力(1) TRISC = 0b00111011; // RC0 RC1 RC3 RC4 RC5 入力(1) RC2 出力(0) WPUA = 0b00000000; WPUC = 0b00001000 ; // RC3をプルアップ PORTA = 0b00000000 ; /* PORTAクリア */ PORTC = 0b00000000 ; /* PORTCクリア */ while(1){ // SW1がONになった時(RC3が接地された時) if(RC3 == 0){ // SW1がONになった時 0 RC2 = 1; //* RC2 LED点灯 */ }else{ RC2 = 0; //* RC2 LED消灯 */ } } } テストプログラム test_003.c |
||||||