LINUX學習 點陣字元顯示

2021-09-14 03:08:57 字數 2471 閱讀 3929

以前學的內容都沒有做記錄 導致現在都忘的差不多了 這次就給自己做個記錄 

本節主要實現的功能就是在lcd上顯示乙個英文本元與中文字元。

1、**的實現

主要就是直接操作視訊記憶體,/dev/fb0是linux系統下幀緩衝裝置的裝置檔案,我們可以直接改變其中內容完成在螢幕上畫圖。

然後獲取到螢幕的可變引數和固定引數,最後給對使用mmap對視訊記憶體進行對映,之後我們就可以直接像運算元組一樣操作視訊記憶體了。

2、**注釋與擴充套件

在這段**之前有乙個字型檔檔案 太長就不貼了。

擴充套件是在原**的基礎增加了多個中文字元的顯示,實現也很簡單,lcd_put_chinese新增乙個字串長度形參,在傳入時加strlen獲取字串長度,函式內部增加乙個for迴圈,x軸增加乙個自加。

int fd_fb;

//struct fb_info的成員(可變引數),其記錄使用者可修改的顯示控制器的引數,包括分

//辨率和每個畫素點的位元數,其成員需要在驅動程式中初始化和設定

struct fb_var_screeninfo var; /* current var */

// struct fb_info的成員(固定引數),其記錄使用者不能修改的顯示控制器的引數,如螢幕緩衝區實體地址,

//長度,當對幀緩衝裝置進行對映操作時,就是從此結構中取得緩衝區實體地址,其成員需要在驅動程式中初始化和設定

struct fb_fix_screeninfo fix; /* current fix */

int screen_size; //螢幕大小

unsigned char *fbmem;

unsigned int line_width; //一行裡面有多少位元組

unsigned int pixel_width; //每個畫素有多少位元組

int fd_hzk16;

struct stat hzk_stat;

unsigned char *hzkmem;

/* color : 0x00rrggbb */

void lcd_put_pixel(int x, int y, unsigned int color)

case 16:

case 32:

default:

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

else}}

} }int main(int argc, char **ar**)

//第乙個引數是使用者程式開啟裝置時使用open函式返回的檔案標示符,第二個引數就是使用者程式對裝置的控制命令 第三個引數是一些補充引數

//此處是獲取

if (ioctl(fd_fb, fbioget_vscreeninfo, &var))

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

line_width = var.xres * var.bits_per_pixel / 8; //x方向畫素點 * 每個畫素點的大小 得到一行佔據多少位元組

pixel_width = var.bits_per_pixel / 8; //每個畫素點大小

screen_size = var.xres * var.yres * var.bits_per_pixel / 8; //xres x方向有多少畫素 yres方向有多少畫素 bits_per_pixel每個畫素佔據的位數 除8轉化成位元組

fbmem = (unsigned char *)mmap(null , screen_size, prot_read | prot_write, map_shared, fd_fb, 0);//mmap 記憶體對映

if (fbmem == (unsigned char *)-1)

fd_hzk16 = open("hzk16", o_rdonly);//以唯讀方式開啟字型檔檔案 hzk16需要和.o檔案放在一起

if (fd_hzk16 < 0)

if(fstat(fd_hzk16, &hzk_stat)) //獲取由檔案指標 所開啟檔案的統計資訊。

hzkmem = (unsigned char *)mmap(null , hzk_stat.st_size, prot_read, map_shared, fd_hzk16, 0);

if (hzkmem == (unsigned char *)-1)

/* 清屏: 全部設為黑色 */

memset(fbmem, 0, screen_size); //3原色

lcd_put_ascii(var.xres/2, var.yres/2, 'a'); //在螢幕中心顯示a字元

printf("chinese code: %02x %02x\n", str[0], str[1]);

lcd_put_chinese(var.xres/2 + 8, var.yres/2, str,strlen(str)); //在a之後顯示中文字元

return 0;

}

點陣漢字顯示

由於turbo c應用於dos作業系統下,在使用turbo c進行程式設計時,一般情況下只好使用英文進行人機互動。要是想直接用中文介面,就需要另想他法了。如果使用中文dos系統 如ucdos 則可以解決在字元介面下的漢字顯示問題。也就是說,可以用printf或其他字串函式來輸出漢字。但是,這樣仍然有...

點陣漢字顯示

陣漢字顯示 目錄 dos下的點陣漢字 漢字的內碼 漢字字模 漢字型檔檔案 列印字型檔檔案和hzk12 文件內容 dos下的點陣漢字 你是否碰到過用啟動盤啟動系統後用dir命令得到一串串莫名其妙的字元?有經驗的朋友會告訴你 那是漢字。漢字?你不禁會問 怎麼乙個我乙個也不認識。但那確確實實是漢字,如果你...

點陣漢字顯示

由於turbo c應用於dos作業系統下,在使用turbo c進行程式設計時,一般情況下只好使用英文進行人機互動。要是想直接用中文介面,就需要另想他法了。如果使用中文dos系統 如ucdos 則可以解決在字元介面下的漢字顯示問題。也就是說,可以用printf或其他字串函式來輸出漢字。但是,這樣仍然有...