(07-06-2012 9:57)SP3GTG napisał(a): „Własna” synteza z AD 9951 bardzo cieszy, choć
trzeba ją jeszcze rozbudować o różne funkcje niezbędne
w TRx-ie.
Nie ma sprawy tak tez zrobimy. Jednak z obsługą encodera będzie problem gdyż go nie posiadam - jeśli ktoś ma na zbyciu solidny, najlepiej z jakiejś obrabiarki CNC za niewielkie pieniądze to mogę kupić.
Tym razem proponuję opracować "normalne" wyświetlanie częstotliwości - w postaci xxx.xxx.xxx ( np. 3.710.000 ) Oto moja propozycja funkcji wys_freq()
Kod:
void wys_freq(unsigned long int freq)
{
unsigned long int LL, ff, zero;
LL=0;
ff=freq;
LCD_PORT = LCD_PORT|(1<<LCD_RS);
while(ff >= 100000000)
{
ff = ff-100000000;
LL+=1;
}
if (LL!=0) //wyťwietl rz?d 100M
{
bajt_lcd(LL+48);
zero=1;
}
else
{
bajt_lcd(LL+32);
zero=0;
}
LL=0;
while(ff >= 10000000)
{
ff = ff-10000000;
LL+=1;
}
if (LL!=0) //wyťwietl rz?d 10M
{
bajt_lcd(LL+48);
zero=1;
}
else
{
if(zero==0)
{
bajt_lcd(32);
zero=0;
}
else
{
bajt_lcd(LL+48);
zero=1;
}
}
LL=0;
while(ff >= 1000000)
{
ff = ff-1000000;
LL+=1;
}
if (LL!=0) //wyťwietl rz?d 1M
{
bajt_lcd(LL+48);
bajt_lcd(46);
zero=1;
}
else
{
if(zero==0)
{
bajt_lcd(32);
bajt_lcd(32);
zero=0;
}
else
{
bajt_lcd(LL+48);
bajt_lcd(46);
zero=1;
}
}
LL=0;
while(ff >= 100000)
{
ff = ff-100000;
LL+=1;
}
if (LL!=0) //100k
{
bajt_lcd(LL+48);
zero=1;
}
else
{
if(zero==0)
{
bajt_lcd(32);
zero=0;
}
else
{
bajt_lcd(LL+48);
zero=1;
}
}
LL=0;
while(ff >= 10000)
{
ff = ff-10000;
LL+=1;
}
if (LL!=0) //10k
{
bajt_lcd(LL+48);
zero=1;
}
else
{
if(zero==0)
{
bajt_lcd(32);
zero=0;
}
else
{
bajt_lcd(LL+48);
zero=1;
}
}
LL=0;
while(ff >= 1000)
{
ff = ff-1000;
LL+=1;
}
if (LL!=0) //1k
{
bajt_lcd(LL+48);
bajt_lcd(46);
zero=1;
}
else
{
if(zero==0)
{
bajt_lcd(32);
bajt_lcd(32);
zero=0;
}
else
{
bajt_lcd(LL+48);
bajt_lcd(46);
zero=1;
}
}
LL=0;
while(ff >= 100)
{
ff = ff-100;
LL+=1;
}
bajt_lcd(LL+48); //100
LL=0;
while(ff >= 10)
{
ff = ff-10;
LL+=1;
}
bajt_lcd(LL+48); //10
bajt_lcd(ff+48); //1
}
Opracowałem ją kiedyś - nie miałem jeszcze na tyle doświadczenia żeby zrobić krótki kod - zresztą to nie ważne ( moim zdaniem) żeby mało było kodu w oknie kompilatora tylko ważne żeby program wykonywał się szybko a ten sposób wyświetlania jest szybszy niż ten który mieliśmy do tej pory.
Z pliku main.c usuwacie całą funkcję wys_freq() i na jej miejsce wsadzacie tą którą podałem w tym poście. Działa - sprawdzałem... lecz ciągle jest coś nie tak
i to jest zadanie dla Was:
Jak zrobić żeby częstotliwość nie wychodziła poza wyświetlacz ?? Pogłówkujcie , jeśli nie dacie rady podam rozwiazanie. Podpowiedź: Wystarczy zmienić (tylko) góra dwa znaki.