Zliczanie kliknięć przycisków S1 - S4   strona główna:
A po co ten Excel ;-)
 
    Płytka przyszła, kursy ściągnięte, książka (przynajmniej w zakresie tematu) zrozumiana ;-P... Trzeba w końcu zacząć coś próbować pisać.  
Na początek dość prosty programik którego zadaniem jest zliczanie kliknięć przycisków podłączonych do Pinów 0-3 Portu B i przedstawienie   
odpowiedniego info na wyświetlaczu LCD - np.: "Kliknięto S1 Po raz: 5"  
 
    Najpierw pokaże cały program a później opiszę fragmentami... Jeżeli coś uznacie za przemilczane to mogło się tak stać z dwóch powodów: albo   
uznałem to za nieistotne albo na tym etapie wiedzy uznaję że tak po prostu musi być ;-))  
 
 
'----------------------------------------------------------  
'          Zliczanie kliknięć przycisków S1 - S4  
'               tkuchta1          2012-06-24  
                  EvB4.3v4  AtMega32 16MHz  
'  
' Wykorzystano:  
'  - PortC - wyświetlacz LCD 16*2 (Wyjście)  
'  - PortB - przyciski S1-S4 (Wejście)  
'  
'----------------------------------------------------------  
 
'$Sim  
$RegFile = "m32def.dat"  
$Crystal = 16000000  
 
Config Lcd = 16 * 2  
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7  
Cursor Off  
 
Config PinB.0 = Input : Set PORTB.0  
Config PinB.1 = Input : Set PORTB.1  
Config PinB.2 = Input : Set PORTB.2  
Config PinB.3 = Input : Set PORTB.3  
 
Deflcdchar 0 , 32 , 32 , 14 , 17 , 30 , 16 , 14 , 2           
 
Dim licz(4) AS  Word  
 
CLS  
 
Do  
 
    If PinB.0 = 0 Then  
      Incr licz(1)  
 
      CLS  
      Locate 1,1: LCD "Klikni" ; Chr(0) ; "to S1"  
      Locate 2,1: LCD "Po raz: " ; licz(1)  
 
      Do :Loop Until PinB.0 = 1  
    End If  
 
    If PinB.1 = 0 Then  
      Incr licz(2)  
 
      CLS  
      Locate 1,1: LCD "Klikni" ; Chr(0) ; "to S2"  
      Locate 2,1: LCD "Po raz: " ; licz(2)  
 
      Do :Loop Until PinB.1 = 1  
    End If  
 
    If PinB.2 = 0 Then  
      Incr licz(3)  
 
      CLS  
      Locate 1,1: LCD "Klikni" ; Chr(0) ; "to S3"  
      Locate 2,1: LCD "Po raz: " ; licz(3)  
 
      Do :Loop Until PinB.2 = 1  
    End If  
 
    If PinB.3 = 0 Then  
      Incr licz(4)  
 
      CLS  
      Locate 1,1: LCD "Klikni" ; Chr(0) ; "to S4"  
      Locate 2,1: LCD "Po raz: " ; licz(4)  
 
      Do :Loop Until PinB.3 = 1  
    End If  
 
Loop  
 
End  
  Polish Help File for
BASCOM-AVR 
Łatwiej mi pisać o idei programu niż opisywać znaczenie poszczególnych komend w których nieocenionym źródłem wiedzy będzie polskie wydanie   
pliku pomocy do BasCom-AVR - dostępne na stronie producenta: http://www.mcselec.com/ w dziale Downloads/BASCOM/BASCOM-AVR/...  
Jednak co łatwiejsze postaram się wytłumaczyć...  
 
'$Sim  
Program testowałem na Symulatorze Programowym...   
"Instruuje kompilator by nie generował pętli opóźniających dla instrukcji WAIT czy WAITMS.
Spowoduje to zwiększenie szybkości symulacji."
   informacje o Dyrektywie $Sim
z pomocy Prog. BascomA-AVR
 
 
$RegFile = "m32def.dat"  
$Crystal = 16000000  
 
Config Lcd = 16 * 2  
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7  
 
Te informacje określają programowany procesor i częstotliwości jego zegara taktującego, oraz użyty wyświetlacz LCD i jego sposób podłączenia do   
procesora. Procesor to ATMega32 o częstotliwości zegara taktującego 16Mh, Wyświetlacz to 16*2 (16znaków * 2linie) podłączony do Port(u)C   
(pozwólcie że szczegóły pominę ;P )  
 
Config PinB.0 = Input : Set PORTB.0  
Config PinB.1 = Input : Set PORTB.1
 
Config PinB.2 = Input : Set PORTB.2  
Config PinB.3 = Input : Set PORTB.3  
 
Wejściami będą przyciski podpięte do PortuB (Piny 0-3)  
 
Deflcdchar 0 , 32 , 32 , 14 , 17 , 30 , 16 , 14 , 2           
 
Definiuje tu literę "ę" gdyż nie można używać polskich znaków na LCD wprost ze Stringu.   
Niestandardowe znaki w BasCom-AVR definiuje się za pomocą specjalnego narzędzia   
wybieranego z Menu: Tools/LCD Designer. Tu łatwo wyklikamy nasze "ę" a kliknięcie OK.  
zwraca odpowiednią linie kodu. Można zdefiniować 10 takich znaków specjalnych. Będzie  
można się odwoływać przez liczbę: pierwszą po słowie Deflcdchar, a więc tu Chr(0)  
 
Dim licz(4) AS  Word  
 
Do przechowywania liczby kliknięć posłuży nam tablica 4'ro elementowa (liczymy od 1) o typie Word w C++ można by mówić o unsigned int a po  
ludzku to liczby całkowite z zakresu 0..65535 (2 bajty)  
 
CLS  
Czyści wyświetlacz..  
 
    If PinB.0 = 0 Then  
      Incr licz(1)  
    End If  
 
Gdy naciśnięto przycisk podpięty do PinB.0 (S1), Inkrementuj element 1 tablicy licz... w VB byłoby: licz(1) = licz(1) + 1  
 
      Locate 1,1: LCD "Klikni" ; Chr(0) ; "to S1"  
      Locate 2,1: LCD "Po raz: " ; licz(1)  
 
Na wyświetlaczu pokaże się co chcemy :-) i następnie..  
 
      Do :Loop Until PinB.0 = 1  
 
Czekamy aż użytkownik zdejmie paluch z przycisku ;-). Program wykonuje się dość szybko. Bez tej instrukcji nasze "jedno kliknięcie" wykonuje się   
nieraz nawet z 15 razy :-))  
 
I tyle zabawy na dziś... Kompilujemy, programujemy mikrokontroler i oddajemy się zabawie :-)