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