【雕爷学编程】Arduino动手做(117)---P10V706LED屏模组2

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百一十七:P10单红V706模组 32*16单元板LED显示屏

在这里插入图片描述
在这里插入图片描述
实验一百一十七:P10单红V706模组 32*16单元板LED显示屏
http://t.csdnimg.cn/HGakZ
http://t.csdnimg.cn/2urpo
http://t.csdnimg.cn/1fFMK
http://t.csdnimg.cn/kGjd2

补充:LedP10库功能:
1、最多可驱动320×16像素(10个面板级联)
2、支持双行显示,即一个面板分为两个面板。
3、支持动态屏幕刷新。可以编程以在面板上显示动态内容。
4、支持不同的滚动速度。
5、静态和滚动文本模式。可以在运行时从一个切换到另一个。
6、现在仅支持基于文本的内容(Linkboy3.5仿真编程已能支持图片显示)
7、256级亮度控制。

在这里插入图片描述

找到的P10V706LED屏模组的电原理图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

P10(1R)V706模组技术参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验接线示意图

在这里插入图片描述
在这里插入图片描述
程序七:滚动显示Hello World 1234567890
(1)Arduino参考开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序七:滚动显示Hello World 1234567890
*/

#include <SPI.h>//导入驱动库
#include <DMD.h>
#include <TimerOne.h>
#include "SystemFont5x7.h"
#include "Arial_black_16.h"
#define ROW 1
#define COLUMN 1
#define FONT Arial_Black_16//字体16
DMD led_module(ROW, COLUMN);//行、列

void scan_module() {
  led_module.scanDisplayBySPI();//模块扫描显示 By SPI
}

void setup() {
  Timer1.initialize(2000);
  Timer1.attachInterrupt(scan_module);
  led_module.clearScreen( true );
}

void loop() {
  led_module.selectFont(FONT);//设置字体
  led_module.drawMarquee("Hello World 1234567890", 25, (32 * ROW), 0);
  long start = millis();
  long timming = start;
  boolean flag = false;
  while (!flag)
  {
    if ((timming + 20) < millis())
    {
      flag = led_module.stepMarquee(-1, 0);
      timming = millis();
      delay(50);//通过延时时间来调整字幕滚动快慢
    }
  }
}

(2)实验场景图
在这里插入图片描述
在这里插入图片描述

(3)实验的视频记录
https://v.youku.com/v_show/id_XNTg3MjI2MjE0MA==.html

程序八:使用 Arduino 在 P10 LED 显示模块上显示光照度
(1)Arduino参考开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序八:使用 Arduino 在 P10 LED 显示模块上显示光照度
*/

/* 插入文件库 */
#include   <SPI.h>
#include   <DMD.h>
#include   <TimerOne.h>
#include   <SystemFont5x7.h>
#define Panjang 1             // 显示 P10 的长度数
#define Lebar 1               //显示 P10 的宽度数
#define sensor A0             // 定义光敏传感器引脚 A0
DMD dmd(Panjang, Lebar);      // 长 x 宽
float suhu;                   //定义变量
char chr[5];

void ScanDMD() {
  dmd.scanDisplayBySPI();
}

void setup(void) {
  // 设置 DMDDMD
  Timer1.initialize( 5000 );
  Timer1.attachInterrupt( ScanDMD );
  dmd.selectFont(SystemFont5x7);    // 使用的字体
  dmd.clearScreen( true );
  Serial.begin(9600);               // 激活通讯串口功能
}

void loop(void) {
  dmd.clearScreen( true );
  suhu = 0;
  suhu = analogRead(sensor);
  suhu = (5.0 * suhu * 100.0) / 1024.0;
  Serial.println(suhu);
  dtostrf(suhu, 4, 2, chr);
  dmd.drawString( 2, 0, chr, 5, GRAPHICS_NORMAL );
  dmd.drawString( 7, 9, "'OK", 4, GRAPHICS_NORMAL );
  delay(1000);
}

