Add sample framebuffer shifting code
This commit is contained in:
parent
1aa9341549
commit
9c912ffb85
@ -2,3 +2,32 @@
|
|||||||
#include "framebuffer.h"
|
#include "framebuffer.h"
|
||||||
|
|
||||||
FRAMEBUFFER;
|
FRAMEBUFFER;
|
||||||
|
|
||||||
|
#if FB_DEPTH==1
|
||||||
|
|
||||||
|
void fb_fill(uint8_t c) {
|
||||||
|
memset(framebuffer, c, sizeof(framebuffer[0][0]) * FB_HEIGHT * FB_WIDTH_BYTES);
|
||||||
|
}
|
||||||
|
|
||||||
|
void fb_shift(uint16_t newcol) {
|
||||||
|
int x, y;
|
||||||
|
uint8_t transfer = 0, tmp = 0;
|
||||||
|
for (y = 0; y < FB_HEIGHT; y++) {
|
||||||
|
for (x = FB_WIDTH_BYTES - 1; x >= 0; x--) {
|
||||||
|
tmp = transfer;
|
||||||
|
transfer = (framebuffer[y][x] & 1);
|
||||||
|
framebuffer[y][x] = (framebuffer[y][x] >> 1) | (tmp << 7);
|
||||||
|
}
|
||||||
|
transfer = 0;
|
||||||
|
FB_SET(FB_WIDTH - 1, y, newcol & 1);
|
||||||
|
newcol = newcol >> 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif FB_DEPTH==8
|
||||||
|
|
||||||
|
void fb_fill(uint8_t c) {
|
||||||
|
memset(framebuffer, c, sizeof(framebuffer[0][0]) * FB_HEIGHT * FB_WIDTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#define CEILDIV(x, y) (((x)+((y)-1))/(y))
|
#define CEILDIV(x, y) (((x)+((y)-1))/(y))
|
||||||
|
|
||||||
@ -7,20 +8,21 @@
|
|||||||
#define FB_WIDTH_BYTES CEILDIV(FB_WIDTH, 8)
|
#define FB_WIDTH_BYTES CEILDIV(FB_WIDTH, 8)
|
||||||
#define FRAMEBUFFER uint8_t framebuffer[FB_HEIGHT][FB_WIDTH_BYTES];
|
#define FRAMEBUFFER uint8_t framebuffer[FB_HEIGHT][FB_WIDTH_BYTES];
|
||||||
#define FB_SET(w,h,c) if (c) { \
|
#define FB_SET(w,h,c) if (c) { \
|
||||||
framebuffer[h][w>>3] |= (1 << (w & 7)); \
|
framebuffer[h][(w)>>3] |= (1 << ((w) & 7)); \
|
||||||
} else { \
|
} else { \
|
||||||
framebuffer[h][w>>3] &= ~(1 << (w & 7)); \
|
framebuffer[h][(w)>>3] &= ~(1 << ((w) & 7)); \
|
||||||
}
|
}
|
||||||
#define FB_CLEAR() memset(framebuffer, 0, sizeof(framebuffer[0][0]) * FB_HEIGHT * FB_WIDTH_BYTES);
|
|
||||||
|
|
||||||
#elif FB_DEPTH==8
|
#elif FB_DEPTH==8
|
||||||
|
|
||||||
#define FRAMEBUFFER uint8_t framebuffer][FB_HEIGHT][FB_WIDTH];
|
#define FRAMEBUFFER uint8_t framebuffer][FB_HEIGHT][FB_WIDTH];
|
||||||
#define FB_SET(w,h,c) framebuffer[h][w] = c
|
#define FB_SET(w,h,c) framebuffer[h][w] = c
|
||||||
#define FB_CLEAR() memset(framebuffer, 0, sizeof(framebuffer[0][0]) * FB_HEIGHT * FB_WIDTH);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef DONT_DECLARE_FRAMEBUFFER
|
#ifndef DONT_DECLARE_FRAMEBUFFER
|
||||||
extern FRAMEBUFFER
|
extern FRAMEBUFFER
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void fb_fill(uint8_t c);
|
||||||
|
void fb_shift();
|
||||||
|
17
pingpong.c
17
pingpong.c
@ -1,9 +1,11 @@
|
|||||||
#include <util/delay.h>
|
#include <util/delay.h>
|
||||||
#include "drivers/framebuffer.h"
|
#include "drivers/framebuffer.h"
|
||||||
|
|
||||||
int main(void) {
|
void ani_recorder(unsigned int count) {
|
||||||
int8_t px, py, mx, my;
|
int8_t px, py, mx, my;
|
||||||
|
|
||||||
|
fb_fill(0);
|
||||||
|
|
||||||
px = 0;
|
px = 0;
|
||||||
py = 0;
|
py = 0;
|
||||||
mx = 1;
|
mx = 1;
|
||||||
@ -24,9 +26,11 @@ int main(void) {
|
|||||||
|
|
||||||
if (py >= FB_HEIGHT - 1) {
|
if (py >= FB_HEIGHT - 1) {
|
||||||
my = -1;
|
my = -1;
|
||||||
|
count --;
|
||||||
}
|
}
|
||||||
|
|
||||||
FB_SET(px,py,0);
|
FB_SET(px,py,0);
|
||||||
|
if (!count) return;
|
||||||
px += mx;
|
px += mx;
|
||||||
py += my;
|
py += my;
|
||||||
FB_SET(px,py,1);
|
FB_SET(px,py,1);
|
||||||
@ -34,3 +38,14 @@ int main(void) {
|
|||||||
_delay_ms(50);
|
_delay_ms(50);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
uint16_t i = 0;
|
||||||
|
while(1) {
|
||||||
|
ani_recorder(4);
|
||||||
|
for (i = 0; i < 256; i++) {
|
||||||
|
_delay_ms(50);
|
||||||
|
fb_shift(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user