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.
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);
}
}
zapisy po prawej stronie są równoznaczne z zapisami po lewej
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)
- 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 stronie
Kod:
if(cośtam==0) ==== if(cośtam!=1)
if(cośtam==1) ==== if(cośtam!=0)
Na 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.
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);
}
}
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.
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);
}
}