(2)实验串口返回情况

在这里插入图片描述
(3)实验场景图
在这里插入图片描述

程序九:Freetronics DMD 的时钟读出项目
(1)Arduino参考开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序九:Freetronics DMD 的时钟读出项目
*/

//SPI.h 必须包含,因为 DMD 是由 SPI 写入的(否则 IDE 会抱怨)
#include <SPI.h>
#include <DMD.h>
#include <TimerOne.h>
#include "Arial_black_16.h"

//以 dmd 的身份启动 DMD 库
DMD dmd(1, 1);

/*-------------------------------------------------------------------
  Timer1 (TimerOne) 驱动的 DMD 刷新扫描的中断处理程序,这得到
  在 Timer1.initialize() 中设置的周期调用;
  -------------------------------------------------------------------*/
void ScanDMD() {
  dmd.scanDisplayBySPI();
}

/*-------------------------------------------------------------------
  从 4 位时间值在屏幕上显示时钟数字,并选择是否
  闪烁的冒号打开或关闭
  -------------------------------------------------------------------*/
void ShowClockNumbers( unsigned int uiTime, byte bColonOn ) {
  dmd.clearScreen(true);
  dmd.drawChar(  1,  3, '0' + ((uiTime % 10000) / 1000), GRAPHICS_NORMAL ); // 数千
  dmd.drawChar(  8,  3, '0' + ((uiTime % 1000) / 100),  GRAPHICS_NORMAL ); // 数百
  dmd.drawChar( 17,  3, '0' + ((uiTime % 100)  / 10),   GRAPHICS_NORMAL ); //十位
  dmd.drawChar( 25,  3, '0' + (uiTime % 10),          GRAPHICS_NORMAL ); // 个位
  if ( bColonOn )
    dmd.drawChar( 15,  3, ':', GRAPHICS_OR     );   //时钟冒号覆盖
  else
    dmd.drawChar( 15,  3, ':', GRAPHICS_NOR    );   //时钟冒号覆盖
}

/*-------------------------------------------------------------------
  设置
  在主循环开始之前由 Arduino 架构调用
  -------------------------------------------------------------------*/
void setup(void) {
  //初始化TimerOne用于扫描和刷新显示的中断/CPU使用率
  Timer1.initialize( 5000 );           //调用 ScanDMD 的周期(以微秒为单位)。任何超过 5000 (5ms) 的时间都可以看到闪烁。
  Timer1.attachInterrupt( ScanDMD );   //将 Timer1 中断附加到 ScanDMD 到 dmd.scanDisplayBySPI()

  //清除/初始化内存中的DMD像素
  dmd.clearScreen( true );   //true 为正常(所有像素关闭),false 为负(所有像素打开)
  dmd.selectFont(Arial_Black_16);
}

/*-------------------------------------------------------------------
  环形
  Arduino架构主循环
  --------------------------------------------------------------------*/
void loop(void) {
  unsigned int ui;

  // 10 x 14 字体时钟,包括像素的 OR 和 NOR 模式演示,以便可以覆盖闪烁的冒号
  ui = 1234;
  ShowClockNumbers( ui, true );
  delay( 1000 );
  ShowClockNumbers( ui, false );
  delay( 1000 );
  ShowClockNumbers( ui, true );
  delay( 1000 );
  ShowClockNumbers( ui, false );
  delay( 1000 );

  ui = 2245;
  ShowClockNumbers( ui, true );
  delay( 1000 );
  ShowClockNumbers( ui, false );
  delay( 1000 );
  ShowClockNumbers( ui, true );
  delay( 1000 );
  ShowClockNumbers( ui, false );
  delay( 1000 );
}

(2)实验场景图
在这里插入图片描述
在这里插入图片描述

程序十:Freetronics DMD库的综合测试
(1)Arduino参考开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序十:Freetronics DMD库的综合测试
*/

