12864点阵型液晶显示器

12864点阵型液晶显示器

在上一章中,我们学习了如何使用1602字符型液晶显示器。在产品开发的过程中,有时需要显示汉字或更为复杂的图形,这时功能更加强大的12864液晶显示器也许能满足你的需要。早期的12864液晶显示器采用并行传输结构,使用时会占用处理器较多的I/O口,而且体积大、价格偏高。目前推出的新型12864液晶显示器采用了COG技术,体积小巧轻薄,使用SPI串行通信方式传输数据,较并行液晶产品具有明显的优势。本章介绍的就是基于COG技术的12864点阵型液晶显示器及其驱动方法。

22.1

12864点阵型液晶介绍

12864液晶显示器因能显示128×64个点而得名,而基于COG技术的12864液晶显示器具有价格低、显示功能强大、工作可靠的优点。所谓COG技术,就是将显示驱动芯片、显存等系列半导体器件直接集成在LCD玻璃上,从而制作出体积小巧轻薄的液晶显示屏。不同的液晶生产厂会将基于COG技术的液晶显示屏安装在自己设计的背板上,从而衍生出型号众多的12864液晶显示器。本章介绍的JLX12864G-086点阵型液晶显示器就是其中之一。

22.1.1

JLX12864G-086液晶的特点

JLX12864G-086点阵型液晶显示器采用UC1701X驱动IC,可显示总计128×64点阵的文字或图形,其外观如图22-1所示。

JLX12864G-086点阵型液晶显示器具有如下特点:

·显示区域为128×64点阵,可以用于显示汉字或复杂的图形。

·在16×16点阵模式下每行可显示8个汉字,共可显示4行。

·指令功能强大,多种显示方式可满足不同的需求。

·采用4线仅写入的串行SPI接口,可有效节省控制器I/O口资源。

·其扩展型号可配置专用字库IC,西文及汉字显示更加容易。

·有3.3V、5V两种电压模块可供用户选择。

22.1.2

JLX12864G-086液晶的引脚功能

JLX12864G-086点阵型液晶显示器内部电路原理如图22-2所示。液晶显示器采用UC1701X驱动IC(兼容ST7565R),用以控制128×64点阵液晶显示器显示。UC1701X驱动IC使用串行SPI通信方式与控制器通信。可选的字库IC内部集成有GB2312汉字库,同样使用串行通信方式。另外,该液晶显示器具有独立的背光控制引脚,其引脚功能详见表22-1。

22.2

12864点阵型液晶显示方式

22.2.1

显示屏与显存的对应关系

JLX12864G-086液晶的显示区域横向有128个点,纵向有64个点。显示区域自上而下每8行为1个页(PAGE),总计划分为8个页。在每个页中,显存中的数据是纵向排列的,一个字节对应着一列,写满一个PAGE需要128个字节的数据,字节的低位在上,高位在下。字节中的每一位对应着屏幕上的一个点,当显示位赋值为1时,与其结应的点显示,赋值为0时关闭。12864点阵型液晶显示区域与显存的对应关系如图22-3所示,数据字节与像素的对应关系如图22-4所示。

从图22-4中我们会发现,文字“S”的形状可以用它左边的一组数值表示出来,这组数值包含了要显示的文字的图像信息,也就是我们说的“S”的字模。

22.2.2

显存的组织结构

JLX12864G-086液晶显存中的数据存储区域比实际的显示区域稍大一些,显存横向有65行,其中前64行对应着屏幕的显示区域PAGE0~PAGE7,最后一行对应着PAGE8,在显示区域之外。显存的纵向有132列,从SEG1至SEG132,其中前128列对应着屏幕的显示区域,后4列在显示区域之外。12864液晶的显存组织结构如图22-5所示。

22.2.3

读写时序

JLX12864G-086液晶显示器在电源启动后,需要将RESET引脚保持低电平至少3μs的时间,使液晶复位。复位时序如图22-6所示。

向液晶显示器写入1位信息的时序如图22-7所示。RS(CD)端用于控制写入液晶显示器的信息是命令还是数据,CS端用于对液晶显示器的片选,SCK线为串行时钟线,SDA线为串行数据线,在SCK线时钟的上升沿,SDA线上的数据被写入液晶显示器中。

