$regfile "m8def.dat"
|
Definiert den Atmega als Atmega8 |
|
$crystal = 1000000
|
Gibt die Quarzfrequenz in Herz |
|
$hwstack = 32
|
32 Hardware reservierte Speicher |
Default Wert
|
$swstack = 10
|
Software reservierter Speicher |
Default Wert
|
Config Lcd = 16 * 2 |
Konfiguration fürs Display |
|
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.2 , Rs = Portd.1 , E = Portd.0 |
Zuweisung der Display Anschlüsse
|
|
Definieren der Ein /Ausgänge
|
Ddrb.0 = 1
|
Led gelb |
rechte Led auf der Platine
|
Ddrd.5 = 1
|
Led gelb |
linke Led auf der Platine
|
Ddrd.6 = 1 |
Led Rot |
mittlere Led
|
Ddrd.7 = 0 |
Taster
|
Tastfunktion des Drehgeber
|
Portd.2 = 1
|
Pull Up der Interrupt 0 setzten |
|
Portd.3 = 1
|
Pull Up der Interrupt 1 setzten |
|
Portd.4 = 1
|
Pull Down für Drehgeber Taster |
|
Portd.7 = 1
|
Pull Down für Taster weiß |
|
Interrupts
|
Gicr = &B11000000
|
Interrupt 0 und 1 einschalten |
|
Sreg.7 = 1
|
Interrupts Global freigeben |
|
On Int0 Kanal_a |
Zuweisen des Routine Namen
|
|
On Int1 Kanal_b |
Zuweisen des Routine Namen |
|
Mcucr = &B00001010
|
Interrupts sollen auf H/L Flanke reagieren |
|
Gicr = &B11000000
|
Interrupt 0 und 1 einschalten |
|
Einschaltmeldung
|
Cls |
|
|
Locate 1 , 1 |
|
|
Lcd "Drehgeber" |
|
|
Locate 2 , 1 |
|
|
Lcd "2020" |
|
|
Wait 1 |
|
|
Leds Testen
|
Portb.0 = 1 |
|
|
Waitms 500 |
|
|
Portd.5 = 1 |
|
|
Waitms 500 |
|
|
Portd.6 = 1 |
|
|
Waitms 500 |
|
|
Portb.0 = 0 |
|
|
Portd.5 = 0 |
|
|
Portd.6 = 0 |
|
|
Variable definieren
|
Dim Drehgeber As Byte |
|
|
Dim Text As String * 10 |
|
|
Dim Textmenge As String * 10 |
|
|
Dim Textlaenge As Byte
|
Hier wird die Anzahl der Zeichen abgelegt die als Text abgelegt sind
|
Programm
|
Do |
|
|
Cls |
|
|
If Pind.4 = 0 Then Gosub Textsumme
|
Taster vom Drehgeber abfragen |
|
If Drehgeber = 1 Then Text = "A"
|
'------------- Texteingabe in
' Variable "Textmenge" speichern |
|
If Drehgeber = 2 Then Text = "B" |
|
|
If Drehgeber = 3 Then Text = "C" |
|
|
If Drehgeber = 4 Then Text = "D" |
|
|
If Drehgeber = 5 Then Text = "E" |
|
|
If Drehgeber = 6 Then Text = "F" |
|
|
If Drehgeber = 7 Then Text = "G" |
|
|
If Drehgeber = 8 Then Text = "H" |
|
|
If Drehgeber = 9 Then Text = "I" |
|
|
If Drehgeber = 10 Then Text = "J" |
|
|
If Drehgeber = 11 Then Text = "K" |
|
|
If Drehgeber = 12 Then Text = "L" |
|
|
If Drehgeber = 13 Then Text = "M" |
|
|
If Drehgeber = 14 Then Text = "N" |
|
|
If Drehgeber = 15 Then Text = "O" |
|
|
If Drehgeber = 16 Then Text = "P" |
|
|
If Drehgeber = 17 Then Text = "Q" |
|
|
If Drehgeber = 18 Then Text = "R" |
|
|
If Drehgeber = 19 Then Text = "S" |
|
|
If Drehgeber = 20 Then Text = "T" |
|
|
If Drehgeber = 21 Then Text = "U" |
|
|
If Drehgeber = 22 Then Text = "V" |
|
|
If Drehgeber = 23 Then Text = "W" |
|
|
If Drehgeber = 24 Then Text = "X" |
|
|
If Drehgeber = 25 Then Text = "Y" |
|
|
If Drehgeber = 26 Then Text = "Z" |
|
|
If Drehgeber = 27 Then Text = "1" |
|
|
If Drehgeber = 28 Then Text = "2" |
|
|
If Drehgeber = 29 Then Text = "3" |
|
|
If Drehgeber = 30 Then Text = "4" |
|
|
If Drehgeber = 31 Then Text = "5" |
|
|
If Drehgeber = 32 Then Text = "6" |
|
|
If Drehgeber = 33 Then Text = "7" |
|
|
If Drehgeber = 34 Then Text = "8" |
|
|
If Drehgeber = 35 Then Text = "9" |
|
|
If Drehgeber = 36 Then Text = "0" |
|
|
Textlaenge = Len(textmenge) |
Hier werden aus der String Variable Textmenge die Anzahl der Zeichen ausgelesen und in einer Byte Varioablen abgelegt |
Toggle Portd.6 ' Betriebsanzeige rot |
|
|
Waitms 30 |
|
|
Locate 1 , 1 ' Textausgabe |
|
|
Lcd "A->Z" |
|
|
Locate 1 , 10 |
|
|
Lcd Drehgeber |
|
|
Locate 1 , 13
|
|
|
Lcd Textlaenge |
zeigt die Anzahl der Zeichen an, die zuvor als Text abgespeichert wurden
|
Locate 2 , 1 'Lcd Text |
|
|
Lcd Text |
|
|
Locate 2 , 7 |
|
|
Lcd Textmenge |
|
|
Waitms 100 |
|
|
Loop |
|
|
Return |
|
|
|
|
Interrupt Routine 0
|
Kanal_a: |
Beim links drehen kommt erst kanal a |
|
If Pind.2 = 0 And Pind.3 = 1 Then Waitms 6
|
|
|
If Pind.2 = 0 And Pind.3 = 1 Then Drehgeber = Drehgeber - 1 |
|
|
'Drehgeber = Drehgeber + 1 |
|
|
Portd.5 = 1 |
|
|
Waitms 8 |
|
|
Portd.5 = 0 |
|
|
Return |
|
|
Interrupt Routine 1
|
Kanal_b: |
beim rechts drehen kommt erst kanal b |
|
If Pind.2 = 1 And Pind.3 = 0 Then Waitms 6
|
|
|
If Pind.2 = 1 And Pind.3 = 0 Then Drehgeber = Drehgeber + 1 |
|
|
'Drehgeber = Drehgeber - 1 |
|
|
Portb.0 = 1 |
|
|
Waitms 8 |
|
|
Portb.0 = 0 |
|
|
Return |
|
|
Routine um den Text zusammen zu führen
|
Textsumme: |
'---------------Rotine Text zusammen führen------------------------------------ |
|
Portd.6 = 1
|
Rote led an |
|
Portd.5 = 1
|
gelbe led an |
|
Waitms 1000 |
|
|
Portd.6 = 0
|
' rote led aus |
|
Portd.5 = 0
|
gelbe led aus |
|
Textmenge = Textmenge + Text |
|
|
Return |
|
|