Professional Documents
Culture Documents
h> Void delay (unsigned int i) { unsigned int j; While (i--) For(j=o;j<=1000;j++); } Void main () { unsigned int k,h; DDRA=0x00; DDRD=0XFF; DDRB=0XFF; while (1) { k =~PINA; h=k & 0x0F;
PORTB=H; switch (h) { case 0x0D: //Forward (KEY Pressed - 2) { PORTD=0x89; break; } case 0x07: //Backward (KEY Pressed - 8) { PORTD=0x86; break; } case 0x0B: //Sharp Left Turn (KEY Pressed - 4) { PORTD=0x85; break; }
case 0x09: //Sharp Right Turn (KEY Pressed - 6) { PORTD=0x8A; break; } case 0x0A: //Stop (KEY Pressed - 5) { PORTD=0x00; break; } case 0x0E: //Smooth Left turn Forward (KEY Pressed - 1) { PORTD=0x81; break; } case 0x0C: //Smooth Right turn Forward (KEY Pressed - 3) { PORTD=0x88;
break; } case 0x08: //Smooth Left turn Backward (KEY Pressed - 7) { PORTD=0x82; break; } case 0x06: //Smooth Left turn Backward (KEY Pressed - 9) { PORTD=0x88; break; } } } }
main()
{ P1=0x40; P3=0xff; high = 80; low = 30; flag = 0; time = 50; Start(); while(1) { P3|= 0x0f; Run(); } }
delay(time); }
time() // update clock every 1 second { sec++; if ( sec >= 60) { sec = 0;
min++; if ( min >= 60) { min = 0; hour++; if ( hour >= 24) hour = 0; } } }
flag1 |= 0x10; // disable blink output_high(LAMP); // on triac } if(hour == offHour1 && min == offMin1) { output_low(LAMP); // off triac flag1 |= 0x20; // disable further test on off flag1 &= ~0x10; // reenable blink } } }
compareTimeOn_Off() { if((flag1 & 0x40) != 0) // allow entering only after 8:00 has been set { testOnOff();
if(hour == onHour2 && min == onMin2) { flag1 |= 0x10; // disable further blink output_high(LAMP); // turn lamp on } if(hour == offHour2 && min == offMin2) { output_low(LAMP); // turn lamp off flag1 &= ~0x10; // reenable blink } } }
hour = setHour; min = setMin; sec = 0; flag1 |= 0x40; // enable compare time flag1 &= ~0x20; // reenable test on off flag1 &= ~0x01; // clear key press bit rate = 5; } }
fireLED() { if ((flag1 & 0x10) == 0) // blink only triac is not turned on { temp++; if ( temp == rate) { blink(); temp = 0; } } }
chkKEY() { if(input(KEY)==0)
{flag1 |= 0x01; // set bit 0 telling key been pressed flag1 |= 0x10; // disable firing LED output_high(LAMP); // turn on lamp when press button } }
main() {
while(1) { while( tmr0 != 0) // while waiting 1sec elapsed check button also chkKEY(); // the following tasks executed every 1 second time(); compareTimeOn_Off(); fireLED(); setTime();
} }
// reload preset time value from preset array for each key pressed
set_timer() { if((flag1&1) == 0) // enter only when keys have been released { if((P3&0x04) == 0) { flag1 |= 1; if(index1>=9) index1 =0; timer1= preset_timer1[index1++]; } if((P3&0x08) == 0) { flag1 |= 1; if(index2>=9) index2 =0;
timer2= preset_timer2[index2++]; }
if((P3&0x10) == 0) { flag1 |= 1; if(index3>=13) index3 =0; timer3= preset_timer3[index3++]; } if((P3&0x20) == 0) { flag1 |= 1; if(index4>=8) index4 =0; timer4= preset_timer4[index4++]; }
} key_release() { if((P3&0x3c) == 0x3c) flag1 &= ~1; } run_timer() { if(++one_sec>=100) { one_sec = 0; run_timer1(); run_timer2(); run_timer3(); run_timer4(); shutdown(); // run shutdown checking every second
} run_timer1() { if(timer1 != -1) // enter only preset value != -1 { if(timer1 != 0) // enter only timer1 != 0 { timer7 = 0; // reset shutdown timeout buzzer1 = off; flag1 |= 0x02; setbit(output1)
} else // timer1 == 0 then fire output { clrbit(output1) // fire output1 buzzer1 = on; flag1 &= ~0x02; flag2 &= ~0x01; } } else { flag1 &= ~0x02; // no blink when timer1 == -1 flag2 &= ~0x01; buzzer1 = off; } }