AVR项目32x40像素屏幕

时间:2016-04-14 16:06:06

标签: c++ avr

我有一段时间以来一直在构建一个32x40像素的屏幕,我正在编写一些代码来操作。到目前为止,我已经设法使代码采用我所做的类(所有像素的位图)并使用它来打开像素,然后我可以使用控制器移动。

class display{
public:
    display(){
      for (uint8_t y = 0;y<40; y++){ 
        for(uint8_t x = 0; x<32;x++) {
            matrix[x][y] = 0;
        }
    }
    void set_pixel(uint8_t x, uint8_t y){
        if(x<32 && y<40) matrix[x/8][y] |= (1<<(x%8));
    }
    uint8_t get_pixel(uint8_t x, uint8_t y){
        if(x<32 && y<40){
            return (matrix[x/8][y]&(1<<x%8))>0 ? 1:0;
        }
        return 0;
    }
private:
    uint8_t matrix[4][40];
};

因为我需要节省一些空间,我不能使用uint_8 [3] [3];数组显示3x3像素图片;而是试图制作另一个不同大小的类:

class Image{
public:
    Image(uint8_t size_x,uint8_t size_y): Length_y(size_y), Length_x(size_x), x_bytes((size_x+7)/8){
        matrix = (uint8_t*) malloc(size_y*x_bytes); //malloc replaces the new operator
    void set_pixel(uint8_t x, uint8_t y){
        if(!OutOfRangeException(x,y)) matrix[x_bytes*y-(x/8)] |= (1<<(x%8));
    }
    bool get_pixel(uint8_t x,uint8_t y){
        if(OutOfRangeException(x,y)) return 0;
        return (matrix[x_bytes*y-(x/8)] & (1<<(x%8))) >0 ? 1:0;
    }
    void clear_pixel(uint8_t x,uint8_t y){
        if(!OutOfRangeException(x,y)) matrix[x_bytes*y-(x/8)] |= (1<<(x%8));
    }
    const uint8_t Length_y;
    const uint8_t Length_x;
private:
    uint8_t OutOfRangeException(uint8_t x, uint8_t y){
        if( x >= this->Length_x || y >= this->Length_y) return 1;
        return 0;
    }
    uint8_t *matrix;
    uint8_t x_bytes;    
};

当我在以下代码中单独使用它们时,Classes似乎工作正常:

Image img(3,3);
img.set_pixel(0,0);
for (uint8_t y = 0;y<3; y++){
    for(uint8_t x = 0; x<3 ;x++) {
        SendNumber(img.get_pixel(x,y));
    }
}

在我的串口监视器上生成:

1,0,0,
0,0,0,
0,0,0,

但是当我尝试使用图像位图将像素移动到显示器时,问题出现了:

if(img.get_pixel(0,0)) USART_send('T'); // the Char T is sent to the serial monitor    
display Screen;
if(img.get_pixel(0,0)) Screen.set_pixel(10,10); // a pixel is not set
if(1) Screen.set_pixel(15,15);                  // a pixel is set

从我从串口监视器获得的数据我可以看到img.get_pixel(0,0)应该评估为true。任何人都可以看到我做错了什么。我在ATmega328P(arduino nano)上运行此代码,我在atmel studio 6.2编程

0 个答案:

没有答案