lcd工作時會在記憶體中的視訊記憶體(framebuffer)中取出若干個位元組來表示乙個畫素點,如此迴圈的把視訊記憶體中的點陣顯示出來
下面直接貼出**,在**中有詳細的注釋:
int main(int argc,char **ar**)
if (ioctl(fd_fb, fbioget_vscreeninfo, &var)) //獲取lcd裝置fb0可變資訊
if (ioctl(fd_fb, fbioget_fscreeninfo, &fix)) // 獲取lcd裝置fb0固定資訊
line_width = var.xres * var.bits_per_pixel / 8; //算出一行的寬度單位是位元組
pixel_width = var.bits_per_pixel / 8; //算出每個畫素的位元組數
//算出視訊記憶體的大小var.xres螢幕寬度 var.yres螢幕高度 var.bits_per_pixel每個畫素用幾位元組表示
screen_size = var.xres * var.yres * var.bits_per_pixel / 8;
//給lcd裝置分配乙個screen_size大小的視訊記憶體空間
fbmem = (unsigned char *)mmap(null,screen_size,prot_read | prot_write,map_shared,fd_fb,0);
if(fbmem == (unsigned char*)-1)
/* hzk16的初始化 */
fd_hzk16 = open("hzk16", o_rdwr); //開啟漢字型檔
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);
lcd_put_ascii(var.xres/2, var.yres/2, 'a'); //顯示乙個英文本母
printf("chinese code : %02x %02x \n",str[0],str[1]);
lcd_put_chinese(var.xres/2 + 8, var.yres/2, str); //顯示乙個中文
return 0;
}
顯示字元函式
void lcd_put_ascii(int x, int y, unsigned char c)
case 16: //對於畫素寬度位16的,需要把int型的資料轉化為565的16位資料
case 32:
default :} }
使用stm32在lcd上隨意顯示漢字
怎樣在lcd彩屏上顯示漢字,我們習慣使用漢字型檔,也有很多自己做乙個漢字型檔,我就習慣這一種。介紹一下 我做的顯示 同乙個世界!同乙個夢想!首先 在網上下乙個提取點陣的的軟體生成自己的字型檔,const struct typfont16 font16lib 漢字的點陣結構體格式為 typedef s...
ARM平台LCD顯示漢字
arm平台lcd顯示漢字 2008 06 13 18 54 33 做了無數的windows程式,從來沒有把顯示漢字和英文本母當成一回事兒。這也難怪,寫視窗程式的時候,什麼setwindowtext messagebox setdlgitemtext等等,你只需要把自己想要顯示的字串傳進去,然後編譯 ...
ARM平台LCD顯示漢字
做了無數的windows程式,從來沒有把顯示漢字和英文本母當成一回事兒。這也難怪,寫視窗程式的時候,什麼setwindowtext messagebox setdlgitemtext等等,你只需要把自己想要顯示的字串傳進去,然後編譯 鏈結,就能夠顯示出來了,非常非常簡單 若說麻煩,可能就是在asci...