sbit LCD_RS at LATD2_bit; sbit LCD_EN at LATD3_bit; sbit LCD_D4 at LATD4_bit; sbit LCD_D5 at LATD5_bit; sbit LCD_D6 at LATD6_bit; sbit LCD_D7 at LATD7_bit; sbit LCD_RS_Direction at TRISD2_bit; sbit LCD_EN_Direction at TRISD3_bit; sbit LCD_D4_Direction at TRISD4_bit; sbit LCD_D5_Direction at TRISD5_bit; sbit LCD_D6_Direction at TRISD6_bit; sbit LCD_D7_Direction at TRISD7_bit; unsigned int oldstate; char on; void hello() { if(on) Lcd_Cmd(_Lcd_Clear); else Lcd_Out(1, 1, "hello"); on = on ? 0 : 1; } void main() { on = 0; Lcd_Init(); Lcd_Cmd(_Lcd_Cursor_Off); AD1PCFG = 0xFFFF; TRISCbits.TRISC1 = 1; do { if (Button(&PORTC, 1, 1, 1)) oldstate = 1; if (oldstate && Button(&PORTC, 1, 1, 0)) { hello(); oldstate = 0; } } while(1); } ---------------------------------------------------------------------------------------- sbit LCD_RS at LATD2_bit; sbit LCD_EN at LATD3_bit; sbit LCD_D4 at LATD4_bit; sbit LCD_D5 at LATD5_bit; sbit LCD_D6 at LATD6_bit; sbit LCD_D7 at LATD7_bit; sbit LCD_RS_Direction at TRISD2_bit; sbit LCD_EN_Direction at TRISD3_bit; sbit LCD_D4_Direction at TRISD4_bit; sbit LCD_D5_Direction at TRISD5_bit; sbit LCD_D6_Direction at TRISD6_bit; sbit LCD_D7_Direction at TRISD7_bit; char on; void ExtInt1() org 0x003C { IFS1bits.INT1IF = 0; if(on) Lcd_Cmd(_Lcd_Clear); else Lcd_Out(1, 1, "hello"); on = on ? 0 : 1; } void main() { Lcd_Init(); Lcd_Cmd(_Lcd_Cursor_Off); AD1PCFG = 0xFFFF; IFS1bits.INT1IF = 0; IEC1bits.INT1IE = 1; while(1); } ----------------------------------------------------------------------------------------- sbit LCD_RS at LATD2_bit; sbit LCD_EN at LATD3_bit; sbit LCD_D4 at LATD4_bit; sbit LCD_D5 at LATD5_bit; sbit LCD_D6 at LATD6_bit; sbit LCD_D7 at LATD7_bit; sbit LCD_RS_Direction at TRISD2_bit; sbit LCD_EN_Direction at TRISD3_bit; sbit LCD_D4_Direction at TRISD4_bit; sbit LCD_D5_Direction at TRISD5_bit; sbit LCD_D6_Direction at TRISD6_bit; sbit LCD_D7_Direction at TRISD7_bit; //-------------------------------stopwatch------------------------------------// unsigned int oldstate; char on; float f = 0.0; char s1[16]; void timer1_int () org 0x1A { IFS0 = IFS0 & 0xFFF7; // izbrisi flag f += 0.064; FloatToStr(f, s1); Lcd_Out(2, 1, s1); } void timer_on() { f = 0.0; T1CON = 0x8020; //0b1000000000100000 - T1ON=1,TCS=0,TCKPS1=1,TCKPS0=0, //preskaler 1:64 } void timer_off() { T1CONbits.TON = 0; } void timer() { if(on) timer_off(); else timer_on(); on = on ? 0 : 1; } void main() { AD1PCFG = 0xFFFF; IEC0 = IEC0 | 0x0008; // omoguci timer1 interrupt IFS0 = IFS0 & 0xFFF7; // izbrisi flag PR1=5000; //podesi period timera Lcd_Init(); Lcd_Cmd(_Lcd_Cursor_Off); Lcd_Out(1, 1, "TIMER:"); TRISCbits.TRISC1 = 1; do { if (Button(&PORTC, 1, 1, 1)) oldstate = 1; if (oldstate && Button(&PORTC, 1, 1, 0)) { timer(); oldstate = 0; } } while(1); }