#include <SPI.h>   //导入相关驱动库
#include <DMD.h>
#include <TimerOne.h>
#include "SystemFont5x7.h"
#include "Arial_black_16.h"

//以 dmd 的身份启动 DMD 库
#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);

/*-------------------------------------------------------------------
  Timer1 (TimerOne) 驱动的 DMD 刷新扫描的中断处理程序,这得到
  在 Timer1.initialize() 中设置的周期调用;
-------------------------------------------------------------------*/
void ScanDMD() {
  dmd.scanDisplayBySPI();
}

/*-------------------------------------------------------------------
  设置
  在主循环开始之前由 Arduino 架构调用
-------------------------------------------------------------------*/
void setup(void) {
  //初始化TimerOne用于扫描和刷新显示的中断/CPU使用率
  Timer1.initialize( 5000 );           //调用 ScanDMD 的周期(以微秒为单位)。任何超过 5000 (5ms) 的时间都可以看到闪烁。
  Timer1.attachInterrupt( ScanDMD );   //将 Timer1 中断附加到 ScanDMD 到 dmd.scanDisplayBySPI()
  //清除/初始化内存中的DMD像素
  dmd.clearScreen( true );   //true 为正常(所有像素关闭),false 为负(所有像素打开)
}

/*-------------------------------------------------------------------
  环形
  Arduino架构主循环
-------------------------------------------------------------------*/
void loop(void) {
  byte b;
  // 10 x 14 字体时钟,包括OR 和 NOR 模式演示,以便可以覆盖闪烁的冒号
  dmd.clearScreen( true );
  dmd.selectFont(Arial_Black_16);
  dmd.drawChar(  0,  3, '2', GRAPHICS_NORMAL );
  dmd.drawChar(  7,  3, '3', GRAPHICS_NORMAL );
  dmd.drawChar( 17,  3, '4', GRAPHICS_NORMAL );
  dmd.drawChar( 25,  3, '5', GRAPHICS_NORMAL );
  dmd.drawChar( 15,  3, ':', GRAPHICS_OR     );   //时钟冒号覆盖
  delay( 1000 );
  dmd.drawChar( 15,  3, ':', GRAPHICS_NOR    );   //时钟冒号覆盖关闭
  delay( 1000 );
  dmd.drawChar( 15,  3, ':', GRAPHICS_OR     );   //时钟冒号覆盖
  delay( 1000 );
  dmd.drawChar( 15,  3, ':', GRAPHICS_NOR    );   //时钟冒号覆盖关闭
  delay( 1000 );
  dmd.drawChar( 15,  3, ':', GRAPHICS_OR     );   //时钟冒号覆盖
  delay( 1000 );

  //滚动文本
  dmd.drawMarquee("Scrolling Text", 14, (32 * DISPLAYS_ACROSS) - 1, 0);
  long start = millis();
  long timer = start;
  boolean ret = false;
  while (!ret) {
    if ((timer + 30) < millis()) {
      ret = dmd.stepMarquee(-1, 0);
      timer = millis();
    }
  }
  // 一半像素
  dmd.drawTestPattern( PATTERN_ALT_0 );
  delay( 1000 );

  // 另一半打开
  dmd.drawTestPattern( PATTERN_ALT_1 );
  delay( 1000 );

  // 显示一些文本
  dmd.clearScreen( true );
  dmd.selectFont(System5x7);
  for (byte x = 0; x < DISPLAYS_ACROSS; x++) {
    for (byte y = 0; y < DISPLAYS_DOWN; y++) {
      dmd.drawString(  2 + (32 * x),  1 + (16 * y), "freet", 5, GRAPHICS_NORMAL );
      dmd.drawString(  2 + (32 * x),  9 + (16 * y), "ronic", 5, GRAPHICS_NORMAL );
    }
  }
  delay( 2000 );

  // 在显示器外面画一个边框
  dmd.clearScreen( true );
  dmd.drawBox(  0,  0, (32 * DISPLAYS_ACROSS) - 1, (16 * DISPLAYS_DOWN) - 1, GRAPHICS_NORMAL );
  delay( 1000 );

  for (byte y = 0; y < DISPLAYS_DOWN; y++) {
    for (byte x = 0; x < DISPLAYS_ACROSS; x++) {
      // draw an X
      int ix = 32 * x;
      int iy = 16 * y;
      dmd.drawLine(  0 + ix,  0 + iy, 11 + ix, 15 + iy, GRAPHICS_NORMAL );
      dmd.drawLine(  0 + ix, 15 + iy, 11 + ix,  0 + iy, GRAPHICS_NORMAL );
      delay( 1000 );

      //画一个圆
      dmd.drawCircle( 16 + ix,  8 + iy,  5, GRAPHICS_NORMAL );
      delay( 1000 );

      // 绘制一个填充框
      dmd.drawFilledBox( 24 + ix, 3 + iy, 29 + ix, 13 + iy, GRAPHICS_NORMAL );
      delay( 1000 );
    }
  }

  // 条纹追逐者
  for ( b = 0 ; b < 20 ; b++ )
  {
    dmd.drawTestPattern( (b & 1) + PATTERN_STRIPE_0 );
    delay( 200 );
  }
  delay( 200 );
}

