32dot x 16dot LED matrix display driving library.
Dependents: KP1632D_char_demo KP1632D_Gsens_demo KP1632D_move_mbed_demo
kp1632d.cpp@0:1b7df36adac7, 2014-05-31 (annotated)
- Committer:
- morita
- Date:
- Sat May 31 14:26:47 2014 +0000
- Revision:
- 0:1b7df36adac7
Fix first program.;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
morita | 0:1b7df36adac7 | 1 | #include "mbed.h" |
morita | 0:1b7df36adac7 | 2 | #include "kp1632d.h" |
morita | 0:1b7df36adac7 | 3 | #include "CG.h" |
morita | 0:1b7df36adac7 | 4 | |
morita | 0:1b7df36adac7 | 5 | KP1632D::KP1632D(PinName BD7851_COM, PinName BD7851_CA, PinName BD7851_CB, PinName BD7851_CLK, PinName BD7851_LT, PinName BD7851_ENB, uint16_t period) : |
morita | 0:1b7df36adac7 | 6 | _BD7851_COM(BD7851_COM), _BD7851_CA(BD7851_CA), _BD7851_CB(BD7851_CB), _BD7851_CLK(BD7851_CLK), _BD7851_LT(BD7851_LT), _BD7851_ENB(BD7851_ENB) { |
morita | 0:1b7df36adac7 | 7 | |
morita | 0:1b7df36adac7 | 8 | tranfer_sw=false; |
morita | 0:1b7df36adac7 | 9 | _BD7851_ENB=1; |
morita | 0:1b7df36adac7 | 10 | for(uint8_t i=0;i<16;i++)pbuf[i].i32=0; |
morita | 0:1b7df36adac7 | 11 | _ticker.attach_us(this,&KP1632D::disp_isr, period);//defalut value (int=5KHz frame rate=300Hz) |
morita | 0:1b7df36adac7 | 12 | wait_us(200*3); |
morita | 0:1b7df36adac7 | 13 | _BD7851_ENB=0; |
morita | 0:1b7df36adac7 | 14 | xp=0; |
morita | 0:1b7df36adac7 | 15 | yp=0; |
morita | 0:1b7df36adac7 | 16 | } |
morita | 0:1b7df36adac7 | 17 | |
morita | 0:1b7df36adac7 | 18 | void KP1632D::disp_isr(){ |
morita | 0:1b7df36adac7 | 19 | static uint8_t pos=0; |
morita | 0:1b7df36adac7 | 20 | static uint16_t ptn,ssr_A=0,ssr_B=0,ssr_COM=0; |
morita | 0:1b7df36adac7 | 21 | uint8_t i; |
morita | 0:1b7df36adac7 | 22 | |
morita | 0:1b7df36adac7 | 23 | if(pos==0)ptn=0x8000; |
morita | 0:1b7df36adac7 | 24 | ssr_A=pbuf[pos].i16[0]; ssr_B=pbuf[pos].i16[1]; ssr_COM=ptn; |
morita | 0:1b7df36adac7 | 25 | for(i=0;i<16;i++){ |
morita | 0:1b7df36adac7 | 26 | _BD7851_CA=(ssr_A & 0x8000)==0x8000; |
morita | 0:1b7df36adac7 | 27 | _BD7851_CB=(ssr_B & 0x8000)==0x8000; |
morita | 0:1b7df36adac7 | 28 | _BD7851_COM=ssr_COM & 1; |
morita | 0:1b7df36adac7 | 29 | ssr_COM >>= 1; |
morita | 0:1b7df36adac7 | 30 | _BD7851_CLK=1; |
morita | 0:1b7df36adac7 | 31 | ssr_A <<= 1; |
morita | 0:1b7df36adac7 | 32 | _BD7851_CLK=0; |
morita | 0:1b7df36adac7 | 33 | ssr_B <<= 1; |
morita | 0:1b7df36adac7 | 34 | } |
morita | 0:1b7df36adac7 | 35 | _BD7851_LT=1; |
morita | 0:1b7df36adac7 | 36 | ptn >>= 1; |
morita | 0:1b7df36adac7 | 37 | _BD7851_LT=0; |
morita | 0:1b7df36adac7 | 38 | pos = (pos+1) & 15; |
morita | 0:1b7df36adac7 | 39 | if((pos==0) && (tranfer_sw)){ |
morita | 0:1b7df36adac7 | 40 | tranfer_sw=false; |
morita | 0:1b7df36adac7 | 41 | memcpy(pbuf,abuf,sizeof(pbuf));//4byte 16line |
morita | 0:1b7df36adac7 | 42 | } |
morita | 0:1b7df36adac7 | 43 | } |
morita | 0:1b7df36adac7 | 44 | |
morita | 0:1b7df36adac7 | 45 | void KP1632D::pset_XY(uint8_t X , uint8_t Y){ |
morita | 0:1b7df36adac7 | 46 | if((X>31)||(Y>15))return; |
morita | 0:1b7df36adac7 | 47 | pbuf[Y].i8[X>>3] |= 1<<(X & 7); |
morita | 0:1b7df36adac7 | 48 | } |
morita | 0:1b7df36adac7 | 49 | |
morita | 0:1b7df36adac7 | 50 | void KP1632D::preset_XY(uint8_t X , uint8_t Y){ |
morita | 0:1b7df36adac7 | 51 | if((X>31)||(Y>15))return; |
morita | 0:1b7df36adac7 | 52 | pbuf[Y].i8[X>>3] &= ~(1<<(X & 7)); |
morita | 0:1b7df36adac7 | 53 | } |
morita | 0:1b7df36adac7 | 54 | |
morita | 0:1b7df36adac7 | 55 | void KP1632D::posline_X(uint8_t X , uint8_t pos){ |
morita | 0:1b7df36adac7 | 56 | uint8_t i; |
morita | 0:1b7df36adac7 | 57 | |
morita | 0:1b7df36adac7 | 58 | if((X>31)||(pos>15))return; |
morita | 0:1b7df36adac7 | 59 | for(i=0;i<16;i++){ |
morita | 0:1b7df36adac7 | 60 | if(i<=pos)pset_XY(X,i); else preset_XY(X,i); |
morita | 0:1b7df36adac7 | 61 | } |
morita | 0:1b7df36adac7 | 62 | } |
morita | 0:1b7df36adac7 | 63 | |
morita | 0:1b7df36adac7 | 64 | void KP1632D::cls(){ |
morita | 0:1b7df36adac7 | 65 | for(uint8_t i=0;i<16;i++)pbuf[i].i32=0; |
morita | 0:1b7df36adac7 | 66 | xp=0; |
morita | 0:1b7df36adac7 | 67 | yp=0; |
morita | 0:1b7df36adac7 | 68 | } |
morita | 0:1b7df36adac7 | 69 | |
morita | 0:1b7df36adac7 | 70 | void KP1632D::gotoxy(uint8_t x,uint8_t y){ |
morita | 0:1b7df36adac7 | 71 | xp=x; if(xp>4)xp=4; |
morita | 0:1b7df36adac7 | 72 | yp=y; if(yp>1)yp=1; |
morita | 0:1b7df36adac7 | 73 | } |
morita | 0:1b7df36adac7 | 74 | |
morita | 0:1b7df36adac7 | 75 | int KP1632D::_putc(int value) { |
morita | 0:1b7df36adac7 | 76 | uint8_t c,i,y; |
morita | 0:1b7df36adac7 | 77 | |
morita | 0:1b7df36adac7 | 78 | if(value==13){ |
morita | 0:1b7df36adac7 | 79 | xp=0; |
morita | 0:1b7df36adac7 | 80 | return value; |
morita | 0:1b7df36adac7 | 81 | } |
morita | 0:1b7df36adac7 | 82 | if(yp>1)yp=1; |
morita | 0:1b7df36adac7 | 83 | if(value==10){ |
morita | 0:1b7df36adac7 | 84 | yp++; |
morita | 0:1b7df36adac7 | 85 | if(yp>1){ |
morita | 0:1b7df36adac7 | 86 | for(i=0;i<8;i++){ |
morita | 0:1b7df36adac7 | 87 | pbuf[i].i32=pbuf[i+8].i32; |
morita | 0:1b7df36adac7 | 88 | pbuf[i+8].i32=0; |
morita | 0:1b7df36adac7 | 89 | } |
morita | 0:1b7df36adac7 | 90 | yp=1; |
morita | 0:1b7df36adac7 | 91 | } |
morita | 0:1b7df36adac7 | 92 | return value; |
morita | 0:1b7df36adac7 | 93 | } |
morita | 0:1b7df36adac7 | 94 | |
morita | 0:1b7df36adac7 | 95 | if(xp>4){ |
morita | 0:1b7df36adac7 | 96 | xp=0; yp++; |
morita | 0:1b7df36adac7 | 97 | if(yp>1){ |
morita | 0:1b7df36adac7 | 98 | for(i=0;i<8;i++){ |
morita | 0:1b7df36adac7 | 99 | pbuf[i].i32=pbuf[i+8].i32; |
morita | 0:1b7df36adac7 | 100 | pbuf[i+8].i32=0; |
morita | 0:1b7df36adac7 | 101 | } |
morita | 0:1b7df36adac7 | 102 | yp=1; |
morita | 0:1b7df36adac7 | 103 | } |
morita | 0:1b7df36adac7 | 104 | } |
morita | 0:1b7df36adac7 | 105 | if((value>=0x20)&&(value<0x80)){ |
morita | 0:1b7df36adac7 | 106 | c=value-0x20; |
morita | 0:1b7df36adac7 | 107 | y=yp*8; |
morita | 0:1b7df36adac7 | 108 | for(i=0;i<8;i++){ |
morita | 0:1b7df36adac7 | 109 | pbuf[y+i].i32 |= (uint32_t)CG5x7[c][i]<<(4-xp)*6; |
morita | 0:1b7df36adac7 | 110 | } |
morita | 0:1b7df36adac7 | 111 | xp++; |
morita | 0:1b7df36adac7 | 112 | } |
morita | 0:1b7df36adac7 | 113 | return value; |
morita | 0:1b7df36adac7 | 114 | } |
morita | 0:1b7df36adac7 | 115 | |
morita | 0:1b7df36adac7 | 116 | int KP1632D::_getc() { |
morita | 0:1b7df36adac7 | 117 | return -1; |
morita | 0:1b7df36adac7 | 118 | } |