輸出相應的ascii碼 ASCII 字元的點陣顯示

2021-10-11 16:38:38 字數 1908 閱讀 6664

要在 lcd 中顯示乙個 ascii 字元,即英文本母這些字元,首先是要找到字元對應的點陣。在 linux 核心原始碼中有這個檔案:libfontsfont_8x16.c,裡面以陣列形式儲存各個字元的點陣,比如:

上圖左側有 16 行數值,每行 1 個位元組。每乙個節對應右側一行中 8 個畫素:畫素從右邊數起,bit0 對應第 0 個畫素,bit1 對應第 1 個畫素,……,bit7 對應第 7 個畫素。某位的值為 1 時,表示對應的畫素要被點亮;值為 0 時表示對應的畫素要熄滅。

所以要顯示某個字元時,根據它的 ascii 碼在 fontdata_8x16 陣列中找到它的點陣,然後取出這 16 個位元組去描畫 16 行畫素。

比如字元 a 的 ascii 值是 0x41,那麼從 fontdata_8x16[0x41*16]開始取其點陣資料。

01_all_series_quickstart04_嵌入式 linux 應用開發基礎知識source08_show_ascii c
核心函式是 void lcd_put_ascii(int x, int y, unsigned char c),它在 lcd 的(x,y)位置處顯示字元 c,**如下圖所示:

對於字元 c,char c,它的點陣獲取方法如下:

4693 unsigned char *dots = (unsigned char *)&fontdata_8x16[c*16];
根據上圖,我們分析下如何利用點陣在 lcd 上顯示乙個英文本母。

因為有十六行,所以首先要有乙個迴圈 16 次的大迴圈,然後每一行裡有 8 位,那麼在每乙個大迴圈裡也需要乙個迴圈 8 次的小迴圈。

小迴圈裡的判斷單行的描點情況,如果是 1,就填充白色,如果是 0 就填充黑色,如此一來,就可以顯示出黑色底,白色輪廓的英文本母。

4697 for (i = 0; i < 16; i++)4698 4724 if (ioctl(fd_fb, fbioget_vscreeninfo, &var))4725 47294730 line_width = var.xres * var.bits_per_pixel / 8;4731 pixel_width = var.bits_per_pixel / 8;4732 screen_size = var.xres * var.yres * var.bits_per_pixel / 8;4733 fbmem = (unsigned char *)mmap(null , screen_size, prot_read | prot_write, map_shared, fd_fb, 0);4734 if (fbmem == (unsigned char *)-1)4735 47394740 /* 清屏: 全部設為黑色 */4741 memset(fbmem, 0, screen_size);47424743 lcd_put_ascii(var.xres/2, var.yres/2, 'a'); /*在螢幕中間顯示8*16的字母a*/47444745 munmap(fbmem , screen_size);4746 close(fd_fb);47474748 return 0;4749 }4750
編譯命令:arm-linux-gnueabihf-gcc -o show_ascii show_ascii.c

注意:不同的板子,編譯工具的字首可能不一樣。

「新品首發」stm32mp157開發板火爆預售!首批僅300套

彙編 ASCII碼轉BCD碼並輸出

datas segment nums db 30h,31h,41h,38h,39h,32h,33h,36h,31h ascii碼 numo db 4 dup dlen nums datas ends codes segment assume cs codes,ds datas start mov a...

ASCII碼的認知

發現ascii碼很有意思,分顯示傳輸控制碼和字元碼。控制符33個,數字和字母共10 26 26 62,其餘是標點符和運算子 附加記憶小訣竅 空格 二零 0x20 零 三零 0x30 大a四一 0x41 小六一 0x61 空格二零,零三零,大a四一,小六一 挺順口的,數字字母首元素都作為了每段的起始 ...

數字的Ascii碼

在刷題的時候,碰到下面的問題 time limit 1 sec memory limit 128 mb 64bit io format lld submitted 949 accepted 482 submit status web board 輸入乙個整數,判斷其是否能被3整除且至少有乙個數字是5...