亚洲天堂高清一二三,久久久久久久久久性生活,精品国产污污免费网站AⅤ,色橹橹欧美在线观看视频高清

Ultimaker2Malin函數(shù)詳解——lcd_lib_draw_gfx(0, 22, ultimakerTextGfx); 

2016-12-05 10:16
Ultimaker2Marlin函數(shù)詳解.jpg

位置:UltiLCD2_low_lib.c函數(shù)引用:lcd_lib_draw_gfx(0, 22, ultimakerTextGfx);
函數(shù)功能:開機(jī)顯示Ultimaker logo
              顯示位置是第22行第0列開始
             該函數(shù)把ultimakerTextGfx數(shù)組里面的logo數(shù)據(jù)寫進(jìn)lcd_buffer數(shù)組里面,然后在一直在lcd_update函數(shù)里面更新顯示。
函數(shù)原型:
void lcd_lib_draw_gfx(uint8_t x, uint8_t y,const uint8_t* gfx)
{
    uint8_tw = pgm_read_byte(gfx++); //w=128
    uint8_th = (pgm_read_byte(gfx++) + 7) / 8; //h=3
    uint8_tshift = y % 8; //shift=6
    uint8_tshift2 = 8 - shift; //shift2=2
    y /= 8;//y=2
                                        //x=0


    for(;h; h--)
   {
       if (y >= LCD_GFX_HEIGHT /8) break;


       uint8_t* dst0 = lcd_buffer +x + y * LCD_GFX_WIDTH;
       uint8_t* dst1 = lcd_buffer +x + y * LCD_GFX_WIDTH + LCD_GFX_WIDTH;
       for(uint8_t _w = w; _w;_w--)
       {
          uint8_t c = pgm_read_byte(gfx++);
          *dst0++ |= c << shift;
          if (shift && y < 7)
              *dst1++ |=c >> shift2;
       }
       y++;
   }
}


測試代碼:
環(huán)境:vc++6.0 EasyX 庫


//ultimakerTextGfx轉(zhuǎn)成lcd_buffer數(shù)據(jù)格式
#include
#include
#include
#include "common.h"

const uint8_t ultimakerTextGfx[]= {
    128, 21, //size
   0x6,0x6,0x6,0x6,0xfe,0xfe,0xfe,0xfe,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
   0xfc,0xfe,0xfe,0xfe,0xfc,0x0,0x0,0x0,0xe,0xfe,0xfe,0xfe,0xfe,0x0,0x0,0xe0,
   0xfc,0xfe,0xfe,0xfc,0xe0,0xe0,0x0,0x0,0x0,0xce,0xce,0xce,0x0,0x0,0x0,0xc0,
   0xc0,0xc0,0xc0,0xc0,0xc0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0xc0,0xc0,0x80,
   0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x80,
   0x80,0x0,0x0,0x0,0x0,0x6,0xfe,0xfe,0xfe,0xfe,0x0,0x0,0x0,0x0,0x80,0xc0,
   0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0xc0,0xc0,0xc0,0x80,0x80,0x80,
   0x0,0x0,0x0,0x0,0xc0,0xc0,0xc0,0xc0,0x0,0x80,0xc0,0xc0,0xc0,0xc0,0x80,0x0,

   0x0,0x0,0x0,0x0,0x7f,0xff,0xff,0xff,0xff,0x80,0x0,0x0,0x0,0x0,0x0,0x80,
   0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x0,0x0,0x0,
   0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0xff,0x0,0x0,0x0,0x81,
   0xf1,0xff,0xff,0x3f,0xf,0x3f,0xff,0xfc,0xf0,0xf0,0xfc,0xff,0x3f,0xf,0x3f,0xff,
   0xfe,0xf8,0x80,0x0,0x0,0x0,0xc1,0xe1,0xf1,0xf1,0x71,0x31,0x1,0x1,0x83,0xff,
   0xff,0xff,0xfc,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x0,0xc,0x3e,0xff,0xff,0xf7,
   0xc3,0x1,0x0,0x0,0x0,0xfc,0xfe,0xff,0x87,0x3,0x11,0x31,0x31,0x33,0x3f,0x3f,
   0x3f,0x1e,0x0,0x0,0x1,0xff,0xff,0xff,0xff,0x7,0x3,0x1,0x1,0x1,0x1,0x0,

   0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x7,0x7,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
   0x7,0x7,0x7,0xf,0xf,0x6,0x0,0x0,0x0,0x7,0xf,0xf,0x7,0x0,0x0,0x0,
   0x7,0xf,0xf,0x7,0x0,0x0,0x0,0x0,0x0,0xf,0xf,0xf,0x0,0x0,0x6,0xf,
   0xf,0x7,0x1,0x0,0x0,0x0,0x1,0x7,0xf,0xf,0x7,0x1,0x0,0x0,0x0,0x1,
   0x7,0xf,0xf,0x6,0x0,0x0,0x3,0x7,0xf,0xf,0xe,0xe,0x6,0x7,0x3,0x7,
   0xf,0xf,0x7,0x0,0x0,0x0,0x7,0xf,0xf,0x7,0x0,0x0,0x0,0x0,0x3,0xf,
   0xf,0xf,0x6,0x0,0x0,0x0,0x3,0x7,0x7,0xf,0xe,0xe,0xe,0xe,0xe,0xe,
   0x6,0x0,0x0,0x0,0x0,0xf,0xf,0xf,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};