向液晶显示器写入1字节的时序如图22-8所示。CS端用于对液晶显示器的片选,在向液晶显示器写入第8字节时,液晶显示器会判断RS(CD)端的状态,用于分辨写入液晶显示器的信息是命令还是数据,SCK线为串行时钟线,SDA线为串行数据线,在SCK线时钟的上升沿,SDA线上的信息被写入液晶显示器中。

22.2.4

UC1701X指令集

对液晶显示器的操作是通过一系列的指令来实现的。我们前面说过,JLX12864G-086液晶显示器采用的驱动IC是UC1701X,并且与ST7565R兼容,因此其指令集也同样适用于采用ST7565R驱动IC的液晶显示器。UC1701X驱动IC的指令详见表22-2。

22.3

12864点阵型液晶应用实例

22.3.1

液晶显示器的接口电路

JLX12864G-086点阵型液晶驱动接口电路如图22-9所示。单片机的5个I/O口分别驱动液晶显示器UC1701X的5个驱动端。如果需要,还可以使用额外的I/O口连接字库IC的驱动端。

22.3.2

汉字的取模方法

对于没有中西文字库的点阵型液晶显示器,显示文本同样十分方便。我们只需要提取待显示文字的字模,并将其保有存在源代码中供软件调用即可。以下是使用16×16点阵为汉字提取字模的方法,西文字符提取字模的方法与此大致相同。字模的提取如图22-10所示,具体步骤如下:

1)使用字模提取软件,在“基本操作”中选择“新建图像”,将图像宽度和高度均设为16。

2)在文字输入区输入一个汉字,完成后按“CTRL+ENTER”键。

3)在“参数设置”项中选“其他选项”,在出现的对话框中勾选“纵向取模”和“字节倒序”选项,并去掉“保留文字字模数据的最后一个逗号”选项。

4)在“取模方式”选项中选择“C51格式”,字模转换即刻完成。

5)在“基本操作”中选择“保存点阵数据”,将生成的字模数据保存到文本文件中,供在C程序中使用。

22.3.3

图像的取模方法

使用点阵型液晶显示图像同样要对其取模,图像取模的方法如图22-11所示,步骤如下:

1)新建一幅图像或将已有图像保存成单色位图(BMP)格式,分辨率修改为128×64像素。

2)打开取模软件,在“基本操作”中选择“新建图像”,将图像设定为128×64。

3)在“打开图像图标”项中打开已经转换好的单色位图图片。

4)在“参数设置”项中选择“其他选项”,在出现的对话框中勾选“纵向取模”和“字节倒序”项,并去掉“保留文字字模数据的最后一个逗号”选项。

5)在“取模方式”项中选择“C51格式”,图像取模即刻完成。

6)在“基本操作”中选择“保存点阵数据”项,将生成的点阵数据保存到文本文件中,供在C程序中使用。

22.3.4

汉字和图形显示

我们可以使用12864液晶显示汉字或图片,如果你的单片机有足够大的程序存储器(FLASH),你完全可以用这款液晶显示器开发出一本有趣的电子漫画书来。本书限于篇幅,只给大家介绍如何在12864液晶上显示出一个汉字和一幅图画,相信有了这些作为基础,你一定能自己DIY出更加生动的显示内容来。

按本章图22-9所示电路连接液晶显示器和AVR系统板,打开Atmel Studio 6.1软件,新建名为“LCD12864”的项目,保存在chapter22文件夹下,软件会自动将名为“LCD12864.c”的源文件添加到新建的项目中。编辑“LCD12864.c”源文件,编写代码详见代码清单22-1。

代码清单22-1

使用12864液晶显示汉字和图像

/*

*

LCD12864.c *

12864

液晶显示汉字和图像

*

Created: 2013/10/27

10:01:10

*

Author: GAO */

#include

//

包含AVR 头文件

#define F_CPU 16000000UL //

定义系统时钟

#include

//

包含延时函数头文件

#define uchar unsigned char #define uint unsigned int #define sck128_SET (PORTD|=0x08)

//

置位PD3

定义串行时钟端

#define sck128_CLR (PORTD&=0xF7)

//

清零PD3

#define sda128_SET (PORTD|=0x10)

//

置位PD4

定义串行数据端

#define sda128_CLR (PORTD&=0xEF)

