bonsoir,
gwion a écrit :J'ai tendance à dire que puisqu'on ne peut pas lire la mémoire de l'écran, il faut le faire sur le bitmap. C'est là qu'il faut les fonctions de rusé renard :)
Tout à fée ... ça se complique nettement par rapport à un fond unique ..
et l'usage de la table bitmap de 57600 bytes contenant mon image BMP Tom & Jerry en 256 couleurs ( avec Palette !)
sert donc de mémoire ecran
J'utilise 3 structures de buffer , 1 par aiguille pour stocker lex X,Y,couleur, juste avant d'ecrire le dessin de l'aiguille
pour pouvoir remettre apres coup ,950mS plus tard l'arriere plans de l'image
pour l'instant mon test porte uniquement sur la troteuse..mais celle ci se deplace bien sans perturber l'arriere plan..
Il n'y a pas de BMP annexes ..c'est uniquement par calcul
j'affiche au depart mon image BMP
puis Tracé du pourtour graduations et chiffres des heures
nota: dans la mesure ou la longueur des aiguille ne deborde pas sur le pourtour,
je pourrai me passer de le recalculer/dessiner à chaque tour
lecture RTC pour syncrhoniser l'affichage sur changement de seconde
Tracé des aiguilles ( pour l'instant seule la 1ere : Troteuse)
delay de 950mS
Restitution de l'affichage des pixels sous la troteuse
Attente synchro nouvelle seconde*
et en boucle*
ma fonction d'affichage aiguille
Draw_Aiguille assume la sauvegarde du fond d'ecran, avant d'afficher l'aiguille
Restitue_Fond_BMP remet les couleurs BMP en bonne place .
..il faut au moins un 18Fx7k42 pour gerer ça ..actuellement utilisation de 70% de code et 63% de RAM
...reste à inclure minute et heure
Code : Tout sélectionner
typedef struct {
uint8_t x[Long_Troteuse];
uint8_t y[Long_Minute];
uint16_t bg[Long_Heure];
} Arriere_Plan;
Arriere_Plan SBack;
Arriere_Plan MBack;
Arriere_Plan HBack;
uint8_t Choix=1;
uint8_t n1;
void Draw_Clock_Face(void) {
int cc;
int i = 0;
for (i = 0; i < 360; i = i + 6) {
sx = Table_SinCos[i][0];
sy = Table_SinCos[i][1],
xx0 = sx * (Long_Troteuse + 14) + 119;
yy0 = sy * (Long_Troteuse + 14) + 119;
PutPixel(xx0, yy0, _Blanc);
xx0 = sx * (Long_Troteuse + 13) + 119;
yy0 = sy * (Long_Troteuse + 13) + 119;
PutPixel(xx0, yy0, _Blanc);
}
for (i = 0; i < 360; i = i + 30) {
sx = Table_SinCos[i][0];
sy = Table_SinCos[i][1];
xx0 = sx * (Long_Troteuse + 1) + 119; yy0 = sy * (Long_Troteuse + 1) + 119;
xx1 = sx * 119 + 119;
yy1 = sy * 119 + 119;
Draw_Line(xx0, yy0, xx1, yy1, _Vert);
}
DrawChar(108, 8, '1', _Blanc);
DrawChar(124, 8, '2', _Blanc);
DrawChar(115, 214, '6', _Blanc);
DrawChar(2, 108, '9', _Blanc);
DrawChar(224, 108, '3', _Blanc);
xz = Sec * 6;
sdeg = xz;
mdeg = Minut * 6;
hdeg = Hour > 12 ? (Hour - 12)*30 : Hour * 30;
hdeg = hdeg + (Minut / 4);
hx = Table_SinCos[hdeg][0]; hy = Table_SinCos[hdeg][1]; mx = Table_SinCos[mdeg][0];
my = Table_SinCos[mdeg][1];
sx = Table_SinCos[sdeg][0];
sy = Table_SinCos[sdeg][1],
ohx = hx * Long_Heure + 119;
ohy = hy * Long_Heure + 119;
omx = mx * Long_Minute + 119;
omy = my * Long_Minute + 119;
osx = sx * Long_Troteuse + 119;
osy = sy * Long_Troteuse + 119;
Choix =1;
Draw_Aiguille(osx, osy, 119, 119,1); __delay_ms(950); Restitue_Fond_BMP(1);
FillCircle(119, 119, 4, _Rouge);
}
void Restitue_Fond_BMP(int Aiguille)
{ uint8_t x,y,ch,cl;
uint16_t Index_Co=0;
switch (Aiguille)
{
case 1: n1=Long_Troteuse; break;
case 2: n1=Long_Minute; break;
case 3: n1=Long_Heure; break;
}
for (i=0; i<n1; i++)
{
switch (Aiguille)
{
case 1:
x=SBack.x[i];
y=SBack.y[i];
Index_Co=SBack.bg[i];
break;
case 2:
x=MBack.x[i];
y=MBack.y[i];
Index_Co=MBack.bg[i];
break;
case 3:
x=HBack.x[i];
y=HBack.y[i];
Index_Co=HBack.bg[i];
break;
default:
CPrint("Problemo\r\n");
}
if( (x > _maxX) || (y > _maxY)) return;
SendCmd(0x2A); SendData(x>>8);SendData(x & 0x00FF); SendData(x>>8);SendData(x & 0x00FF); SendCmd(0x2B); SendData(y>>8);SendData(y & 0x00FF); SendData(y>>8);SendData(y & 0x00FF); SendCmd(0x2C);
ch=Index_Co>>8;
cl=Index_Co& 0x00FF;
SendData(ch);
SendData(cl);
}
}
Troteuse_Tom_et_Jerry.jpg
.. à suivre
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.