#define LCD_GFX_WIDTH 128
#define LCD_GFX_HEIGHT 64
uint8_t lcd_buffer[LCD_GFX_WIDTH * LCD_GFX_HEIGHT / 8];

static inline uint8_t pgm_read_byte(const void* ptr)
{
    return *(constuint8_t*)ptr;
}

//lcd_lib_draw_gfx(0, 22, ultimakerTextGfx);
void lcd_lib_draw_gfx(uint8_t x, uint8_t y, const uint8_t*gfx)
{
    uint8_t w =pgm_read_byte(gfx++); // w=128 總列數(shù) X
    uint8_t h =(pgm_read_byte(gfx++) + 7) / 8; //(21+7)/8 h=3 總行數(shù) Y
    uint8_t shift = y % 8; //22%8shift=6   左移位數(shù)
    uint8_t shift2 = 8 - shift;//8-2   shift2=2   右移位數(shù)
    y /= 8; //22/8      y=2  顯示的行位置
                                         //          x=0  顯示的列位置

    for(; h; h--)//3行
    {
       if (y >= LCD_GFX_HEIGHT / 8)break;//判斷行數(shù)y值是否超出屏幕的行數(shù),y最大是8

       uint8_t* dst0 = lcd_buffer + x + y *LCD_GFX_WIDTH;//指向數(shù)組[0+2*128]的位置,第3行第一個(gè)位置(3->4->5)
       uint8_t* dst1 = lcd_buffer + x + y *LCD_GFX_WIDTH +LCD_GFX_WIDTH;//指向數(shù)組[0+2*128+128]的位置,第4行第一個(gè)位置(4->5->6)
       for(uint8_t _w = w; _w; _w--)//128列
       {
           uint8_t c= pgm_read_byte(gfx++);//把數(shù)組的值賦給變量c(一個(gè)字節(jié))
           *dst0++ |=c << shift;//低2位
//第3行字節(jié)最低的2位變?yōu)楦?位,即把整個(gè)數(shù)組網(wǎng)上挪了2個(gè)位
//或等于的作用是保留原來lcd_buffer數(shù)組里面的其他區(qū)域的值
                 //本來是在ultimakerTextGfx數(shù)組的低2位數(shù)據(jù)和高6位數(shù)據(jù)拆開,分別賦值到上下兩個(gè)字節(jié),
//比如第二行的高2位是ultimakerTextGfx數(shù)組的低2位數(shù)據(jù),第三行低6位是ultimakerTextGfx數(shù)組的高6位數(shù)據(jù)
           if (shift&& y <7)//shift==0是不需要挪動(dòng),y<7作用是限定在一個(gè)字節(jié)里面,如果等于7,那么dst就指向了別的字節(jié)
              *dst1++ |= c >>shift2;//高6位,和dst0同理,分別指向一個(gè)字節(jié)的高位和低位
                  
       }
       y++;//2->3->4
    }
}

void main()
{
unsigned int i,j,k;
char c='#';
initgraph(8*128, 16*64);
lcd_lib_draw_gfx(0, 22, ultimakerTextGfx);

for(i=0;i<8;i++)//8行掃描
{
for(k=0;k<8;k++)//字節(jié)8位掃描
{
for(j=0;j<128;j++)//128列掃描
{
if( lcd_buffer[i*128+j]&(0x01<<k) )
{      
outtextxy(j*8, (i*8+k)*16, c);
}
}
}
}
getch();
closegraph();
}
聲明:3D打印資源庫(3dzyk)內(nèi)網(wǎng)友所發(fā)表的所有內(nèi)容及言論僅代表其本人,并不代表3D打印資源庫(3dzyk)觀點(diǎn)和立場;如對文章有異議或投訴,請联系kefu@3dzyk.cn。
標(biāo)簽:
Ultimaker2Malin函數(shù)詳解——lcd_lib_draw_gfx(0, 22, ultimakerTextGfx); 
快速回復(fù) 返回頂部 返回列表
宝鸡市| 滁州市| 日喀则市| 商城县| 米易县| 翁牛特旗| 苍溪县| 确山县| 龙游县| 新乡县| 泰和县| 安西县| 岳普湖县| 崇礼县| 定西市| 永吉县| 汝阳县| 佛学| 定安县| 监利县| 临城县| 北宁市| 余姚市| 密云县| 九龙城区| 于田县| 宁武县| 涡阳县| 边坝县| 阿瓦提县| 原阳县| 衡水市| 聂荣县| 耿马| 托克逊县| 元氏县| 乌兰浩特市| 新干县| 康定县| 定兴县| 姚安县|