//

清零PD4

#define rs128_SET (PORTD|=0x20)

//

置位PD5

定义数据/

命令选择端

#define rs128_CLR (PORTD&=0xDF)

//

清零PD5

#define rst128_SET (PORTD|=0x40)

//

置位PD6

定义复位端

#define rst128_CLR (PORTD&=0xBF)

//

清零PD6

#define cs128_SET (PORTD|=0x80)

//

置位PD7

定义片选端

#define cs128_CLR (PORTD&=0x7F)

//

清零PD7

void port12864_init(); //

驱动端口初始化函数声明

void init_lcd(); //

液晶初始化函数声明

void transfor_command(uchar comm1); //

写入命令函数声明

void transfor_data(uchar data1); //

写入数据函数声明

void clear_screen(); //

清屏函数声明

void delay(uint t); //

延时函数声明

void display_text(); //

显示16×16

汉字函数声明

void display_picture(); //

显示128×64

图片函数声明

const uchar text1[]; //

文字数组声明

const uchar graphic1[]; //

图像数组声明

/**********

主函数**********/

int main(void)

{

port12864_init(); //

驱动端口初始化

init_lcd(); //

液晶显示器初始化

clear_screen(); //

清屏

while(1)

{

display_text(); //

显示文本

_delay_ms(2000); clear_screen(); //

清屏

_delay_ms(100); display_picture(); //

显示图像

_delay_ms(2000); clear_screen(); //

清屏

_delay_ms(100); }

}

/**********

驱动端口初始化函数**********/

void port12864_init()

{

DDRD|=0xF8; }

/**********

液晶初始化函数**********/

void init_lcd()

{

rst128_SET; _delay_us(3); //

延时

rst128_CLR; //

低电平复位液晶

_delay_us(3); //

延时

rst128_SET; //

解除复位状态

_delay_us(3); //

延时

transfor_command(0xe2); //

软复位

transfor_command(0x2c); //

升压步骤1

transfor_command(0x2e); //

升压步骤2

transfor_command(0x2f); //

升压步骤3

transfor_command(0x23); //

粗调对比度,范围20-27

transfor_command(0x81); //

微调对比度

transfor_command(0x30); //

微调对比度的值,范围0-63

transfor_command(0xa2); //1/9

偏压比

transfor_command(0xc8); //

行扫描顺序:从上到下

transfor_command(0xa0); //

列扫描顺序:从左到右

transfor_command(0xaf); //

开显示

}

/**********

写入命令函数**********/

void transfor_command(uchar comm1)

{

uchar i; uchar TEMP; cs128_CLR; //

片选液晶显示器

_delay_us(2); //

延时

rs128_CLR; //

低电平表示写入命令

_delay_us(2); //

延时

TEMP=comm1; for(i=0;i<8;i++)

{

_delay_us(2); //

延时

sck128_CLR; //

拉低时钟线

_delay_us(2); //

延时

if((TEMP&0x80)==0)

//

判断最高位为0

{

sda128_CLR; //

数据线则输出0

}

else {

sda128_SET; //

否则输出1

}

_delay_us(2); //

延时

sck128_SET; //

置高时钟线,数据写入

_delay_us(2); //

延时

TEMP=TEMP<<1; //

将数据左移1

}

}

/**********

写入数据函数**********/

void transfor_data(uchar data1)

{

uchar i; uchar TEMP; cs128_CLR; _delay_us(2); //

延时

rs128_SET; //

高电平表示写入数据

_delay_us(2); //

延时

TEMP=data1; for(i=0;i<8;i++)

{

_delay_us(2); //

延时

sck128_CLR; _delay_us(2); //

延时

if((TEMP&0x80)==0)

{

sda128_CLR; }

else {

sda128_SET; }

_delay_us(2); //

延时

sck128_SET; _delay_us(2); //

延时

TEMP=TEMP<<1; }

}

/**********

清屏函数**********/

void clear_screen()

{

uchar i,j; cs128_CLR; for(i=0;i<8;i++)

{

_delay_us(2); //

延时

transfor_command(0xB0+i); //

页地址

transfor_command(0x10); //

高位列地址

transfor_command(0x00); //

低位列地址

for(j=0;j<128;j++)

{

transfor_data(0x00); //

写入数据0

_delay_us(2); //

延时

}

}

}

