zoukankan      html  css  js  c++  java
  • LCD编程_显示文字

    在上篇博客中,实现了画点操作,然后在画点的基础上实现了画线、画圆的操作。实际上显示文字也是在画点的基础上实现的。

    文字是由点组成的,那么这些点阵是在哪里获得的呢?

    随便打开一个内核文件,搜索font,会出来很多文件。在此,选择font_8*16.c。

    字符A就显示出来了,这就是文字的显示原理。

    首先看一下,观察fontdata_8*16这个数组里面的内容,会发现:

    当ascII为0时,占据16个字节。在数组中的初始索引为0

    当ascII为1时,占据16个字节。在数组中的初始索引为16

    当ascII为c时,在数组中的索引为C*16

    如上图所示,每行中有8个像素,每个像素是否显示由点阵中的一个字节决定。

    因此在程序中,可以做一个循环,逐行扫描。

     1 extern const unsigned char fontdata_8x16[];
     2 /* 获得LCD参数 */
     3 static unsigned int fb_base;
     4 static int xres, yres, bpp;
     5 
     6 void font_init(void)
     7 {
     8     get_lcd_params(&fb_base, &xres, &yres, &bpp);
     9 }
    10 
    11 /* 根据字母的点阵在LCD上描画文字 */
    12 
    13 void fb_print_char(int x, int y, char c, unsigned int color)
    14 {
    15     int i, j;
    16     
    17     /* 根据c的ascii码在fontdata_8x16中得到点阵数据 */
    18     unsigned char *dots = &fontdata_8x16[c * 16];
    19 
    20     unsigned char data;
    21     int bit;
    22 
    23     /* 根据点阵来设置对应象素的颜色 */
    24     for (j = y; j < y+16; j++)
    25     {
    26         data = *dots++; /*先将点阵中一行数据取出来,即一个字节,8位。我们需要对这8位数据,依次进行判断,看看是不是需要描点*/
    27         bit = 7;
    28         for (i = x; i < x+8; i++)
    29         {
    30             /* 根据点阵的某位决定是否描颜色 */
    31             if (data & (1<<bit))
    32                 fb_put_pixel(i, j, color);
    33             bit--;
    34         }
    35     }
    36 }
    37 
    38 
    39 /* "abc
    
    123" */
    40 void fb_print_string(int x, int y, char* str, unsigned int color)
    41 {
    42     int i = 0, j;
    43     
    44     while (str[i])
    45     {
    46         if (str[i] == '
    ')
    47             y = y+16;
    48         else if (str[i] == '
    ')
    49             x = 0;
    50 
    51         else
    52         {
    53             fb_print_char(x, y, str[i], color);
    54             x = x+8;
    55             if (x >= xres) /* 换行 */
    56             {
    57                 x = 0;
    58                 y = y+16;
    59             }
    60         }
    61         i++;
    62     }
    63 }
  • 相关阅读:
    Service Name Port Number Transport Protocol tcp udp 端口号16bit
    linux linux 互传文件 win 不通过 ftp sftp 往linux 传文件(文件夹)
    soft deletion Google SRE 保障数据完整性的手段
    Taylor series
    Taylor's theorem
    Moving average
    REQUEST
    Unix file types
    mysqld.sock
    Tunneling protocol
  • 原文地址:https://www.cnblogs.com/-glb/p/11372157.html
Copyright © 2011-2022 走看看