数码相框项目

来源:互联网 发布:windos nodejs 80端口 编辑:程序博客网 时间:2024/06/11 02:01

ASCII码:共256个,在ASCII码点阵(fontdata)中,用8*16位表示一个ASCII码字模(dots)。也就是16个字节。

void lcd_put_ascii(int x, int y, char c)

unsigned char* dots = fontdata_8x16[c*16]   /* c*16表示一个字符占16个字节, dots指向的是从第字符的ASCII码值*16的项*/

要在LCD上显示字模点阵,就要根据fontdata的数据,一个对一个位的扫描

for (int i=0; i<16; i++)

{

for (int b=7; b>=0; b--)  

{

if (byte & (1<<b))  /* 从 第0行,一行8位,也就是一个字节,从高位开始扫, 扫0~7列 */

lcd_put_pixel(x+7-b, y+i);

}

}


---------------------------------------------------------------------------------------------------------------------------------------------------------------------

要获取fbmem中的一些可变参数,var, 和不可变参数fix

struct struct fb_var_screeninfo var;
struct fb_fix_screeninfo fix;


fd_fb = open("/dev/fb0", O_RDWR);

if (ioctl(fd_fb, FBIOGET_VSCREENINFO, &var))
{
printf("can't get var\n");
return -1;
}

if (ioctl(fd_fb, FBIOGET_FSCREENINFO, &fix))

{
printf("can't get fix\n");
return -1;
}



为framebuffer在SDRAM中映射一块内存,相当于显存。以后就可以直接对内存操作,大小为screen_size = xres*yres*bis_per_pixel/8字节,这块内存的地址决定了整块LCD上的每个像素的颜色,即每一个像素的颜色用16位来表示。

fd_fb = open("/dev/fb0", O_RDWR);

fbmem =(unsigned char*) mmap(NULL, screen_size, PROT_WRITE | PROT_READ, MAP_SHARED, fd_fb, 0);


把汉字库文件是网上找的,也映射到SDRAM中去,直接对内存数组操作,就可以找到对应汉字的字模点阵

fd_hzk16 = open("HZK16", O_RDONLY);

汉字库的大小用fstat函数来计算出,man fstat就能知道用法

struct stat hzk_stat;

if (fstat(fd_hzk16, &hzk_stat))

{

printf("cant get hzk_stat\n");

return -1;

}


fzkmem = (unsigned char*)mmap(NULL, st.size, PROT_READ , MAP_SHARED,  fd_hzk16, 0);


memset(fbmem, 0, screen_size);  /* 清屏设为黑色 */

lcd_put_ascii(var.xres/2,var.yres/2, 'A');


原创粉丝点击