Skoro wszyscy wszystko rozumieją
idziemy dalej ... Lekcja 11 teraz dodajemy obsługę dwóch przycisków, które będą zmieniały częstotliwość ( wartość zmiennej frequency ) o 1Hz w górę i w dół. Podaje treść całej głównej funkcji programu, zamieńcie tą co macie na tą co ja podałem.zapisy po prawej stronie są równoznaczne z zapisami po lewej - sprawdźcie, jak ktoś nie rozumie jednego i/lub drugiego zapisu - dajcie znać a będę wyjaśniał.
Przyciski podłaczamy pod PC7 i PC6 - podanie niskiego stanu na PC7 zwiększa częstotliwość o 1Hz, a podanie 0 na PC6 zmniejsza.
Uwaga! Płyty z Microsense mają odwrotnie ponumerowany PORTC ! ( przynajmniej moja tak ma )
Jeszcze jedno - domyślnie chyba jest włączony JTAG na tych płytach - jak nie bedzię działał jakis przycisk to napiszcie.
Operator == to operator logiczny (związany z dwoma stanami PRAWDĄ lub FAŁSZEM reprezentowanymi przez 0 i 1). Pojedyńczy znak równości to operator przypisania (arytmetyczny - czyli związany z liczbami).
Są dwa operatory przyrównania:
== znaczy równy
!= znaczy różny
Zatem zapis if(cośtam==0) ... znaczy jeśli cośtam jest Fałszywe (równe 0)to ...
if(cośtam==1) ... znaczy jeśli cośtam jest Prawdziwe (różne od 0)to ...
zapisy po lewek równają sie zapisom po porawej stronieNa następnej lekcji dodamy możliwość zmiany kroku syntezy.
Kolejna lekcja, 12-sta ... podaje treść main() tak jak poprzednio. Macie tu możliwość zmiany kroku syntezy ale poprzez zmianę wartości zmiennej krok.
Teraz przydałaby się obsługa dwóch dodatkowych przycisków do zmiany kroku. Poniższy kod wam w tym pomoże, przyciski zmiany kroku dołączone do PC5 i PC4.
idziemy dalej ... Lekcja 11 teraz dodajemy obsługę dwóch przycisków, które będą zmieniały częstotliwość ( wartość zmiennej frequency ) o 1Hz w górę i w dół. Podaje treść całej głównej funkcji programu, zamieńcie tą co macie na tą co ja podałem.Kod:
int main(void)
{
unsigned long int frequency;
frequency = 3710000;
init_lcd();
DDRC =0b00000000; //nie musi być tej linii bo domyślnie wyprowadzenia są wejściami
PORTC=0b11000000;
while(1)
{
if((PINC&0b01000000)==0)
{
frequency-=1;
}
if((PINC&0b10000000)==0)
{
frequency+=1;
}
LCD_PORT &= (~1<<LCD_RS); // "0" na wyprowadzenie RS w wyświewtlaczu
bajt_lcd(0x87); // kursor LCD na pozycję 8 - dla drugiej linii " bajt_lcd(0xc7); "
wys_freq(frequency);
}
}Kod:
if(bit_is_clear(PINC, 7)) ==== if((PINC&0b10000000)==0)
if(bit_is_clear(PINC, 6)) ==== if((PINC&0b01000000)==0)
if(bit_is_clear(PINC, 0)) ==== if((PINC&0b00000001)==0)Przyciski podłaczamy pod PC7 i PC6 - podanie niskiego stanu na PC7 zwiększa częstotliwość o 1Hz, a podanie 0 na PC6 zmniejsza.
Uwaga! Płyty z Microsense mają odwrotnie ponumerowany PORTC ! ( przynajmniej moja tak ma )
Jeszcze jedno - domyślnie chyba jest włączony JTAG na tych płytach - jak nie bedzię działał jakis przycisk to napiszcie.
Operator == to operator logiczny (związany z dwoma stanami PRAWDĄ lub FAŁSZEM reprezentowanymi przez 0 i 1). Pojedyńczy znak równości to operator przypisania (arytmetyczny - czyli związany z liczbami).
Są dwa operatory przyrównania:
== znaczy równy
!= znaczy różny
Zatem zapis if(cośtam==0) ... znaczy jeśli cośtam jest Fałszywe (równe 0)to ...
if(cośtam==1) ... znaczy jeśli cośtam jest Prawdziwe (różne od 0)to ...
zapisy po lewek równają sie zapisom po porawej stronie
Kod:
if(cośtam==0) ==== if(cośtam!=1)
if(cośtam==1) ==== if(cośtam!=0)Kolejna lekcja, 12-sta ... podaje treść main() tak jak poprzednio. Macie tu możliwość zmiany kroku syntezy ale poprzez zmianę wartości zmiennej krok.
Kod:
int main(void)
{
unsigned long int frequency, krok;
frequency = 3710000;
krok=100;
init_lcd();
PORTC=0b11000000;
while(1)
{
if((PINC&0b01000000)==0)
{
frequency-=krok;
}
if((PINC&0b10000000)==0)
{
frequency+=krok;
}
LCD_PORT &= (~1<<LCD_RS);
bajt_lcd(0x87);
wys_freq(frequency);
}
}Kod:
int main(void)
{
unsigned long int frequency, krok;
frequency = 3710000;
krok=100;
init_lcd();
PORTC=0b11110000;
while(1)
{
if((PINC&0b01000000)==0)
{ frequency-=krok; }
if((PINC&0b10000000)==0)
{ frequency+=krok; }
if((PINC&0b00010000)==0)
{ if(krok>9)
{ krok/=10; } }
if((PINC&0b00100000)==0)
{ if(krok<10000000)
{ krok*=10; } }
LCD_PORT &= (~1<<LCD_RS);
bajt_lcd(0x87);
wys_freq(frequency);
LCD_PORT &= (~1<<LCD_RS);
bajt_lcd(0xc3);
napis_lcd("krok");
wys_freq(krok);
}
}
