入力の概要~ †AVRマイコンでの入力は入出力設定レジスタであるDDRX(Xは任意)で0を設定します。 プルアップ抵抗(某ページの丸パクリ解説) ボタンをつけてON,OFFを判断しようという回路を考えると次のような回路が考えられます。 &ref(): File not found: "20121219_043032.jpg" at page "入力の使い方"; しかし書いてある通りこれではスイッチOFFのときの電圧が不明で0か1かわからないので次の回路が考えられます。 &ref(): File not found: "20121219_043301.jpg" at page "入力の使い方"; また、上のような問題があるので普通は下の回路だそうです。 &ref(): File not found: "20121219_043603.jpg" at page "入力の使い方"; これでできました Sample2.1 ~ †#include <avr/io.h> #include <util/delay.h> #define INVERT_BIT(x, n) (x ^= (1 << n)) #define OUTPUT 0 #define INPUT 1 #define FALSE 0 #define TRUE 1 int main(void) { DDRD = 0x01; // 0000 0001 PD0を出力 PD1を入力 PORTD = 0xFE; // 1111 1110 入力をプルアップする uint8_t bButton; //前回のボタン情報を保持 bButton = bit_is_clear(PIND, INPUT); //ONで1 OFFで0 while(1) { if(bButton ^ bit_is_clear(PIND, INPUT)) { //前回のボタン情報と違った場合 if(bButton == 0) { //離した時 }else{ //押した時 INVERT_BIT(PORTD, OUTPUT); } bButton = bit_is_clear(PIND, INPUT); //更新 } } } ・回路図 |