Witam, napisa³em sobie taki programi jak poni¿ej. Jest to prosty timerek, jednym przyciskiem startujê, drugim zatrzymujê. Ale mam problem z wy¶wietlaniem. Wynik na LCD mi migocze. Tzn. Migocz± czêsci setne sekundy oraz sekundy. Nie wiem jak to zrobiæ. Wygl±da to strasznie nieelegancko (niedo¶æ ¿e miga, to i wy¶wietla siê s³abiej, ni¿ np. zwyk³y napis lub wynik po zatrzymaniu stoperka). Czekam na Wasze porady :-) Pozdrawiam Piotrek
A o to kod. Chip type : AT90S2313 Clock frequency : 4,000000 MHz Memory model : Tiny External SRAM size : 0 Data Stack size : 32 #include <90s2313.h>
#include <stdio.h>
// Alphanumeric LCD Module functions #asm .equ __lcd_port=0x18 ;PORTB #endasm #include <lcd.h>
int a; //sekundy int b=0; int min=0; int ms=0; int pom=0; int pom1=0; int p1,p2,p3; char display_buffer[5]; // Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Reinitialize Timer 0 value TCNT0=0x06; // Place your code here b=b+1; if (b==250) { ms=0; b=0; a=a+1; if (a==60) { a=0; min=min+1; }
} }
void main(void) { PORTB=0x00; DDRB=0x00;
PORTD=0x00; DDRD=0x00;
TCCR0=0x03; TCNT0=0x06;
TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; OCR1H=0x00; OCR1L=0x00;
GIMSK=0x00; MCUCR=0x00;
TIMSK=0x02;
ACSR=0x80;
lcd_init(16);
#asm("sei")
while (1) { DDRD.0=0; PORTD.0=1;
DDRD.1=0; PORTD.1=1; if (PIND.1==0) { pom=0; pom1=1;
}
if (PIND.0==0) { a=0; b=0; ms=0; min=0; pom=1; } else { if (pom==1) { lcd_clear(); sprintf(display_buffer,"%i %i %i",min, a, b*4); lcd_clear(); lcd_puts(display_buffer);
} else { if (pom1==0) { lcd_clear(); lcd_putsf("Czekam..."); } if (pom1==1) { p1=min; p2=a; p3=ms; lcd_clear(); sprintf(display_buffer,"%i %i %i",p1, p2, b*4); lcd_clear(); lcd_puts(display_buffer); while (PIND.0==1) {} }
} }; } }