Hallo, ich arbeite mit WINAVR und möchte die Schrift auf dem Display doppelt so groß darstellen. Die Font sind 8x12. Dabei soll aus einem Byte zwei Byte werden, in dem dann jedes Bit doppelt erscheint. Z.B. Byte ist: 10010110 soll 2 Byte: 11000011 00111100 werden. Das ist meine Idee um die Schriftgröße zu verdoppeln. Bisher ist mir noch keine Lösung eingefallen. Über jede Hilfe zur Lösung in "C" würde ich mich sehr freuen. Gruß Jochen
Hallo Hajo, ein Byte hat 8 Bit, also kommt man mit 8 if-Abfragen in C an's Ziel. Oder? In AVR Assembler ist das dann noch etwas kürzer.
> soll 2 Byte: 11000011 00111100 werden. >Das ist meine Idee um die Schriftgröße zu verdoppeln.
1 | unt8_t data_small; |
2 | uint16_t data_big; |
3 | |
4 | data_big = 0; |
5 | if (data_small & 0x80) data_big |= 0xC000; |
6 | if (data_small & 0x40) data_big |= 0x3000; |
7 | |
8 | . . . |
Hier ist eine klare Bauanleitung
1 | uint8_t src, dest1, dest2; |
2 | dest1 = dest2 = 0; |
3 | |
4 | // first check: Bit7
|
5 | if (src & 0x80) { |
6 | dest1 |= 0xc0; |
7 | }
|
8 | |
9 | // more code !
|
10 | |
11 | // last check: Bit0
|
12 | if (src & 0x01) { |
13 | dest2 |= 0x03; |
14 | }
|
Hallo, vielen Dank für die schnellen Antworten. Das werde ich gleich ausprobieren. Wie ich das so sehe ist das die Lösung. Danke Jochen
Und es ist so logisch, mit der Logik kann man die Richtigkeit beweisen und benötigt keine Tests oder einen Simulator !
Karl M. schrieb: > Und es ist so logisch, mit der Logik kann man die Richtigkeit beweisen > und benötigt keine Tests oder einen Simulator ! Und man braucht es eigentlich auch gar nicht umsetzen.
Hier gab es einen ähnlichen Thread mit weiteren Vorschlägen, die du dir zu Gemüte führen kannst: Beitrag "Bitmanipulation beschleunigen"
Karl M. schrieb: > // more code ! less is more ;)
1 | uint16_t bigger(uint8_t i) |
2 | {
|
3 | uint16_t o = 0x0000; |
4 | uint16_t u16; |
5 | uint8_t u8; |
6 | |
7 | for(u16 = 0x0003u, u8 = 0x01u; u8 != 0x00u; u16 <<= 2, u8 <<= 1) |
8 | {
|
9 | if(i & u8) |
10 | {
|
11 | o |= u16; |
12 | } |
13 | } |
14 | |
15 | return(o); |
16 | } |
mfg mf
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.