以前學的內容都沒有做記錄 導致現在都忘的差不多了 這次就給自己做個記錄
本節主要實現的功能就是在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或其他字串函式來輸出漢字。但是,這樣仍然有...