Die Leude Mikrocontroller.net haben da ganze Arbeit geleistet und mich viel weitergebracht...
Wie auch immer, das erste "Projekt" auf dem LCD war -natürlich- eine Uhr. Und natürlich wieder mit meinem "Standart"-AVR ATtiny2313.
Das sieht doch schon mal nach was aus.
Uhrzeit war ein Klacks und auch das Datum war kaum herausfordernd. Was wirklich "schwer" war, war die implementierung der Bedienelemente: Taster wollen abgefragt werden und es soll erkannt werden od der Taster gedrüückt wurde, fetgehalten wurde oder losgelassen ist. Das ganze in verschiedenen "kontexten", schliesslich will man die Uhr ja auch stellen könnnen...
Und da war sie nun, ein paar zahlen auf nem LCD.
Ist aus einigem Abstand recht schwer zu lesen...
Das muss sich ändern:
Also einen neuen Zeichensatz gebastelt, und aus den maximal 8 eigenen Zeichen ein paar "richtig Große" Ziffern zusammengestellt.
Das ganze Programm füllt den 2313 mittlerweile zu 80% aus und das Listing ist irgendwie viel zu lang um es einfach hier zu posten...
( und dabei wollt ich noch einen Alarm-timer und ein Calibrierungs-byte (um sekunden/woche auszugleichen) mit einbauen...)
Also erslmal einen Ausschnitt, und zwar den für die grossen Ziffern:
lcd_big_ziffer:
; wandelt eine BCD ziffer in
; eine ziffer in großschrift
; es ist erforderlich das vorher der Zeichensatz_big geladen ist.
; die zahl wird in temp übergeben
; der offset auf dem LCD in temp2
; aufgerufene Unterprogramme
push temp
push temp2
push temp3
push ZL
push ZH
; Z-register initialisieren
ldi ZL, low(big_font*2)
ldi ZH, high(big_font*2)
;offset in der tabelle aus der ziffer berechnen (ziffer=ziffer*4)
lsl temp
lsl temp
clr temp3
add ZL, temp
adc ZH, temp3
;cursor in der ersten zeile positionieren
mov temp, temp2
rcall lcd_pos
;symbole für die erste Zeile ausgeben
lpm temp, Z+
rcall lcd_data
lpm temp, Z+
rcall lcd_data
;cursor in der 2. zeile positionieren
mov temp, temp2
ori temp, 0x40
rcall lcd_pos
;symbole für die 2. zeile ausgeben
lpm temp, Z+
rcall lcd_data
lpm temp, Z
rcall lcd_data
pop ZH
pop ZL
pop temp3
pop temp2
pop temp
ret
big_font:
; hier ist abgelegt welche symbole wie zu grossen ziffern zusammengesetzt werden
.db 0x07, 0x01, 0x06, 0x05 ;0
.db 0x20, 0x01, 0x20, 0x00 ;1
.db 0x04, 0x02, 0x06, 0x04 ;2
.db 0x02, 0x04, 0x04, 0x05 ;3
.db 0x06, 0x06, 0x03, 0x07 ;4
.db 0x00, 0x03, 0x04, 0x02 ;5
.db 0x06, 0x04, 0x06, 0x05 ;6
.db 0x03, 0x02, 0x20, 0x00 ;7
.db 0x05, 0x02, 0x06, 0x05 ;8
.db 0x07, 0x01, 0x03, 0x02 ;9
und dazu noch den Zeichensatz fürs LCD:
zeichensatz_big:
.db 0b00000011, 0b00011111 ;...xx xxxxx
.db 0b00000011, 0b00011111 ;...xx xxxxx
.db 0b00000011, 0b00000011 ;...xx ...xx
.db 0b00000011, 0b00000011 ;...xx ...xx
.db 0b00000011, 0b00000011 ;...xx ...xx
.db 0b00000011, 0b00000011 ;...xx ...xx
.db 0b00000011, 0b00000011 ;...xx ...xx
.db 0b00000011, 0b00000011 ;...xx ...xx
.db 0b00011111, 0b00011111 ;xxxxx xxxxx
.db 0b00011111, 0b00011111 ;xxxxx xxxxx
.db 0b00000011, 0b00000000 ;...xx .....
.db 0b00000011, 0b00000000 ;...xx .....
.db 0b00000011, 0b00000000 ;...xx .....
.db 0b00000011, 0b00000000 ;...xx .....
.db 0b00011111, 0b00000000 ;xxxxx .....
.db 0b00011111, 0b00000000 ;xxxxx .....
.db 0b00000000, 0b00000011 ;..... ...xx
.db 0b00000000, 0b00000011 ;..... ...xx
.db 0b00000000, 0b00000011 ;..... ...xx
.db 0b00000000, 0b00000011 ;..... ...xx
.db 0b00000000, 0b00000011 ;..... ...xx
.db 0b00000000, 0b00000011 ;..... ...xx
.db 0b00011111, 0b00011111 ;xxxxx xxxxx
.db 0b00011111, 0b00011111 ;xxxxx xxxxx
.db 0b00011000, 0b00011111 ;xx... xxxxx
.db 0b00011000, 0b00011111 ;xx... xxxxx
.db 0b00011000, 0b00011000 ;xx... xx...
.db 0b00011000, 0b00011000 ;xx... xx...
.db 0b00011000, 0b00011000 ;xx... xx...
.db 0b00011000, 0b00011000 ;xx... xx...
.db 0b00011111, 0b00011000 ;xxxxx xx...
.db 0b00011111, 0b00011000 ;xxxxx xx...
;tabellenende
.db 0xff, 0xff
Wenn ich mal eine schöne Möglichkeit gefunden habe Dateien zum download annzubieten gibt es den kompletten code.
Und ja, auch hiervon hab ich keine vorzeigbare schaltung. Aber vlt kann man sowas ja bald einfach mir "Fritzing" erstellen...