'GenAkustZegar1

Bascom

Generator bicia zegara.
Jeśli budujesz zegary elektroniczne, a chciałbyś wyposarzyć je w funkcję bicia godzin, to możesz zaadaptować ten program.
Oczywiście trzeba zadbać, aby w zmiennych Gong i Wp znalazły się odpowiednie wartości decydujące o wysokości tonów i ilości bitych dźwięków. Trzeba też zadbać, aby odpowiednia instrukcja startowała bicie.



Uwaga! Przyciski dźwiękowe (poniżej) nie działają w przeglądarce Firefox





'GenAkustZegar1.bas

 'Generator dla budujących zegary elektroniczne.

 'Emituje dźwięki bicia zegara.

 'Procesor oscyluje z generatorem wenętrznym 8MHz.

 'Opis pod programem.

 'Opracował Henryk Wydmuch

 'Program zajmuje 13% pamięci.

 

 $regfile = "m8def.dat"                                     'Info dla kompilatora.

$crystal = 8000000                                          'Informujemy kompilator o frekwencji 8MHz.

 

 Config Lcd = 16 * 2                                        'Konfiguracja Lcd.

 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5

 

 Config Timer0 = Timer , Prescale = 1

 

 Dim A As Byte                                              'Zawiera kolejną liczbę uderzeń zegara.

 Dim I As Byte                                              'Zmienna operacyjna dla pętli For.

 Dim Wp As Byte                                             'Zawiera liczbę wysokości tonu.

 Dim Gong As Byte                                           'Do wpisania liczby uderzeń zegara.

 Dim Zm As Byte                                             'Zawiera liczbę przepełnień Timer0.

 

 Config Pind.2 = Output

 Set Portd.2

 Config Pind.0 = Output                                     'Port wyjściowy impulsów bicia zegara.

  Set Portd.0                                               '

 Config Pind.3 = Output                                     'Port wyjściowy impulsów.

  Set Portd.3                                               '

  Config Pind.6 = Input                                     'Port startowy.

  Set Portd.6                                               '

 

  On Timer0 Licz                                            'Włącz podprogram Timer0.

  Enable Interrupts                                         'Odblokuj wszystkie przerwania.

  Enable Timer0                                             'Odblokuj przerwanie Timer0.

 

 Cls                                                        '

'''''''''''''''''''''''''''''''''''''''

 Do                                                         'Pętla Do.

 Wp = 20                                                    'Tu wpisz wysokość tonu bicia zegara.

 Gong = 9                                                   'Tu jest ilość uderzeń zegara.

 

 If Pind.6 = 0 Then                                         'Jeśli przyciśnięto Start.

 Set Portd.2                                                'Zablokuj wyjście do czasu bicia zegara.

 Start Timer0                                               '

 Cls                                                        '

 Waitms 100                                                 'Zacznij bicie po ustabilizowaniu się generatora Timer0.

 Reset Portd.2

 For I = Gong To 1 Step - 1                                 'Krocz w dół po jednym od wpisanej liczby.

 

  Incr A                                                    'Z każdym krokiem pętli For, powiększaj A.

  Home                                                      '

  Lcd A                                                     'Pokaż liczbę uderzeń zegara.

  Toggle Portd.0                                            'Poziom niski tego Portu, to uderzenie zegara.

 If Pind.0 = 0 Then                                         '

 Waitms 10                                                  'Skróć impuls uderzenia zegara do 10mS.

 Toggle Portd.0                                             '

 Waitms 500                                                 'Szybkość bicia zegara, kroki For.

 

 End If                                                     'Koniec warunku, gdy Pinb.1=0.

 Next I                                                     'Krocz For

 

 If Portd.6 = 1 Then                                        'Jeśli nie jest przyciśnięty Start.

 Waitms 700                                                 'Czas wybrzmiewania dźwięku.

 Stop Timer0                                                '

 Cls                                                        '

 Lcd "Godzina " ; A ; ".00"                                 'Pokaż godzinę.

 A = 0                                                      '

 End If                                                     'Koniec warunku.                                                  '

 

 End If                                                     '

Loop                                                        '

End                                                         '

 ''''''''''''''''''''''''''''''''''''

 Licz:                                                      'Podprogram generatora Timer0.

 Incr Zm                                                    'Powiększaj przepełnienia Timer0 (po każdym 256 impulsie)..

 If Zm = Wp Then                                            'Jeśli przepełnień będzie tyle, ile zawiera Wp...

 Toggle Portd.3                                             'Zmień poziom Portu.

 Zm = 0                                                     '

 End If                                                     '

 Return                                                     '

''''''''''''''''''''''''''''''''''''''

 

 'Objaśnienie:

 'Program emituje bicie zegara.

 'Można go zastosować przy budowie zegarów elektronicznych.

 'Po naciśnięciu Start (Pind.6=0) pętla ruszy i wyemituje założoną liczbę impulsów

 'O szybkości kroków bicia zegara decyduje Waitms 500.

 'O długości wybrzmiewania dźwięku bicia decyduje Waitms 700.

 'Zawartość zmiennej Gong decyduje o ilości udzerzeń.

 'Zawartość zmiennej Wp decyduje o wysokości tonów uderzeń.

 'Lcd można pominąć.

 'Koniec.