![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
moving string demo
文字列をLEDマトリクスに移動表示させるデモ
32x16 LEDドットマトリクス表示を使って、'mbed'の文字列を斜め方向に移動表示させます。
斜めに移動しますので、上下左右の端点にぶつかると、反射して反対方向に動きます。
このため、裏返しの文字になったり、上下反対の文字になったりします。
接続をサボるため、ドットマトリクス表示のArduinoシールドで接続しています。
このため、Arduino接続が可能なmbed基板で試しました。
手持ちの関係で、FRDM-KL25Z、NUCLEOのF401RE,L152RE,F103RBでの動作になりましたが、F103RBだけは、割り込みの間隔が一定しない現象が現れています。
main.cpp@0:3caa8cdd0426, 2014-06-08 (annotated)
- Committer:
- morita
- Date:
- Sun Jun 08 12:52:29 2014 +0000
- Revision:
- 0:3caa8cdd0426
'mbed' string move demo.;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
morita | 0:3caa8cdd0426 | 1 | /* |
morita | 0:3caa8cdd0426 | 2 | 32dot*16dot LED display demo. |
morita | 0:3caa8cdd0426 | 3 | moving 'mbed' |
morita | 0:3caa8cdd0426 | 4 | */ |
morita | 0:3caa8cdd0426 | 5 | |
morita | 0:3caa8cdd0426 | 6 | #include "mbed.h" |
morita | 0:3caa8cdd0426 | 7 | #include "kp1632d.h" |
morita | 0:3caa8cdd0426 | 8 | |
morita | 0:3caa8cdd0426 | 9 | //if uses push SW (speed UP ,speed DOWN) |
morita | 0:3caa8cdd0426 | 10 | #define PUSH_SW |
morita | 0:3caa8cdd0426 | 11 | |
morita | 0:3caa8cdd0426 | 12 | //Serial pc(SERIAL_TX, SERIAL_RX); |
morita | 0:3caa8cdd0426 | 13 | Serial pc(USBTX, USBRX); |
morita | 0:3caa8cdd0426 | 14 | |
morita | 0:3caa8cdd0426 | 15 | #ifdef TARGET_LPC1768 |
morita | 0:3caa8cdd0426 | 16 | KP1632D disp(p5,p6,p7,p8,p9,p10); //defalut interrupt speed = 200uS |
morita | 0:3caa8cdd0426 | 17 | #ifdef PUSH_SW |
morita | 0:3caa8cdd0426 | 18 | DigitalIn SW1(p19,PullUp),SW2(p20,PullUp); |
morita | 0:3caa8cdd0426 | 19 | #endif |
morita | 0:3caa8cdd0426 | 20 | #endif |
morita | 0:3caa8cdd0426 | 21 | #ifdef TARGET_KLXX |
morita | 0:3caa8cdd0426 | 22 | KP1632D disp(D7,D9,D10,D6,D5,D4); //defalut interrupt speed = 200uS |
morita | 0:3caa8cdd0426 | 23 | #ifdef PUSH_SW |
morita | 0:3caa8cdd0426 | 24 | DigitalIn SW1(D2,PullUp),SW2(D3,PullUp); |
morita | 0:3caa8cdd0426 | 25 | #endif |
morita | 0:3caa8cdd0426 | 26 | #endif |
morita | 0:3caa8cdd0426 | 27 | #ifdef TARGET_STM |
morita | 0:3caa8cdd0426 | 28 | KP1632D disp(D7,D9,D10,D6,D5,D4); //defalut interrupt speed = 200uS |
morita | 0:3caa8cdd0426 | 29 | #ifdef PUSH_SW |
morita | 0:3caa8cdd0426 | 30 | DigitalIn SW1(D2,PullUp),SW2(D3,PullUp); |
morita | 0:3caa8cdd0426 | 31 | #endif |
morita | 0:3caa8cdd0426 | 32 | #endif |
morita | 0:3caa8cdd0426 | 33 | #ifndef PUSH_SW |
morita | 0:3caa8cdd0426 | 34 | DigitalIn SW1(NC),SW2(NC); |
morita | 0:3caa8cdd0426 | 35 | #endif |
morita | 0:3caa8cdd0426 | 36 | //KP1632D disp(D7,D9,D10,D6,D5,D4,1000); //set interrupt speed = 1000uS |
morita | 0:3caa8cdd0426 | 37 | //KP1632D disp(D7,D9,D10,D6,D5); //if ENB=NC, interrupt speed=defalut |
morita | 0:3caa8cdd0426 | 38 | //KP1632D disp(D7,D9,D10,D6,D5,NC,1000); //if ENB=NC, interrupt speed set |
morita | 0:3caa8cdd0426 | 39 | |
morita | 0:3caa8cdd0426 | 40 | int main() { |
morita | 0:3caa8cdd0426 | 41 | Timer timer; |
morita | 0:3caa8cdd0426 | 42 | uint8_t x[8],y[8]; |
morita | 0:3caa8cdd0426 | 43 | int8_t d_x[8],d_y[8]; |
morita | 0:3caa8cdd0426 | 44 | |
morita | 0:3caa8cdd0426 | 45 | uint32_t cg_buf[7]; |
morita | 0:3caa8cdd0426 | 46 | uint32_t ptn; |
morita | 0:3caa8cdd0426 | 47 | |
morita | 0:3caa8cdd0426 | 48 | uint8_t i,j; |
morita | 0:3caa8cdd0426 | 49 | uint16_t w=100; |
morita | 0:3caa8cdd0426 | 50 | uint8_t point_x[7][32]={}; |
morita | 0:3caa8cdd0426 | 51 | uint8_t point_y[7][32]={}; |
morita | 0:3caa8cdd0426 | 52 | uint8_t pp=0; |
morita | 0:3caa8cdd0426 | 53 | |
morita | 0:3caa8cdd0426 | 54 | bool sw1a=false; |
morita | 0:3caa8cdd0426 | 55 | bool sw2a=false; |
morita | 0:3caa8cdd0426 | 56 | |
morita | 0:3caa8cdd0426 | 57 | pc.printf("Start KP-1632D demo. \r\n"); |
morita | 0:3caa8cdd0426 | 58 | |
morita | 0:3caa8cdd0426 | 59 | disp.printf("mbed");//moved string |
morita | 0:3caa8cdd0426 | 60 | for(i=0;i<7;i++)cg_buf[i]=disp.pbuf[i].i32; //copy string to CG buffer |
morita | 0:3caa8cdd0426 | 61 | disp.cls(); |
morita | 0:3caa8cdd0426 | 62 | disp.printf("Startdemo"); |
morita | 0:3caa8cdd0426 | 63 | for(i=0;i<7;i++){ |
morita | 0:3caa8cdd0426 | 64 | x[i]=i; |
morita | 0:3caa8cdd0426 | 65 | y[i]=10-i; |
morita | 0:3caa8cdd0426 | 66 | d_x[i]=1; |
morita | 0:3caa8cdd0426 | 67 | d_y[i]=1; |
morita | 0:3caa8cdd0426 | 68 | } |
morita | 0:3caa8cdd0426 | 69 | wait_ms(1000); |
morita | 0:3caa8cdd0426 | 70 | |
morita | 0:3caa8cdd0426 | 71 | timer.start(); |
morita | 0:3caa8cdd0426 | 72 | while(1) { |
morita | 0:3caa8cdd0426 | 73 | if(timer.read_ms()>w){//wait refresh time |
morita | 0:3caa8cdd0426 | 74 | //frame calc. |
morita | 0:3caa8cdd0426 | 75 | timer.reset(); |
morita | 0:3caa8cdd0426 | 76 | pp=(pp+1)&31; |
morita | 0:3caa8cdd0426 | 77 | for(i=0;i<7;i++){ |
morita | 0:3caa8cdd0426 | 78 | x[i] += d_x[i];//move X direction |
morita | 0:3caa8cdd0426 | 79 | y[i] += d_y[i];//move Y direction |
morita | 0:3caa8cdd0426 | 80 | if(x[i]>=31)d_x[i]=-d_x[i];//bound left |
morita | 0:3caa8cdd0426 | 81 | if(x[i]==0)d_x[i]=-d_x[i];//bound right |
morita | 0:3caa8cdd0426 | 82 | if(y[i]>=15)d_y[i]=-d_y[i];//bound lower |
morita | 0:3caa8cdd0426 | 83 | if(y[i]==0)d_y[i]=-d_y[i];//bound upper |
morita | 0:3caa8cdd0426 | 84 | point_x[i][pp]=x[i]; |
morita | 0:3caa8cdd0426 | 85 | point_y[i][pp]=y[i]; |
morita | 0:3caa8cdd0426 | 86 | } |
morita | 0:3caa8cdd0426 | 87 | for(i=0;i<16;i++)disp.abuf[i].i32=0; |
morita | 0:3caa8cdd0426 | 88 | ptn=1; |
morita | 0:3caa8cdd0426 | 89 | for(i=0;i<32;i++){ |
morita | 0:3caa8cdd0426 | 90 | for(j=0;j<7;j++){ |
morita | 0:3caa8cdd0426 | 91 | if(cg_buf[j] & ptn)disp.abuf[point_y[j][(pp+i)&31]].i32 |= (1<<point_x[j][(pp+i)&31]); |
morita | 0:3caa8cdd0426 | 92 | } |
morita | 0:3caa8cdd0426 | 93 | ptn <<= 1; |
morita | 0:3caa8cdd0426 | 94 | } |
morita | 0:3caa8cdd0426 | 95 | disp.tranfer_sw=true; |
morita | 0:3caa8cdd0426 | 96 | } |
morita | 0:3caa8cdd0426 | 97 | if(SW1==0){ |
morita | 0:3caa8cdd0426 | 98 | if(sw1a==false){ |
morita | 0:3caa8cdd0426 | 99 | sw1a=true; |
morita | 0:3caa8cdd0426 | 100 | w += (w/10); |
morita | 0:3caa8cdd0426 | 101 | if(w>1000)w=1000;//max 1 second |
morita | 0:3caa8cdd0426 | 102 | } |
morita | 0:3caa8cdd0426 | 103 | } else sw1a=false; |
morita | 0:3caa8cdd0426 | 104 | if(SW2==0){ |
morita | 0:3caa8cdd0426 | 105 | if(sw2a==false){ |
morita | 0:3caa8cdd0426 | 106 | sw2a=true; |
morita | 0:3caa8cdd0426 | 107 | w -= (w/10); |
morita | 0:3caa8cdd0426 | 108 | if(w<20)w=20; //t>10mS (t>sw scan time) |
morita | 0:3caa8cdd0426 | 109 | } |
morita | 0:3caa8cdd0426 | 110 | } else sw2a=false; |
morita | 0:3caa8cdd0426 | 111 | |
morita | 0:3caa8cdd0426 | 112 | wait_ms(10);//push sw scan time |
morita | 0:3caa8cdd0426 | 113 | } |
morita | 0:3caa8cdd0426 | 114 | } |