/**********

显示文本函数**********/

void display_text()

{

uchar TEMP,i,j; cs128_CLR; for(i=0;i<2;i++)

{

_delay_us(2); //

延时

transfor_command(0xB0+i); //

页地址

transfor_command(0x10); //

高位列地址

transfor_command(0x00); //

低位列地址

for(j=0;j<16;j++)

{

TEMP=text1[i*16+j]; transfor_data(TEMP); //

写入数据

_delay_us(2); //

延时

}

}

}

/**********

显示图像函数**********/

void display_picture()

{

uchar TEMP,i,j; cs128_CLR; for(i=0;i<8;i++)

{

_delay_us(2); //

延时

transfor_command(0xB0+i); //

页地址

transfor_command(0x10); //

高位列地址

transfor_command(0x00); //

低位列地址

for(j=0;j<128;j++)

{

TEMP=graphic1[i*128+j]; transfor_data(TEMP); //

写入数据

_delay_us(2); //

延时

}

}

}

/**********

文字数组**********/

const uchar text1[]={

/*--

文字: 囧

--*/

/*--

宋体12; 此字体下对应的点阵为:宽×

高=16×16

--*/

0x00,0xFE,0x82,0x42,0x22,0x1A,0x02,0x02,0x02,0x0A,0x12,0x62, 0x02,0xFE,0x00,0x00, 0x00,0xFF,0x40,0x40,0x40,0x7F,0x41,0x41,0x41,0x7F,0x40,0x40, 0x40,0xFF,0x00,0x00

}; /**********

图像数组**********/

