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

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

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

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

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

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

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

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

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

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

 extern const unsigned char fontdata_8x16[];
/* 获得LCD参数 */
static unsigned int fb_base;
static int xres, yres, bpp; void font_init(void)
{
get_lcd_params(&fb_base, &xres, &yres, &bpp);
} /* 根据字母的点阵在LCD上描画文字 */ void fb_print_char(int x, int y, char c, unsigned int color)
{
int i, j; /* 根据c的ascii码在fontdata_8x16中得到点阵数据 */
unsigned char *dots = &fontdata_8x16[c * ]; unsigned char data;
int bit; /* 根据点阵来设置对应象素的颜色 */
for (j = y; j < y+; j++)
{
data = *dots++; /*先将点阵中一行数据取出来,即一个字节,8位。我们需要对这8位数据,依次进行判断,看看是不是需要描点*/
bit = ;
for (i = x; i < x+; i++)
{
/* 根据点阵的某位决定是否描颜色 */
if (data & (<<bit))
fb_put_pixel(i, j, color);
bit--;
}
}
} /* "abc\n\r123" */
void fb_print_string(int x, int y, char* str, unsigned int color)
{
int i = , j; while (str[i])
{
if (str[i] == '\n')
y = y+;
else if (str[i] == '\r')
x = ; else
{
fb_print_char(x, y, str[i], color);
x = x+;
if (x >= xres) /* 换行 */
{
x = ;
y = y+;
}
}
i++;
}
}

LCD编程_显示文字的更多相关文章

  1. LCD编程_使用调色板

    在前面的博客中,使用的像素格式都是16bpp,24bpp(24bpp实际实际上就是32bpp)?如果想使用8bpp时,就需要使用调色板. 在以前的博客中,曾经说过,在framebuffer中如果每个像 ...

  2. LCD编程_画点线圆

    上篇博客中进行了lcd的简单测试,这篇博客将进行更加复杂的测试——画点.画线.画圆.画线和画圆是在画点的基础上实现的,因此本篇博客重点实现画点操作. 先抛出这样的一个问题,已知: (x,y)的坐标: ...

  3. LCD编程_简单测试

    首先,需要编写一个led_test.c的文件,依据代码框架,在led_test.c中我们能够看到的只是led.c.我们是看不到led_controller.c的.比如说,在led_test.c中,需要 ...

  4. Arduino基础入门—3.连接 IIC 1602 LCD显示文字

    1. IIC转接板介绍 Arduino Uno R3开发板的外部IO口是非常有限的.在驱动LCD1602时,尽管我们的数据线使用了4线,相对于8线方式减少一半,但是在需要外接多种传感器的应用中,4线驱 ...

  5. centos5.5字体为方块问题的解决_深入学习编程_百度空间

    centos5.5字体为方块问题的解决_深入学习编程_百度空间 centos5.5字体为方块问题的解决 一.yum -y install fonts-chinese二.yum -y install f ...

  6. OpenGL------在Windows系统中显示文字

    增加了两个文件,showline.c, showtext.c.分别为第二个和第三个示例程序的main函数相关部分.在ctbuf.h和textarea.h最开头部分增加了一句#include <s ...

  7. 【WPF】在MenuItem中下划线“_”显示不正常

    MenuItem的Header显示文字时发现一个问题,字符串中的第一个下划线“_”不能显示.如果该下划线前面是一个英文字母,则下划线会跑到该字母下方.(是中文汉字则不会) 查到原因是第一个下划线“_” ...

  8. 痞子衡嵌入式:降低刷新率是定位LCD花屏显示问题的第一大法(i.MXRT1170, 1280x480 LVDS)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170上LCD花屏显示问题的分析解决经验. 痞子衡最近这段时间在参与一个基于i.MXRT1170的大项目(先保个密),需要 ...

  9. 实现password框中显示文字提示的方式

    其实实际上实现中并不能让password中显示文字提示,但是我们在工作中有这样的需求,当没输入东西的时候,框内有提示输入密码,但是当输入东西的时候又显示的是*号,那么是如何实现的呢?其实原理很简单,就 ...

随机推荐

  1. [BZOJ1852] [MexicoOI06]最长不下降序列

    [BZOJ1852] [MexicoOI06]最长不下降序列 额我也不知道是不是水过去的...和网上的另一篇题解对拍过了,但是拍不出来... 经过和神仙的讨论基本可以确定是对的了 考虑如下贪心 (我将 ...

  2. 我已经看到了,撤回也没用了(PC微信防撤回补丁)

    前两天看 GitHub 发现一个有趣的项目,PC微信防撤回补丁,本着研究学习的目的,在看过源码,一顿疯狂操作之后,了解了其原理是基于修改 wechatwin.dll 达到防撤回的. 于是乎,自己动手玩 ...

  3. springboot kafka 消费者

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  4. C#获取屏幕鼠标坐标点颜色

    [DllImport("user32.dll")]        private static extern IntPtr GetDC(IntPtr hwnd);          ...

  5. 图示详解BERT模型的输入与输出

    一.BERT整体结构 BERT主要用了Transformer的Encoder,而没有用其Decoder,我想是因为BERT是一个预训练模型,只要学到其中语义关系即可,不需要去解码完成具体的任务.整体架 ...

  6. 开发技术--浅谈python基础知识

    开发|浅谈python基础知识 最近复习一些基础内容,故将Python的基础进行了总结.注意:这篇文章只列出来我觉得重点,并且需要记忆的知识. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对 ...

  7. 编译OpenCV提示opencv_contrib缺少boostdesc_bgm.i等文件

    错误提示: ~/opencv_contrib/modules/xfeatures2d/src/boostdesc.:: fatal error: boostdesc_bgm.i: No such fi ...

  8. 安装Ubuntu linux

    (1)下载Ubuntu http://www.ubuntu.com/download/desktop (2)制作启动U盘 1. 启动Rufus: 2. 插入U盘: 3. Rufus会提示更新,以自动选 ...

  9. 【开发笔记】- MySQL中limit查询超级慢,怎么办?

    有如下解决方法: (1).通过判断id的范围来分页 limit ; 也得到了分页的数据,但是我们发现如果id不是顺序的,也就是如果有数据删除过的话,那么这样分页数据就会不正确,这个是有缺陷的. (2) ...

  10. Delphi中窗体的事件

    Delphi中窗体的事件 Form窗体可以响应各种各样的时间,在Object Inspector的Events页面中罗列了一大堆,如下图: 下面将要列出一些常用的事件. 1.OnActivate 当窗 ...