【雕爷学编程】Arduino动手做(104)---16X16点阵汉字屏
时间:2022-10-22 22:00:00
37个传感器和执行器的提法在互联网上广泛传播。事实上,Arduino能兼容的传感器模块肯定不止这37种。鉴于我积累了一些传感器和执行模块,根据实践知识(必须做)的概念,为了学习和交流,这里准备逐一尝试一系列实验,无论成功(程序),都会记录——小进步或问题,希望能吸引玉。
【Arduino】168传感器模块系列实验(数据代码) 仿真编程 图形编程)
实验104:16X16点阵UART接口LED汉字显示屏模块
LED点阵屏
通过LED(发光二极管)由文本、图片、动画、视频等组成,通常由显示模块、控制系统和电源系统组成。LED点阵显示屏制作简单,安装方便,广泛应用于汽车报站、广告屏、公告牌等各种公共场所。
显示原理
以简单的8X以8点阵为例,它由64个发光二极管组成,每个发光二极管放置在行线和行线的交叉点。当相应的行放置1电平,一列放置0电平时,相应的二极管会亮起;如果要点亮第一个点,9脚接高电平,13脚接低电平,第一个点就亮了;如果要点亮第一行,第9脚接高电平,而(13、3、4、10、6、11、15、16)这些引脚接低电平,那么第一行就会点亮;如果要点亮第一列,第13脚接低电平,而(9、14、8、12、1、7、2、5)接高电平,那么第一列就会点亮。
一般来说,我们使用点阵显示汉字1616的点阵宋体字库,所谓1616.每个汉字都显示在纵横16点的区域。也就是说,四个8168点阵组合成1616点阵。例如,如果你想显示你,相应的点应该被点亮。由于点阵在列线上低电平有效,在线上高电平有效,如果你想显示你这个词,它的位置代码信息应该被逆转,即所有列(1316脚)送(0xF7,0x7F),第一行(9脚)发送1信号,然后第一行发送0。然后发送第二行显示的数据(1316脚)送(0xF7,0x7F),第二行(14脚)发送1个信号。以此类推,只要每行数据显示的时间间隔足够短,利用人眼的视觉暂停,16次数据扫描16行后就会看到你字;第二种发送数据的方法是将字模信号发送到行线上,然后扫描列线。16行(9、14、8、12、1、7、2、5)也用你字来解释x00,0x第一列(13脚)送,0。同理扫描第二列。当上发送16次数据,线上扫描16次后显示一个你字。
点阵屏驱动
由LED根据点阵显示器的内部结构,由于点阵显示器的内部结构应采用动态扫描驱动器工作LED大部分管芯都是高型的,所以一行或一列的单体 LED窄脉冲可用于驱动电流,但其平均电流应限制在20mA内部。大多数点阵显示器的单体LED正压降约为2V左右。但是大亮点∮10的点阵显示器单体 LED正压降约为6V。大屏幕显示系统通常是多个LED由点阵组成的小模块由积木组成。每个小模块都有自己独立的控制系统。组合后,只需引入一个总控制器来控制每个模块的命令和数据。该方法简单,易于安装和维护。LED静态和动态显示是点阵显示系统中每个模块的显示方式。静态显示原理简单,控制方便,但硬件接线复杂,在实际应用中一般采用动态显示,动态显示扫描,由高峰窄脉冲驱动,从上到下逐步选择显示屏,同时发送图形或文本信息脉冲信号,重复上述操作,可显示各种图形或文本信息。
点阵屏分类
LED点阵屏有三种:单色、双色、全彩,可显示红、黄、绿、橙等。LED点阵有4×4、4×8、5×7、5×8、 8×8、16×16、24×24、40×40等;根据图素的数量、双原色、三原色等,根据不同的图素颜色显示文本、图像等内容的颜色,单原色点阵只能显示红、绿、黄等固定颜色,双原色和三原色点阵显示内容的颜色由图片中不同颜色的发光二极体照明组合决定。如果红色和绿色明亮,则可以显示黄色。如果二极体的照明时间按脉冲控制,则可以实现256或更先进的灰度显示,以实现真实的颜色显示。
主要特点
1.亮度高:分立表贴相对于0603或0805,LED反射出更多的光通量。
超高密度:室内高达62.500点/平米(P4)。也有厂家能做到。p3.密度越高,散热性能越好。
2.良好的混色:利用发光器件本身的微化处理和光波粒的二象性,红光粒子、纯绿光粒子和蓝光粒子将充分混合搅拌。
3.良好的环境性能:耐湿、耐冷热、耐腐蚀
4.抗静电性能优势超强:生产环境标准严格,产品结构绝缘设计。
5.视角大:140度(水平方向)
6.高渗透性:新一代点阵技术以其高纯度和近100%光通率的环氧树脂材料实现了近乎完美的渗透性。
16X16串口LED点阵模块
超高亮的模块LED灯芯、74HC595驱动芯片和高性价比 比工业单片机专业制造,工作稳定,刷新频率高,显示效果好;支持二次开发,应用方便。点阵模块显示可以通过串口控制:打开/关闭、正显/反显、左右翻转、上下翻转等。;显示内容可以通过串口更新或直接发送(16x16单色)bmp现有流行的智能硬件平台,如文件,便于连接Arduino、树莓派等。
接线示意图和引脚功能
模块特点
- 模块尺寸64mm X 64mm X 12mm(不含背面排针高度)
- 只需要一个串口TXD信号(使用广播设备号:0xFFFFFFFF)控制;
- 超高亮贴片LED,5V或3.3V供电可以。
- 恒流亮度驱动电路, 亮度均匀。
- 性价比高,开发速度快,网站自动生成arduino演示代码,粘贴到arduino IDE,可下载实验和使用。
16X16串口LED点阵模块
采用74HC595作为LED74HC595驱动信号和显示数
根据;接收上位机发送的命令,实现点阵模块显示控制。发送命令格式如下:
[长度][设备号][命令号][参数]…]
其中:长度表示本次发送的所有字节数,不包括本字节。接收一帧命令后,对串口点阵模块进行长度验证和过滤干扰数据;设备号表示串口点阵模块在多模块显示系统中的识别号,便于区分。当前版本支持32bit设备号。广播设备号(0xFFFFFFFF);命令号定义如下:
typedef enum {
LEP_CMD_NO_OPERATION, // 0-空操作 LEP_CMD_SCREEN_HIDE, // 1-屏幕关闭 LEP_CMD_SCREEN_INVERT, // 2-屏幕反显 LEP_CMD_SCREEN_MIRROR, // 3-屏幕镜像 LEP_CMD_SCREEN_TURN, // 4-屏幕倒影 LEP_CMD_SCREEN_PIXEL, // 5-屏幕像素 LEP_CMD_SCREEN_FILL, // 6-屏幕填充 LEP_CMD_SCREEN_LOAD, // 7-屏幕载入 LEP_CMD_CAVAS_ICON, // 8-显示图标 LEP_CMD_PRINT_ASCII, // 9-英文字符 } lepCmdNo_t; //定义命令号
Arduino参考开源代码
/* 【Arduino】18种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百零四: 16X16点阵串口LED汉字显示屏模块UART接口 1、安装库:打开Arduino IDE——工具——管理库,搜索marde 2、项目:显示“智”字 3、连线: VDD → 5V GND → GND TXD → D0 RXD → D1 */
#include
byte message[][2]
={
{
0x20,0x00},//line_0
{
0x3e,0x7c},//line_1
{
0x48,0x44},//line_2
{
0x08,0x44},//line_3
{
0xff,0x44},//line_4
{
0x14,0x44},//line_5
{
0x22,0x7c},//line_6
{
0x40,0x00},//line_7
{
0x1f,0xf0},//line_8
{
0x10,0x10},//line_9
{
0x10,0x10},//line_10
{
0x1f,0xf0},//line_11
{
0x10,0x10},//line_12
{
0x10,0x10},//line_13
{
0x1f,0xf0},//line_14
{
0x10,0x10},//line_15
};
MdLep16X16 mdLep(0xFF, 0xFF, 0xFF, 0xFF);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
delay(1000);
mdLep.loadScreen((byte*)message);
}
void loop() {
// put your main code here, to run repeatedly:
}
实验场景图
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百零四: 16X16点阵串口LED汉字显示屏模块UART接口 1、安装库:打开Arduino IDE——工具——管理库,搜索marde 2、项目:滚动显示汉字 3、连线: VDD → 5V GND → GND TXD → D0 RXD → D1 */
#include
#include
byte message[][2] =
{
{
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},/*移出,9*/
//-----------------------------以下内容自行更改
{
0x00,0x28},//line_0
{
0x7f,0x24},//line_1
{
0x49,0x40},//line_2
{
0x49,0x7e},//line_3
{
0x5d,0xc8},//line_4
{
0x49,0x48},//line_5
{
0x7f,0x7e},//line_6
{
0x41,0x48},//line_7
{
0x5d,0x48},//line_8
{
0x55,0x7e},//line_9
{
0x55,0x48},//line_10
{
0x5d,0x48},//line_11
{
0x41,0x48},//line_12
{
0x41,0x7e},//line_13
{
0x45,0x40},//line_14
{
0x82,0x40},//line_15/*"雕",0*/
{
0x04,0x40},//line_0
{
0x08,0x20},//line_1
{
0x18,0x50},//line_2
{
0x24,0x88},//line_3
{
0x03,0x00},//line_4
{
0x0c,0xc0},//line_5
{
0x30,0x30},//line_6
{
0xc0,0x0e},//line_7
{
0x1f,0xf0},//line_8
{
0x02,0x10},//line_9
{
0x02,0x10},//line_10
{
0x02,0x10},//line_11
{
0x02,0x50},//line_12
{
0x02,0x20},//line_13
{
0x02,0x00},//line_14
{
0x02,0x00},//line_15/*"爷",1*/
{
0x22,0x08},//line_0
{
0x11,0x08},//line_1
{
0x11,0x10},//line_2
{
0x00,0x20},//line_3
{
0x7f,0xfe},//line_4
{
0x40,0x02},//line_5
{
0x80,0x04},//line_6
{
0x1f,0xe0},//line_7
{
0x00,0x40},//line_8
{
0x01,0x80},//line_9
{
0xff,0xfe},//line_10
{
0x01,0x00},//line_11
{
0x01,0x00},//line_12
{
0x01,0x00},//line_13
{
0x05,0x00},//line_14
{
0x02,0x00},//line_15/*"学",2*/
{
0x10,0x80},//line_0
{
0x10,0x40},//line_1
{
0x23,0xfc},//line_2
{
0x22,0x04},//line_3
{
0x4a,0x04},//line_4
{
0xfb,0xfc},//line_5
{
0x12,0x00},//line_6
{
0x22,0x00},//line_7
{
0x43,0xfc},//line_8
{
0xfb,0x54},//line_9
{
0x43,0x54},//line_10
{
0x05,0xfc},//line_11
{
0x1d,0x54},//line_12
{
0xe5,0x54},//line_13
{
0x49,0x44},//line_14
{
0x01,0x0c},//line_15/*"编",3*/
{
0x08,0x00},//line_0
{
0x1d,0xfc},//line_1
{
0xf1,0x04},//line_2
{
0x11,0x04},//line_3
{
0x11,0x04},//line_4
{
0xfd,0xfc},//line_5
{
0x10,0x00},//line_6
{
0x30,0x00},//line_7
{
0x39,0xfe},//line_8
{
0x54,0x20},//line_9
{
0x54,0x20},//line_10
{
0x91,0xfc},//line_11
{
0x10,0x20},//line_12
{
0x10,0x20},//line_13
{
0x13,0xfe},//line_14
{
0x10,0x00},//line_15/*"程",4*/
//-----------------------------内容区域结束
{
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},/*移入,9*/
};
MdLep16X16 mdLep(0xFF, 0xFF, 0xFF, 0xFF);
byte i = 0;
byte *ptr;
const int maxColumn = sizeof(message)/ROW_OCTS - LEP_ROWS;
void onTimer()
{
mdLep.loadScreen(ptr+i*ROW_OCTS);
i++;
if(i == maxColumn) i = 0;
}
void setup() {
ptr = &message[0][0];
Serial.begin(9600);
mdLep.mirrorOff();//(关闭汉字镜像)
//mdLep.mirrorOn();
MsTimer2::set(100, onTimer);
MsTimer2::start();
}
void loop() {
}
实验场景图
实验场景动态图
https://www.arduino.cn/data/attachment/forum/201909/06/194759gm2k505p9viek9pl.gif
/* 【花雕动手做】有趣好玩的音乐可视化系列小项目(08)---四位32段点阵屏 项目之一:八段分频8X8点阵屏的音乐频谱灯 接脚连线:MAX9814 接A0 MAX7219 UNO VCC →→→→→ 5V GND →→→→→ GND DIN →→→→→ D11(数据,数据接收引脚) CS →→→→→ D10(负载,命令接收引脚) CLK →→→→→ D13(时钟,时钟引脚) */
#include "LedControl.h"
/* Led matrix - Max7219 Declared */
LedControl lc = LedControl(11, 13, 10, 1);
const int maxScale = 11;
/* Sensor - Max9812 Declared */
const int sensorPin = A0;
const int sampleWindow = 50; // 50ms = 20Hz
unsigned int sample;
unsigned long startMillis;
unsigned long timeCycle;
unsigned int signalMax = 0;
unsigned int signalMin = 1024;
unsigned char index = 0;
unsigned int peakToPeak[8];
unsigned int displayPeak[8];
unsigned int temp[8] = {
0, 0, 0, 0, 0, 0, 0, 0};
unsigned int signalMaxBuff[8];
unsigned int signalMinBuff[8];
void setup() {
// Led matrix
lc.shutdown(0, false); // bật hiện thị
lc.setIntensity(0, 2); // chỉnh độ sáng
lc.clearDisplay(0); // tắt tất cả led
Serial.begin(9600);
}
void loop() {
startMillis = millis();
//peakToPeak = 0;
signalMax = 0;
signalMin = 1024;
// Get data in 50ms
while (millis() - startMillis < sampleWindow) {
sample = analogRead(sensorPin);
if (sample < 1024) {
if (sample > signalMax) {
signalMax = sample;
}
if (sample < signalMin) {
signalMin = sample;
}
}
// 20Hz - 64Hz - 125Hz - 250Hz - 500Hz - 1kHz (timeCycle = 1/F)(ms)
timeCycle = millis() - startMillis;
if (timeCycle == 1 || timeCycle == 2 || timeCycle == 4 || timeCycle == 8
|| timeCycle == 16 || timeCycle == 32 || timeCycle == 40 || timeCycle == 50) {
signalMaxBuff[index]<