const uchar graphic1[]={

/*--

调入了一幅图像:C:\Users\gcs\Desktop\PICTURE1.bmp --*/

/*--

宽度×

高度=128×64

--*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, 0x80,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xE0, 0xF0,0x70,0x78,0x38,0x38,0x3C,0x1C,0x1C, 0x1C,0x1C,0x1C,0x1C,0x1C,0x3C,0x38,0x38, 0x78,0x70,0xF0,0xE0,0xE0,0xC0,0x80,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0xC0,0xC0,0xE0,0xE0,0xF0,0x70,0x78, 0x38,0x3C,0x1C,0x1E,0x0E,0x0F,0x07,0x07, 0x03,0x03,0x01,0x03,0x03,0x07,0x07,0x0F, 0x0E,0x1E,0x1C,0x3C,0x38,0x78,0x70,0xF0, 0xE0,0xE0,0xC0,0xC0,0x80,0x80,0x00,0x00, 0x00,0x00,0x00,0xF0,0xF8,0xF8,0xF0,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0, 0xF0,0xFC,0x7E,0x1F,0x0F,0x03,0x01,0x01, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x1F, 0x7E,0xFC,0xF0,0xC0,0x80,0xC0,0xE0,0xE0, 0xF0,0x78,0x78,0xF0,0xE0,0xE0,0xC0,0xFF, 0xFF,0xFF,0x01,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x01,0x01,0xFF,0xFF,0xFF,0x00,0x00, 0xC0,0xF8,0xFF,0x3F,0x07,0x07,0x3F,0xFF, 0xFC,0xE0,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF, 0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x80,0xC0,0xC0,0xE0,0xF0,0x78,0x38, 0x3C,0x1F,0xFF,0xFF,0xFF,0x03,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x01,0x03,0xFF, 0xFF,0xFF,0x1E,0x3C,0x38,0x78,0xF0,0xE0, 0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x78, 0xF8,0xF8,0xF8,0xF8,0xB8,0xB8,0x38,0x38, 0x38,0x38,0x38,0xFF,0xFF,0xFF,0x38,0x3E, 0x3F,0x0F,0x01,0x00,0x00,0x00,0x00,0x01, 0x0F,0x3F,0x3E,0x38,0x38,0x38,0x38,0x38, 0x38,0x38,0x38,0x38,0x38,0xB8,0xF8,0xF8, 0xF8,0xF8,0x78,0x30,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x1F, 0x7F,0xFE,0xF0,0xC0,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x07,0x3F,0xFF,0xFD,0xC1,0x00,0x00,0xC0, 0xE0,0xFE,0x7F,0x1F,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F, 0x0F,0x1F,0x1C,0x3C,0x38,0x78,0x70,0xF1, 0xF9,0xFF,0xFF,0xC7,0x80,0x80,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, 0x80,0xC0,0xC1,0xE3,0xE7,0xF7,0x7F,0x7E, 0x3C,0x3C,0x7C,0xFF,0xEF,0xCF,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0x78, 0x38,0x3C,0x1E,0x0F,0x07,0x07,0x03,0x01, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x01,0x03,0x07,0x0F,0x1E,0x3C,0x38, 0x78,0x70,0xF0,0xE0,0xE0,0xE0,0xC0,0xC0, 0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xE0,0xE0, 0xE0,0x70,0x79,0x3F,0xFF,0xFE,0xFF,0x87, 0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xF0,0xFE,0xFF, 0x1F,0x01,0x01,0x03,0x03,0x07,0x07,0x0F, 0x0E,0x1E,0x1C,0x1E,0x0E,0x0F,0x07,0x07, 0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00, 0x80,0xF8,0xFF,0x7F,0x0F,0x00,0x00,0x80, 0x80,0xC0,0xE0,0xE0,0x70,0x70,0xF0,0xE0, 0xC0,0x80,0x80,0x00,0x00,0x07,0x7F,0xFF, 0xF8,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x07,0x3F,0x7F, 0x78,0x70,0x70,0x70,0x70,0x70,0x70,0x70, 0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70, 0x70,0x70,0x70,0x78,0x7F,0x3F,0x07,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xFC, 0xFF,0x7F,0x3B,0x3C,0x1E,0x0E,0x0F,0x07, 0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x01, 0x01,0x03,0x07,0x0F,0x0E,0x1E,0x3C,0x3B, 0x7F,0xFF,0xFC,0x60,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

}; /**********

结束**********/

将以上代码正确编译后下载到AVR系统板中,程序运行后在12864液晶显示器上会交替显示出汉字“囧”和我们自己创作的图像,其显示状态如图22-12和图22-13所示。

上一节1602字符型液晶显示器

微信分享

评论

评论:

提交

相关文章

在树莓派 Pico 上用 PWM 实现 LED 呼吸灯

Pico 上的每个 GPIO 引脚都能够进行脉宽调制,通过改变引脚打开和关闭的频率,可以改变或调制这些脉冲的宽度实现模拟输出。

机器人技术七八级考试说明及知识框架

青少年机器人技术七级、八级着重于机器人智能处理能力的学习,基本编程语言为Python,采用RDK X3作为主控。

用乐高搭建带驱动的前悬挂

用乐高搭建带驱动的前悬挂。

使用Pillow来进行图像处理

Pillow在PIL的基础上,为Python3增加了更多功能和支持。我们将看到如何在图像上执行各种操作,例如裁剪,调整大小,添加文本到图像,旋转,灰阶转换。

用树莓派4b构建深度学习应用(8) Openvino篇

这一篇我们介绍一下在树莓派上部署 OpenVINO 神经棒,进一步提升AI的推理速度。

白宫发布“通过STEM教育培养计算素养指南”

美国白宫网站发布由计算素养跨机构工作组(IWGCL)编写的《通过STEM教育培养计算素养:联邦机构和利益相关者指南》报告。

如何让乐高小车跨过悬崖

Brick Experiment 又有新作品了,这次他要挑战的,是在基础乐高小车上,一次次添加新的组件、改变结构,让小车跨过8道越来越宽的“悬崖”。

ESP32 利用 SPI 连通 TFT 彩屏

本文给出了一个ESP32与SPI 接口TFT显示屏接线的详细说明,供大家参考。

Arduino ESP32获取芯片、RAM信息

本文介绍如何使用Arduino-ESP32库中的API函数获取ESP32的芯片、RAM信息等,并提供了一个示例程序代码。

机器人发明家Robot Inventor

乐高51515 Robot Inventor做为Mindstorms EV3的后继产品 ,包括949个零件,可以将其构建和重建为具有不同功能和个性的五个官方模型。

相关文章

溧阳市人民政府
365即时比分足球

溧阳市人民政府

🌱 11-30 💬 964
鸡如何喂养,喂料一定要全面
365scores下载

鸡如何喂养,喂料一定要全面

🌱 07-26 💬 940