程序十: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 );
- }
复制代码
|