Zolang de drukknop word ingedrukt is de led aan, in rust is de led uit.
#define F_CPU 8000000
#include "s/g.h"
#include "util/delay.h"
//! main functie, start programma, moet altijd aanwezich zijn
int main(void){
outb(PORTC, 0xFF); ///< Alle uitgangen hoog
outb(DDRC, 0xFF); ///< PORTC volledig als uitgang
outb(PORTD, 0x0C); ///< PD2..3 hoog (interne pullup)
outb(DDRD, 0x0); ///< PORTD volledig als ingang
while(1){
// PD2 ingedrukt? (actief lage drukknop)
if(!rbi(PIND, 2)){
cbi(PORTC, 0);
}
// led ook weer uit doen
// annder blijft deze branden
else{
sbi(PORTC, 0);
}
// PC1 led reageerd op PD3
if(!rbi(PIND, 3)){
cbi(PORTC, 1);
}
else{
sbi(PORTC, 1);
}
// als beide drukknoppen zijn ingedrukt, PC2 aan
if(!rbi(PIND, 2) && !rbi(PIND, 3)){
cbi(PORTC, 2);
}
else{
sbi(PORTC, 2);
}
_delay_ms(10); ///< even wachten
}
return 0;
}
Bij de eerste druk op de knop gaat de led op PC0 uit, bij start is deze aan. Bij de volgende druk gaat de led weer aan.
#define F_CPU 8000000
#include "s/g.h"
#include "util/delay.h"
//! main functie, start programma, moet altijd aanwezich zijn
int main(void){
outb(PORTC, 0xFF); ///< alle uitgangen hoog
outb(DDRC, 0xFF); ///< PORTC volledig als uitgang
outb(PORTD, 0x0C); ///< PD2..3 hoog (interne pullup)
outb(DDRD, 0x0); ///< PORTD volledig als uitgang
u08 pa2 = 0; ///< variabele voor stand van PA2
while(1){
if(!rbi(PIND, 2)){ ///< PA2 ingedrukt?
pa2 = ~pa2; ///< toggle var pa2
// do{ ... }while(): minstens 1 maal 15ms wachten
do{
_delay_ms(10);
}while(!rbi(PIND, 2)); ///< zolang PA2 hoog wordt
}
// uitgang pas sturen als PA2 los gelaten is
if(pa2 == 0){
cbi(PORTC, 0);
}
else{
sbi(PORTC, 0);
}
}
return 0;
}