plop,
bon avant de vous expliquer mon problemme, je vais vous expliquer ce que je veux faire.
je dois afficher l'heure sur un ecan LCD graphique de 128x64 pixel.
l'ecran a donc 64 pixel de haut, divisé en 8 page. pour ecrire dessus, on choisit la page, la colonne et on envoie des octet, dans l'octet un 1 = pixel noir un 0 = pixel eteint.
j'ai donc creer des caractere de 20x32pixel
il sont donc diviser un 4 page, je les ait stocker dans un tableau de 2000 octet (ecrit a la min =D)
prenon par exemple le 2, on se positione en page 2(pour qu'il soit centré)
puis a la collone voulu et on balance la salve de la premiere ligne de 20 octet.
on se positione en page 3, puis on revient a la collonne voulu et on balance la salve de la deuxiemme ligne et ainsi de suite jusqu'a faire les 4 ligne.
voila le tableau qui contient les caractere (pas en entier du a la limite de caractere):
et le code qui balance les salve :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 const int8 font20x32[] = { 0x00,0x80,0xE0,0xF0,0xF8,0xF8,0xFC,0xFC,0x7E,0x3E,0x3E,0x7E,0xFC,0xFC,0xF8,0xF8,0xF0,0xE0,0x80,0x00, //0-1 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00, //0-2 0x00,0x0F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFC,0xF0,0xE0,0xE0,0xF0,0xFC,0xFF,0xFF,0xFF,0x7F,0x3F,0x0F,0x00, //0-3 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, //0-4 0x00,0x00,0x80,0xC0,0xE0,0xE0,0xE0,0xF0,0xF8,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00, //1-1 0x00,0x00,0x0F,0x0F,0x07,0x07,0x02,0x02,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, //1-2 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, //1-3 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00, //1-4 0x00,0xC0,0xE0,0xF0,0xF8,0xF8,0xFC,0xFC,0x7E,0x3E,0x3E,0x3E,0xFE,0xFC,0xFC,0xF8,0xF8,0xF0,0xE0,0x00, //2-1 0x00,0x01,0x03,0x07,0x07,0x07,0x87,0x83,0xC0,0xE0,0xF0,0xF8,0xFE,0xFF,0xFF,0x7F,0x7F,0x3F,0x1F,0x00, //2-2 0x00,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xF3,0xF3,0xF1,0xF0,0xF0,0xF0,0xF0,0xF0,0x00, //2-3 0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00, //2-3 0x00,0xC0,0xE0,0xF0,0xF8,0xF8,0xFC,0xFC,0x3E,0x3E,0x3E,0x7E,0xFC,0xFC,0xF8,0xF8,0xF0,0xE0,0x80,0x00, //3-1 0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x30,0x78,0x78,0x78,0x7E,0xFF,0xFF,0xFF,0xFF,0xEF,0xC7,0x01,0x00, //3-2 0x00,0x18,0x38,0x7C,0xFC,0xFC,0xFC,0xF8,0xF0,0xE0,0xE0,0xE0,0xF0,0xFF,0xFF,0xFF,0xFF,0xEF,0x0F,0x00, //3-3 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x03,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00, //3-4 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFE,0xFE,0x00,0x00,0x00, //4-1 0x00,0x80,0xE0,0xF0,0xF8,0xFC,0x7E,0x3F,0x1F,0x0F,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00, //4-2 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x00, //4-3 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00, //4-4 0x00,0x00,0xC0,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x00, //5-1 0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x1C,0x1E,0x1E,0x1E,0x7E,0xFE,0xFE,0xFC,0xFC,0xF8,0xC0,0x00, //5-2 0x00,0x18,0x7C,0x7C,0xFC,0xFC,0xFC,0xF8,0xF0,0xE0,0xE0,0xE0,0xF8,0xFF,0xFF,0xFF,0x7F,0x3F,0x0F,0x00, //5-3 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, //5-4 };
void put_data(int8 donnee) place les octet sur le port de l'ecran
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 void send_column_cara(int8 donnee) { output_high(RS); output_low(RW); put_data(donnee); enable(); } void BigCara(long number, int col) { long adresse; long CaraEnd; long i =0; adresse = number*80; page(2); column(col); CaraEnd = adresse+20; i = adresse; while(i<caraend) { send_column_cara(font20x32[i]); i=i+1; } page(3); column(col); adresse = adresse+20; CaraEnd = adresse+20; i = adresse; while(i<caraend) { send_column_cara(font20x32[i]); i=i+1; } page(4); column(col); adresse = adresse+20; CaraEnd = adresse+20; i = adresse; while(i<caraend) { send_column_cara(font20x32[i]); i=i+1; } page(5); column(col); adresse = adresse+20; CaraEnd = adresse+20; i = adresse; while(i<caraend) { send_column_cara(font20x32[i]); i=i+1; } }
void enable(void) envoie une impulsion a l'ecran qui lui fait lire son port
mon problemme est que Toute les donnée qui on une place superieure a 255 dans le tableau sont eronné (quand je lui demande d'afficher un 5 il affiche un bout du 4 et un bout du 2 par exemple)
je ne vois pas pourquoi, tous mes compteur dont des long donc en theorie je ne devrais pas avoir de problemme a passer au dessus de 255
voila un exemple de ce que j'ai quand je veux envoyer 0 1 2 3 4
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 void main(void) { //init etc bigcara(0,0); bigcara(1,21); bigcara(2,42); bigcara(3,63); bigcara(4,84); bigcara(5,105); }
voyez vous un problemme dans mon code?
je pourrais bien entendue contourner le problemme en faisant plusieur tableau et en utilisant un break, mais ça ne serait pas tres élégant.
merci
ps : ce compilateur (CCS V4.057) n'est pas sensible a la case donc ne vous etonner pas si vous voyer la meme variable avec ou sans maj, je n'ai pas encore netoyer le code
psps : on critique souvent aussi le fait que je j'utilise des while quand je pourrais utiliser des for, je n'aime pas les for, c'est tout
Partager