ok6410lcd測試程式
1.在螢幕上分別顯示紅綠藍三個長方形:
/*自定義結構體用來在使用者空間裡管理幀緩衝的資訊*/
typedef struct fd_dev
fb_dev_t;
/*實現緩衝裝置的開啟和關閉操作的介面*/
int fb_open(fb_dev_t *fbd, char *fbn)
/*獲取lcd的可變引數*/
ioctl(fbd->fd, fbioget_vscreeninfo, &vinfo);
//將可變引數的中的相關資料儲存到自定的結構體fbd中
fbd->xres = vinfo.xres;
fbd->yres = vinfo.yres;
fbd->bpp = vinfo.bits_per_pixel;
fbd->siz = fbd->xres * fbd->yres *fbd->bpp / 8;
printf("%dx%d,%dbpp,screensize = %d\n", fbd->xres, fbd->yres, fbd->bpp, fbd->siz);
/*將幀緩衝對映到記憶體*/
fbd->pfb = mmap(0, fbd->siz, prot_read|prot_write, map_shared, fbd->fd,0);
if((int)fbd->pfb == -1)
return 0;
} int fb_close(fb_dev_t *fbd)
/*填充制定的巨型區域*/
int fb_drawrect(fb_dev_t *fbd, int x0, int y0, int w, int h, int color)
return 0;
}
#endif
#include "bmplib.h"
#define fb_dev_name "/dev/fb0"
#define red_color565 0x0f100
#define green_color565 0x007e0
#define blue_color565 0x0001f
int main(int argc, char *argv)
else
printf("16 bits only!\n");
//fb_drawbmp(fbd,0,0,argv[1]);
fb_close(fbd);
return 0;
} 2.在lcd上顯示點陣圖bmplib.h
#ifndef bmplib_h
#define bmplib_h
typedef struct bmp_file_header_t;
typedef struct bmp_info_header_t;
/*bitmap格式的影象檔案會帶有54位元組的資訊頭,其中包含了影象和檔案的基本資訊,
緊接在檔案頭之後的就是實際的影象資料*/
typedef struct rgb_32_t;
/*對位圖進行操作*/
typedef structbmp_t;
//字元形到整形的轉換
int char_to_int(char *ch)
/*開啟位圖操作*/
int bmp_open(bmp_t *bmp, char *bmpn)
read(bmp->fd, &fhr, sizeof(bmp_file_header_t));//讀取檔案頭
read(bmp->fd, &ihr, sizeof(bmp_info_header_t));//讀取資訊頭
bmp->width = char_to_int(ihr.width);
bmp->height = char_to_int(ihr.height);
bmp->bitcount = char_to_int(ihr.bitcount);//畫素位數
bmp->siz = (bmp->width * bmp->height * bmp->bitcount) / 8;
printf("bmp->width = %d\n", bmp->width);
printf("bmp->height = %d\n", bmp->height);
printf("bmp->bitcount = %d\n", bmp->bitcount);
printf("bmp->siz = %d\n", bmp->siz);
bmp->data = malloc(bmp->siz);//為位圖資料分配儲存空間
read(bmp->fd, bmp->data, bmp->siz);//讀取資料
bmp->curp = (rgb_32_t *)bmp->data; //獲取當前畫素點
return 0;
} int bmp_close(bmp_t *bmp)
/* 因為開發板的幀緩衝區在驅動中被設定為16位資料表示乙個畫素點,因此需要對24或
32位的點陣圖進行轉換,使用下面的函式
*/
static inline short transfer_to_16bit(char r, char g, char b)
static inline short bmp_get_pixel_16bit(bmp_t *bmp)
//移動到下一畫素點
static inline void bmp_next_pixel(bmp_t *bmp)
/*繪製位圖*/
int fb_drawbmp(fb_dev_t *fbd, int x0, int y0, char *bmpn)
*( (short*)(fbd->pfb) + y * fbd->xres+x ) = bmp_get_pixel_16bit(&bmp);
bmp_next_pixel(&bmp);//移動到下一畫素點
} }
bmp_close(&bmp);
return 0;
} #endif
測試程式:
lcd_bmp.c
#include "bmplib.h"
#define fb_dev_name "/dev/fb0"
#define red_color565 0x0f100
#define green_color565 0x007e0
#define blue_color565 0x0001f
int main(int argc,char *argv)
else
printf("16 bits only!\n");
*/
fb_drawbmp(fbd, 0, 0, argv[1]);
fb_close(fbd);
return 0;
} 位圖程式測試方法,例如這裡有一張名為clock.bmp的
編譯上述檔案後生成lcd_bmp
執行如下命令:
./lcd_bmp clock.bmp
LCD驅動程式移植
對lcd的操作可以像串列埠一樣,通過終端裝置層的封裝 dev tty 裝置 來輸出內容,也可以通過frame buffer dev fb 裝置 直接在視訊記憶體上 繪製 影象。tty 終端裝置 和frame buffer驅動程式的框架 下面根據每層的檔案講解一下上圖 1 顯示驅動程式 2 鍵盤驅動程...
LCD裝置驅動程式
對螢幕進行抓屏 cp dev fb0 myfile.png 幀緩衝裝置的主裝置號29,次裝置號0 31,也就是dev fb0 dev fb31 填充乙個fbinfo結構。用register framebuffer fbinfo 將fbinfo結構註冊到核心,對於fbinfo結構,最基本的是fs op...
LCD驅動程式(一)
lcd顯示原理 在jz2440上,想要讓lcd顯示,需要幾個部分1 lcd硬體 2 開發板上的lcd控制器 3 sdram記憶體存放資料frambuffer 4 可能還需要乙個調色盤 實際上是一塊記憶體,裡面資料可以組成各種顏色 顯示原理 在開發板上操作lcd控制器,使得開發板向sdram記憶體裡去...