pic16f877a では、単一のボタンを使用してソフトウェアのデバウンスに使用されるコードを作成しようとしていますが、ボタンをクリックするたびにオンになり、二度とオフにならないコードは次のとおりです。
#include "config.h"
unsigned int ledToggle(void);
void main(){
TRISCbits.TRISC0 = 1;
TRISDbits.TRISD0 = 0;
PORTDbits.RD0 = 0;
while(1){
if(PORTCbits.RC0 == 1){
if(ledToggle()%2 == 0){
PORTDbits.RD0 = 1;
}else{
PORTDbits.RD0 = 0;
}
}
}
}
unsigned int ledToggle(){
static int i = 2;
i++;
return i;
}
編集
また、問題のあるこの新しいコードを作成しましたが、ここにない場合があります。
#include "config.h"
static char flag = 0;
static int counter = 0;
unsigned int ledToggle(void);
void main(){
TRISCbits.TRISC0 = 1;
TRISDbits.TRISD0 = 0;
PORTDbits.RD0 = 0;
while(1){
if(ledToggle()%2 == 0){
PORTDbits.RD0 = 1;
}else{
PORTDbits.RD0 = 0;
}
}
}
unsigned int ledToggle(){
if(PORTCbits.RC0 == 1 && flag == 0){
counter++;
flag = 1;
}else{
counter += 0;
flag = 0;
}
if(PORTCbits.RC0 == 0){
flag = 0;
}
return counter;
}
ところで、config.h は、ビットとクリスタル周波数 (_XTAL_FREQUENCY) を構成するために作成したヘッダー ファイルであることを忘れていました。