?? lcd4.c
字號(hào):
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
//#define row 2//縱坐標(biāo)放大倍數(shù)
//#define col 2 //橫坐標(biāo)放大倍數(shù)
#define row 1
#define col 1
struct fb_var_screeninfo vinfo;
struct fb_fix_screeninfo finfo;
long screensize=0;
char *fbp = 0;
//===========================================================畫點(diǎn)函數(shù)
int DrawPixel ( int x,int y,char color,char flag )
{
//long location=x*2+y*1280;
long location=(x+vinfo.xoffset)*(vinfo.bits_per_pixel/8)+(y+vinfo.yoffset)*finfo.line_length;
if(flag)
{
switch(color)
{
case 'g':
{ *(fbp + location) = 0xe0;
*(fbp + location + 1) = 0x07; /* 綠色的色深*/
break;}
case 'r':
{*(fbp + location) = 0x0; /* 紅色的色深*/
*(fbp + location+1) = 0xf8;
break;}
case 'b':
{*(fbp + location) = 0x1f; /* 藍(lán)色的色深*/
*(fbp + location+1) = 0x0;
break;}
}
}
else
{
*(fbp + location) = 0x0; /* 紅色的色深*/
*(fbp + location+1) = 0x0;
}
}
//===============================================================顯示一個(gè)漢字
DispChar(int x,int y,const char *str ,char flag )
{
int i,n,j,k,m;
FILE *fp;
char buffer[32];
unsigned char qh,wh;
unsigned long offset;
if((fp=fopen("./hzk16","rb"))==NULL)
{
printf("error,please try again\n");
return 0;
}
while(*str)
{
qh=*(str)-0xa0;
wh=*(str+1)-0xa0;
offset=(94*(qh-1)+(wh-1))*32L;//計(jì)算該漢字在字庫(kù)中偏移量
fseek(fp,offset,SEEK_SET);
fread(buffer,1,32,fp); //取出漢字32字節(jié)的點(diǎn)陣字模存入buffer中(一個(gè)漢字)
for(i=0;i<16;i++)
for(n=0;n<row;n++)
for( j=0;j<2;j++)
for( k=0;k<8;k++)
for(m=0;m<row;m++)
if((buffer[i*2+j]>>(7-k))&0x1)
DrawPixel(x+8*j*col+k*col+m,y+i*row+n,'r',1);
//將32位字節(jié)的點(diǎn)陣按位在屏幕上畫出來
str+=2;//因?yàn)橐粋€(gè)漢字內(nèi)碼占用兩個(gè)字節(jié),所以s必須加2
//x+=35;
x+=30;
}
return 1;
}
//=============================================================主函數(shù)
int main () {
int fp=0;
int x,y;
fp = open ("/dev/fb0",O_RDWR);//打開液晶的緩存
if (fp < 0){
printf("Error : Can not open framebuffer device\n");
exit(1);
}
if (ioctl(fp,FBIOGET_FSCREENINFO,&finfo)){
printf("Error reading fixed information\n");
exit(2);
}
if (ioctl(fp,FBIOGET_VSCREENINFO,&vinfo)){
printf("Error reading variable information\n");
exit(3);
}
screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
printf("%d,%d", vinfo.xres,vinfo.yres);
/*這就是把fp所指的文件中從開始到screensize大小的內(nèi)容給映射出來,得到一個(gè)指向這塊空間的指針*/
fbp =(char *) mmap (0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fp,0);
if ((int) fbp == -1)
{
printf ("Error: failed to map framebuffer device to memory.\n");
exit (4);
}
memset(fbp , 0 ,screensize);//清屏
//寫幾個(gè)字
//for(x=150;x<360;x++)
for(x=80;x<160;x++)
for(y=72;y<108;y++)
//for(y=150;y<;x++)
DrawPixel(x,y,'b',1);
//DispChar(150,75,"直",1);
/*
DispChar(150,75,"直接進(jìn)入系統(tǒng)",1);
DispChar(150,125,"使用網(wǎng)線升級(jí)",1);
DispChar(150,175,"使用優(yōu)盤升級(jí)",1);
*/
DispChar(100,75,"電腦",1);
DispChar(400,75,"顯示器",1);
DispChar(600,75,"回收站",1);
DispChar(100,275,"瀏覽器",1);
DispChar(400,275,"寬帶",1);
DispChar(600,275,"信箱",1);
munmap (fbp, screensize); /*解除映射*/
close (fp); /*關(guān)閉文件*/
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -