历史上的今天
今天是:2024年11月11日(星期一)
2019年11月11日 | 让12864液晶模块显示更小的文字 5*8点阵
2019-11-11 来源:51hei
在家琢磨着怎样整一个5×8的ASCII字符库,用于我后面要设计的温度记录仪.本人比较喜欢LCD12864(ST920)这个模块,它本身的字符库给我们带来了很多方便,可是也有些缺陷,就是个子太大,一个ASCII字符都占用了8×16的空间,可见如果我们用于绘图时当需要显示某些提示内容的时候可想而知,那文字都比图像还要大.于是,笔者经过多番的修改和更正后,完成了以下函数库,在今后的使用中,字符库可以任意更改,字体也能任意宽高,便于移植到更大的LCD模块上使用,接下来我就以一个简单的C语言程序让它显示到LCD模块上.经过使用自定义的字符库,单个12864能够显示7行字符.
效果如图:

本程序使用IAR AVR编译器,芯片使用M128.
先来看看我的主程序吧,很简单,就几行内容,基于之前我设计的FrameAVR,多任务调用.使用LCD12864的class类和BMP的class类组合实现.
#include "mydef.h"
#include "d:incio.h"
#include "mydevice.h"
#include "myglobar.h"
#include "myfunction.h"
#include "myvect.h"
void FrameAVR::init()
{
lcd= LCD12864_SPI;// 使用SPI串行模式
bmp.create(128,64);// 创建一个128×64像素的BMP类
}
void FrameAVR::Run()
{
DDRB = 0xFF;
PORTB ^= 0x0F// 测试信号,可用示波器观察判断程序的运行状况;
}
void FrameAVR::Timer()
{
bmp.clear();// 清除缓冲区
bmp= tabAscii5_8;// 设定字符库
bmp.drawText("#include
bmp.drawText("int main(void)",0,9);
bmp.drawText("{",0,18);
bmp.drawText(" for(chari=0;i<128;i++)",0,27);
bmp.drawText(" sprintf("i=%3d",i);",0,36);
bmp.drawText(" return0;",0,45);
bmp.drawText("}",0,54);
lcd= bmp;// 向LCD模块发送数据
}
首先我建立的是一个BMP类,内容如下:(经过数天设计的可怕的程序,功能强大!慢慢来就会看得懂,重点看看下面这两个)
bool drawText(char* pStr,int dx = 0,int dy = 0)// 使用指定的字体绘字
{
while(*pStr != '