(2)实验场景图
在这里插入图片描述
在这里插入图片描述

(3)实验的视频记录
https://v.youku.com/v_show/id_XNTg3MTM3MTYxNg==.html?spm=a2hcb.playlsit.page.1

程序十一:使用DMD2库的最简显示Hello
(1)Arduino参考开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序十一:使用DMD2库的最简显示Hello
*/

#include <SPI.h>//导入相关驱动库
#include <DMD2.h>
#include <fonts/Arial14.h>

const int WIDTH = 1;
const uint8_t *FONT = Arial14;
SoftDMD dmd(WIDTH, 1);//一块单元板
DMD_TextBox box(dmd);

void setup() {
  dmd.setBrightness(150);//设置亮度
  dmd.selectFont(FONT);//设置字体
  dmd.begin();//LED屏初始化
}

void loop() {
  dmd.drawString(3, 2, String("Hello"));//定义显示位置与内容
}

(2)实验场景图

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
华为P10Plus手机原厂维修图纸 原理图 电路图 故障维修图(PDF版) 华为P10Plus 位置图 点位图 位号图.pdf 华为P10Plus 原理图 电路图.pdf 华为P10Plus 注释图 故障标注 主板元器件位置图.pdf 华为P10Plus 原厂图 维修流程图 BT故障.pdf 华为P10Plus 原厂图 维修流程图 CDMA发射故障.pdf 华为P10Plus 原厂图 维修流程图 CDMA接收故障.pdf 华为P10Plus 原厂图 维修流程图 FDD LTE主集接收故障1.pdf 华为P10Plus 原厂图 维修流程图 FDD LTE主集接收故障2.pdf 华为P10Plus 原厂图 维修流程图 FDD LTE分集接收故障1.pdf 华为P10Plus 原厂图 维修流程图 FDD LTE分集接收故障2.pdf 华为P10Plus 原厂图 维修流程图 FDD LTE发射故障.pdf 华为P10Plus 原厂图 维修流程图 GPS故障.pdf 华为P10Plus 原厂图 维修流程图 GSM发射故障.pdf 华为P10Plus 原厂图 维修流程图 GSM接收故障.pdf 华为P10Plus 原厂图 维修流程图 HALL故障(皮套式).pdf 华为P10Plus 原厂图 维修流程图 LCD显示故障.pdf 华为P10Plus 原厂图 维修流程图 NFC故障.pdf 华为P10Plus 原厂图 维修流程图 PMU输出电压测量点与电压值.pdf 华为P10Plus 原厂图 维修流程图 TD SCDMA发射故障.pdf 华为P10Plus 原厂图 维修流程图 TD SCDMA接收故障.pdf 华为P10Plus 原厂图 维修流程图 TDD LTE主集接收故障.pdf 华为P10Plus 原厂图 维修流程图 TDD LTE分集接收故障.pdf 华为P10Plus 原厂图 维修流程图 TDD LTE发射故障.pdf 华为P10Plus 原厂图 维修流程图 VBAT_SYS、VBATT相关器件PCB图.pdf 华为P10Plus 原厂图 维修流程图 WCDMA发射故障.pdf 华为P10Plus 原厂图 维修流程图 WCDMA接收故障.pdf 华为P10Plus 原厂图 维修流程图 WIFI故障.pdf 华为P10Plus 原厂图 维修流程图 不开机(大电流).pdf 华为P10Plus 原厂图 维修流程图 不开机(小电流).pdf 华为P10Plus 原厂图 维修流程图 不开机(无电流).pdf 华为P10Plus 原厂图 维修流程图 不识SD卡.pdf 华为P10Plus 原厂图 维修流程图 不识USB.pdf 华为P10Plus 原厂图 维修流程图 不识主卡.pdf 华为P10Plus 原厂图 维修流程图 不识副卡.pdf 华为P10Plus 原厂图 维修流程图 充电故障.pdf 华为P10Plus 原厂图 维修流程图 前摄像故障.pdf 华为P10Plus 原厂图 维修流程图 受话故障.pdf 华为P10Plus 原厂图 维修流程图 后摄像故障.pdf 华为P10Plus 原厂图 维修流程图 射频发射框架图.pdf 华为P10Plus 原厂图 维修流程图 射频接收框架图.pdf 华为P10Plus 原厂图 维修流程图 开机上电时序图.pdf 华为P10Plus 原厂图 维修流程图 扬声器故障.pdf 华为P10Plus 原厂图 维修流程图 指纹故障.pdf 华为P10Plus 原厂图 维修流程图 接近光故障.pdf 华为P10Plus 原厂图 维修流程图 耳机故障.pdf 华为P10Plus 原厂图 维修流程图 触摸故障.pdf 华为P10Plus 原厂图 维修流程图 送话故障.pdf 华为P10Plus 原厂图 维修流程图 重力感应故障.pdf 华为P10Plus 原厂图 维修流程图 闪光灯故障.pdf 华为P10Plus 原厂图 维修流程图 马达故障.pdf
ise进行led显示块的设计主要包括以下几个步骤: 1. 确定需求:首先需要明确LED显示块的功能和要显示的内容,例如数字、字母、符号还是图案等。 2. 选择LED类型:根据需求选择适合的LED类型,目前常见的LED有7段式LED、矩阵式LED和点阵式LED等。 3. 确定引脚分配:根据所选LED类型,确定每个LED的引脚分配,包括电源引脚和数据输入引脚。 4. 连接电路:根据引脚分配,设计出合适的电路连接方式,保证每个LED都能正确接收输入信号并亮起。 5. 驱动电路:设计合适的驱动电路来控制LED的亮灭状态,可以采用常见的LED驱动芯片如MAX7219或者使用微控制器来实现。 6. 电源设计:为整个LED显示块设计一个稳定的电源供电,同时要考虑到电源的功率适配LED的亮度和数量。 7. PCB布局:将电路设计转化为PCB布局,根据实际需要确定PCB尺寸和布局方式,确保电路连接紧密和PCB的可制造性。 8. 元器件选择:选择符合要求的元器件,包括LED、电阻、电容和连接器等,确保它们的参数与设计要求相符。 9. 确定封装方式:根据实际情况选择LED显示块的封装方式,可以是单独的块或者整合在其他设备中。 10. 测试和验证:制造出原型后,进行测试和验证,确保LED显示块的功能和性能满足设计要求。 通过以上步骤的设计和实施,就可以完成ISE进行LED显示块的设计,从而实现对LED的控制和显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值