32dot x 16dot LED matrix display driving library.

Dependents:   KP1632D_char_demo KP1632D_Gsens_demo KP1632D_move_mbed_demo

Committer:
morita
Date:
Sat May 31 14:26:47 2014 +0000
Revision:
0:1b7df36adac7
Fix first program.;

Who changed what in which revision?

UserRevisionLine numberNew 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 }