moving string demo

Dependencies:   KP1632D mbed

文字列をLEDマトリクスに移動表示させるデモ

32x16 LEDドットマトリクス表示を使って、'mbed'の文字列を斜め方向に移動表示させます。
斜めに移動しますので、上下左右の端点にぶつかると、反射して反対方向に動きます。
このため、裏返しの文字になったり、上下反対の文字になったりします。

接続をサボるため、ドットマトリクス表示のArduinoシールドで接続しています。
このため、Arduino接続が可能なmbed基板で試しました。
手持ちの関係で、FRDM-KL25Z、NUCLEOのF401RE,L152RE,F103RBでの動作になりましたが、F103RBだけは、割り込みの間隔が一定しない現象が現れています。

Files at this revision

API Documentation at this revision

Comitter:
morita
Date:
Sun Jun 08 12:52:29 2014 +0000
Commit message:
'mbed' string move demo.;

Changed in this revision

KP1632D.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/KP1632D.lib	Sun Jun 08 12:52:29 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/morita/code/KP1632D/#1b7df36adac7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Jun 08 12:52:29 2014 +0000
@@ -0,0 +1,114 @@
+/*
+    32dot*16dot LED display demo.
+    moving 'mbed'
+*/
+
+#include "mbed.h"
+#include "kp1632d.h"
+
+//if uses push SW (speed UP ,speed DOWN)
+#define PUSH_SW
+
+//Serial pc(SERIAL_TX, SERIAL_RX);
+Serial pc(USBTX, USBRX);
+
+#ifdef TARGET_LPC1768
+KP1632D disp(p5,p6,p7,p8,p9,p10); //defalut interrupt speed = 200uS
+    #ifdef PUSH_SW
+    DigitalIn SW1(p19,PullUp),SW2(p20,PullUp);
+    #endif
+#endif
+#ifdef TARGET_KLXX
+KP1632D disp(D7,D9,D10,D6,D5,D4); //defalut interrupt speed = 200uS
+    #ifdef PUSH_SW
+    DigitalIn SW1(D2,PullUp),SW2(D3,PullUp);
+    #endif
+#endif
+#ifdef TARGET_STM
+KP1632D disp(D7,D9,D10,D6,D5,D4); //defalut interrupt speed = 200uS
+    #ifdef PUSH_SW
+    DigitalIn SW1(D2,PullUp),SW2(D3,PullUp);
+    #endif
+#endif
+#ifndef PUSH_SW
+DigitalIn SW1(NC),SW2(NC);
+#endif
+//KP1632D disp(D7,D9,D10,D6,D5,D4,1000); //set interrupt speed = 1000uS
+//KP1632D disp(D7,D9,D10,D6,D5); //if ENB=NC, interrupt speed=defalut
+//KP1632D disp(D7,D9,D10,D6,D5,NC,1000); //if ENB=NC, interrupt speed set
+
+int main() {
+    Timer timer;
+    uint8_t x[8],y[8];
+    int8_t d_x[8],d_y[8];
+
+    uint32_t cg_buf[7];
+    uint32_t ptn;
+    
+    uint8_t i,j;
+    uint16_t w=100;
+    uint8_t point_x[7][32]={};
+    uint8_t point_y[7][32]={};
+    uint8_t pp=0;
+    
+    bool sw1a=false;
+    bool sw2a=false;
+
+    pc.printf("Start KP-1632D demo. \r\n");
+
+    disp.printf("mbed");//moved string
+    for(i=0;i<7;i++)cg_buf[i]=disp.pbuf[i].i32; //copy string to CG buffer
+    disp.cls();
+    disp.printf("Startdemo");
+    for(i=0;i<7;i++){
+        x[i]=i;
+        y[i]=10-i;
+        d_x[i]=1;
+        d_y[i]=1;
+    }
+    wait_ms(1000);
+
+    timer.start();
+    while(1) {
+        if(timer.read_ms()>w){//wait refresh time
+            //frame calc.
+            timer.reset();
+            pp=(pp+1)&31;
+            for(i=0;i<7;i++){
+                x[i] += d_x[i];//move X direction
+                y[i] += d_y[i];//move Y direction
+                if(x[i]>=31)d_x[i]=-d_x[i];//bound left
+                if(x[i]==0)d_x[i]=-d_x[i];//bound right
+                if(y[i]>=15)d_y[i]=-d_y[i];//bound lower
+                if(y[i]==0)d_y[i]=-d_y[i];//bound upper
+                point_x[i][pp]=x[i];
+                point_y[i][pp]=y[i];
+            }
+            for(i=0;i<16;i++)disp.abuf[i].i32=0;
+            ptn=1;
+            for(i=0;i<32;i++){
+                for(j=0;j<7;j++){
+                    if(cg_buf[j] & ptn)disp.abuf[point_y[j][(pp+i)&31]].i32 |= (1<<point_x[j][(pp+i)&31]);
+                }
+                ptn <<= 1;
+            }
+            disp.tranfer_sw=true;
+        }
+        if(SW1==0){
+            if(sw1a==false){
+                sw1a=true;
+                w += (w/10);
+                if(w>1000)w=1000;//max 1 second
+            }
+        } else sw1a=false;
+        if(SW2==0){
+            if(sw2a==false){
+                sw2a=true;
+                w -= (w/10);
+                if(w<20)w=20; //t>10mS (t>sw scan time)
+            }
+        } else sw2a=false;
+           
+        wait_ms(10);//push sw scan time
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sun Jun 08 12:52:29 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/8a40adfe8776
\ No newline at end of file