エレキジャックweb mbed入門 mbed CWデコーダ課題6です。数字とアルファベットを解読し、LCDの1~3行目をスクロールしながら表示します。デコーダ基板が必要です

Committer:
takeuchi
Date:
Sun Jul 15 12:24:41 2012 +0000
Revision:
0:dc06f2eae55b
???????web mbed?? mbed CW??????5?????????????????????-????????????????????????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
takeuchi 0:dc06f2eae55b 1 // CW06
takeuchi 0:dc06f2eae55b 2 // 1~3 LCD scroll hyouji
takeuchi 0:dc06f2eae55b 3 #include "mbed.h"
takeuchi 0:dc06f2eae55b 4 #include "TextLCD0420.h"
takeuchi 0:dc06f2eae55b 5
takeuchi 0:dc06f2eae55b 6 #define ON 1
takeuchi 0:dc06f2eae55b 7 #define OFF 0
takeuchi 0:dc06f2eae55b 8 #define XON 0
takeuchi 0:dc06f2eae55b 9 #define XOFF 1
takeuchi 0:dc06f2eae55b 10 #define XHI 0
takeuchi 0:dc06f2eae55b 11 #define XLOW 1
takeuchi 0:dc06f2eae55b 12 #define HI 1
takeuchi 0:dc06f2eae55b 13 #define LOW 0
takeuchi 0:dc06f2eae55b 14 #define OUBUN 1
takeuchi 0:dc06f2eae55b 15 #define WABUN 0
takeuchi 0:dc06f2eae55b 16
takeuchi 0:dc06f2eae55b 17 DigitalOut mled1(LED1);
takeuchi 0:dc06f2eae55b 18 DigitalOut mled2(LED2);
takeuchi 0:dc06f2eae55b 19 DigitalOut mled3(LED3);
takeuchi 0:dc06f2eae55b 20 DigitalOut mled4(LED4);
takeuchi 0:dc06f2eae55b 21 DigitalIn CW(p5);
takeuchi 0:dc06f2eae55b 22 DigitalIn SP_SELECT(p6);
takeuchi 0:dc06f2eae55b 23 DigitalIn GENGO_MODE(p7);
takeuchi 0:dc06f2eae55b 24 DigitalIn GENGO_SELECT(p8);
takeuchi 0:dc06f2eae55b 25
takeuchi 0:dc06f2eae55b 26 TextLCD lcd(p24, p25, p26, p27, p28, p29, p30,20,4); // rs, rw, e, d0, d1, d2, d3
takeuchi 0:dc06f2eae55b 27
takeuchi 0:dc06f2eae55b 28 int retu,gyou;
takeuchi 0:dc06f2eae55b 29 char g2[20],g3[20];
takeuchi 0:dc06f2eae55b 30 int init_flag=ON;
takeuchi 0:dc06f2eae55b 31 int min_ms,max_ms;
takeuchi 0:dc06f2eae55b 32
takeuchi 0:dc06f2eae55b 33 void lcd_scprintf(char pdata){
takeuchi 0:dc06f2eae55b 34 int i;
takeuchi 0:dc06f2eae55b 35
takeuchi 0:dc06f2eae55b 36 if(init_flag==ON){
takeuchi 0:dc06f2eae55b 37 if(gyou==1){
takeuchi 0:dc06f2eae55b 38 lcd.locate(retu,1);
takeuchi 0:dc06f2eae55b 39 lcd.printf("%c",pdata);
takeuchi 0:dc06f2eae55b 40 retu++;
takeuchi 0:dc06f2eae55b 41 if(retu==20){
takeuchi 0:dc06f2eae55b 42 gyou=2;
takeuchi 0:dc06f2eae55b 43 retu=0;
takeuchi 0:dc06f2eae55b 44 }
takeuchi 0:dc06f2eae55b 45 }
takeuchi 0:dc06f2eae55b 46 else if(gyou==2){
takeuchi 0:dc06f2eae55b 47 lcd.locate(retu,2);
takeuchi 0:dc06f2eae55b 48 lcd.printf("%c",pdata);
takeuchi 0:dc06f2eae55b 49 g2[retu]=pdata;
takeuchi 0:dc06f2eae55b 50 retu++;
takeuchi 0:dc06f2eae55b 51 if(retu==20){
takeuchi 0:dc06f2eae55b 52 retu=0;
takeuchi 0:dc06f2eae55b 53 gyou=3;
takeuchi 0:dc06f2eae55b 54 }
takeuchi 0:dc06f2eae55b 55 }
takeuchi 0:dc06f2eae55b 56 else if(gyou==3){
takeuchi 0:dc06f2eae55b 57 lcd.locate(retu,3);
takeuchi 0:dc06f2eae55b 58 lcd.printf("%c",pdata);
takeuchi 0:dc06f2eae55b 59 g3[retu]=pdata;
takeuchi 0:dc06f2eae55b 60 retu++;
takeuchi 0:dc06f2eae55b 61 if(retu==20){
takeuchi 0:dc06f2eae55b 62 retu=0;
takeuchi 0:dc06f2eae55b 63 gyou=1;
takeuchi 0:dc06f2eae55b 64 for(i=0;i<20;i++){
takeuchi 0:dc06f2eae55b 65 lcd.locate(i,1);
takeuchi 0:dc06f2eae55b 66 lcd.printf("%c",g2[i]);
takeuchi 0:dc06f2eae55b 67 }
takeuchi 0:dc06f2eae55b 68 for(i=0;i<20;i++){
takeuchi 0:dc06f2eae55b 69 lcd.locate(i,2);
takeuchi 0:dc06f2eae55b 70 lcd.printf("%c",g3[i]);
takeuchi 0:dc06f2eae55b 71 g2[i]=g3[i];
takeuchi 0:dc06f2eae55b 72 }
takeuchi 0:dc06f2eae55b 73 lcd.locate(0,3);
takeuchi 0:dc06f2eae55b 74 lcd.printf(" ");
takeuchi 0:dc06f2eae55b 75 init_flag=OFF;
takeuchi 0:dc06f2eae55b 76 }
takeuchi 0:dc06f2eae55b 77 }
takeuchi 0:dc06f2eae55b 78 }
takeuchi 0:dc06f2eae55b 79 if(init_flag==OFF){
takeuchi 0:dc06f2eae55b 80 gyou=3;
takeuchi 0:dc06f2eae55b 81 lcd.locate(retu,3);
takeuchi 0:dc06f2eae55b 82 lcd.printf("%c",pdata);
takeuchi 0:dc06f2eae55b 83 g3[retu]=pdata;
takeuchi 0:dc06f2eae55b 84 retu++;
takeuchi 0:dc06f2eae55b 85 if(retu==20){
takeuchi 0:dc06f2eae55b 86 for(i=0;i<20;i++){
takeuchi 0:dc06f2eae55b 87 lcd.locate(i,1);
takeuchi 0:dc06f2eae55b 88 lcd.printf("%c",g2[i]);
takeuchi 0:dc06f2eae55b 89 lcd.locate(i,2);
takeuchi 0:dc06f2eae55b 90 lcd.printf("%c",g3[i]);
takeuchi 0:dc06f2eae55b 91 g2[i]=g3[i];
takeuchi 0:dc06f2eae55b 92 }
takeuchi 0:dc06f2eae55b 93 lcd.locate(0,3);
takeuchi 0:dc06f2eae55b 94 lcd.printf(" ");
takeuchi 0:dc06f2eae55b 95 retu=0;
takeuchi 0:dc06f2eae55b 96 }
takeuchi 0:dc06f2eae55b 97 }
takeuchi 0:dc06f2eae55b 98 }
takeuchi 0:dc06f2eae55b 99
takeuchi 0:dc06f2eae55b 100 void set_speed(){
takeuchi 0:dc06f2eae55b 101 if(SP_SELECT==HI){
takeuchi 0:dc06f2eae55b 102 min_ms=30;
takeuchi 0:dc06f2eae55b 103 max_ms=90;
takeuchi 0:dc06f2eae55b 104 lcd.locate(5,0);
takeuchi 0:dc06f2eae55b 105 lcd.printf("H");
takeuchi 0:dc06f2eae55b 106 }
takeuchi 0:dc06f2eae55b 107 else if(SP_SELECT==LOW){
takeuchi 0:dc06f2eae55b 108 min_ms=70;
takeuchi 0:dc06f2eae55b 109 max_ms=210;
takeuchi 0:dc06f2eae55b 110 lcd.locate(5,0);
takeuchi 0:dc06f2eae55b 111 lcd.printf("L");
takeuchi 0:dc06f2eae55b 112 }
takeuchi 0:dc06f2eae55b 113 }
takeuchi 0:dc06f2eae55b 114
takeuchi 0:dc06f2eae55b 115 int main() {
takeuchi 0:dc06f2eae55b 116
takeuchi 0:dc06f2eae55b 117 int i,j,k;
takeuchi 0:dc06f2eae55b 118 int code[20];
takeuchi 0:dc06f2eae55b 119 int scount;
takeuchi 0:dc06f2eae55b 120 char mj[115];
takeuchi 0:dc06f2eae55b 121 int cw_sum,tan_sum,tanten;
takeuchi 0:dc06f2eae55b 122
takeuchi 0:dc06f2eae55b 123 for(i=0;i<115;i++){
takeuchi 0:dc06f2eae55b 124 mj[i]=' ';
takeuchi 0:dc06f2eae55b 125 }
takeuchi 0:dc06f2eae55b 126 mj[5]='A';mj[16]='B';mj[20]='C';mj[8]='D';mj[1]='E';
takeuchi 0:dc06f2eae55b 127 mj[19]='F';mj[10]='G';mj[15]='H';mj[3]='I';mj[29]='J';
takeuchi 0:dc06f2eae55b 128 mj[12]='K';mj[17]='L';mj[6]='M';mj[4]='N';mj[14]='O';
takeuchi 0:dc06f2eae55b 129 mj[21]='P';mj[26]='Q';mj[9]='R';mj[7]='S';mj[2]='T';
takeuchi 0:dc06f2eae55b 130 mj[11]='U';mj[23]='V';mj[13]='W';mj[24]='X';mj[28]='Y';
takeuchi 0:dc06f2eae55b 131 mj[18]='Z';
takeuchi 0:dc06f2eae55b 132 mj[61]='1';mj[59]='2';mj[55]='3';mj[47]='4';mj[31]='5';
takeuchi 0:dc06f2eae55b 133 mj[32]='6';mj[34]='7';mj[38]='8';mj[46]='9';mj[62]='0';
takeuchi 0:dc06f2eae55b 134 mj[105]='.';mj[114]=',';mj[75]='?';mj[48]='=';mj[96]='-';
takeuchi 0:dc06f2eae55b 135 mj[70]=':';mj[93]='\'';mj[44]='(';mj[108]=')';mj[41]='+';
takeuchi 0:dc06f2eae55b 136 mj[81]='"';
takeuchi 0:dc06f2eae55b 137
takeuchi 0:dc06f2eae55b 138 lcd.cls();
takeuchi 0:dc06f2eae55b 139 lcd.printf("*CW06 ");
takeuchi 0:dc06f2eae55b 140
takeuchi 0:dc06f2eae55b 141 for(i=0;i<6;i++){
takeuchi 0:dc06f2eae55b 142 code[i]=0;
takeuchi 0:dc06f2eae55b 143 }
takeuchi 0:dc06f2eae55b 144
takeuchi 0:dc06f2eae55b 145 i=0;
takeuchi 0:dc06f2eae55b 146 tan_sum=0;
takeuchi 0:dc06f2eae55b 147 set_speed();
takeuchi 0:dc06f2eae55b 148
takeuchi 0:dc06f2eae55b 149 while( i<5 ){
takeuchi 0:dc06f2eae55b 150 lcd.locate(7,0);
takeuchi 0:dc06f2eae55b 151 lcd.printf("%2d",5-i);
takeuchi 0:dc06f2eae55b 152 scount=0;
takeuchi 0:dc06f2eae55b 153 while(CW==XLOW){
takeuchi 0:dc06f2eae55b 154 }
takeuchi 0:dc06f2eae55b 155 mled1=ON;
takeuchi 0:dc06f2eae55b 156 while(CW==XHI){
takeuchi 0:dc06f2eae55b 157 scount++;
takeuchi 0:dc06f2eae55b 158 wait_ms(1);
takeuchi 0:dc06f2eae55b 159 }
takeuchi 0:dc06f2eae55b 160 mled1=OFF;
takeuchi 0:dc06f2eae55b 161 if(min_ms < scount && scount < max_ms){
takeuchi 0:dc06f2eae55b 162 tan_sum=tan_sum+scount;
takeuchi 0:dc06f2eae55b 163 i++;
takeuchi 0:dc06f2eae55b 164 }
takeuchi 0:dc06f2eae55b 165
takeuchi 0:dc06f2eae55b 166 }
takeuchi 0:dc06f2eae55b 167 tanten=tan_sum/5;
takeuchi 0:dc06f2eae55b 168
takeuchi 0:dc06f2eae55b 169 j=0;
takeuchi 0:dc06f2eae55b 170 tan_sum=0;
takeuchi 0:dc06f2eae55b 171 k=0;
takeuchi 0:dc06f2eae55b 172 gyou=1,retu=0;
takeuchi 0:dc06f2eae55b 173 while(1){
takeuchi 0:dc06f2eae55b 174 set_speed();
takeuchi 0:dc06f2eae55b 175 while(CW==XLOW){
takeuchi 0:dc06f2eae55b 176 }
takeuchi 0:dc06f2eae55b 177
takeuchi 0:dc06f2eae55b 178 scount=0;
takeuchi 0:dc06f2eae55b 179 mled1=ON;
takeuchi 0:dc06f2eae55b 180 while(CW==XHI){
takeuchi 0:dc06f2eae55b 181 wait_ms(1);
takeuchi 0:dc06f2eae55b 182 scount++;
takeuchi 0:dc06f2eae55b 183 }
takeuchi 0:dc06f2eae55b 184 mled1=OFF;
takeuchi 0:dc06f2eae55b 185
takeuchi 0:dc06f2eae55b 186 if(min_ms < scount && scount < max_ms){
takeuchi 0:dc06f2eae55b 187 //lcd.printf(".");
takeuchi 0:dc06f2eae55b 188 code[k]=1;
takeuchi 0:dc06f2eae55b 189 k++;
takeuchi 0:dc06f2eae55b 190 tan_sum=tan_sum+scount;
takeuchi 0:dc06f2eae55b 191 j++;
takeuchi 0:dc06f2eae55b 192 }
takeuchi 0:dc06f2eae55b 193
takeuchi 0:dc06f2eae55b 194 else if ( scount > tanten*2.0){
takeuchi 0:dc06f2eae55b 195 //lcd.printf("_");
takeuchi 0:dc06f2eae55b 196 code[k]=2;
takeuchi 0:dc06f2eae55b 197 k++;
takeuchi 0:dc06f2eae55b 198 tan_sum=tan_sum+scount/3;
takeuchi 0:dc06f2eae55b 199 j++;
takeuchi 0:dc06f2eae55b 200 }
takeuchi 0:dc06f2eae55b 201
takeuchi 0:dc06f2eae55b 202 lcd.locate(7,0);
takeuchi 0:dc06f2eae55b 203 lcd.printf("%2d",k);
takeuchi 0:dc06f2eae55b 204
takeuchi 0:dc06f2eae55b 205 scount=0;
takeuchi 0:dc06f2eae55b 206 while(CW==XLOW){
takeuchi 0:dc06f2eae55b 207 wait_ms(1);
takeuchi 0:dc06f2eae55b 208 scount++;
takeuchi 0:dc06f2eae55b 209 if(scount > tanten*10){
takeuchi 0:dc06f2eae55b 210 break;
takeuchi 0:dc06f2eae55b 211 }
takeuchi 0:dc06f2eae55b 212 }
takeuchi 0:dc06f2eae55b 213
takeuchi 0:dc06f2eae55b 214 if(k>=6){
takeuchi 0:dc06f2eae55b 215 k=0;
takeuchi 0:dc06f2eae55b 216 lcd_scprintf('*');
takeuchi 0:dc06f2eae55b 217 for(i=0;i<6;i++){
takeuchi 0:dc06f2eae55b 218 code[i]=0;
takeuchi 0:dc06f2eae55b 219 }
takeuchi 0:dc06f2eae55b 220 }
takeuchi 0:dc06f2eae55b 221
takeuchi 0:dc06f2eae55b 222 if(scount > tanten*2.0){
takeuchi 0:dc06f2eae55b 223 cw_sum=0;
takeuchi 0:dc06f2eae55b 224 for(i=0;i<6;i++){
takeuchi 0:dc06f2eae55b 225 cw_sum=cw_sum+code[i]*int(pow(2.0,i));
takeuchi 0:dc06f2eae55b 226 }
takeuchi 0:dc06f2eae55b 227 lcd_scprintf(mj[cw_sum]);
takeuchi 0:dc06f2eae55b 228 k=0;
takeuchi 0:dc06f2eae55b 229 for(i=0;i<6;i++){
takeuchi 0:dc06f2eae55b 230 code[i]=0;
takeuchi 0:dc06f2eae55b 231 }
takeuchi 0:dc06f2eae55b 232 }//if
takeuchi 0:dc06f2eae55b 233
takeuchi 0:dc06f2eae55b 234 if(scount > tanten*7){
takeuchi 0:dc06f2eae55b 235 lcd_scprintf(' ');
takeuchi 0:dc06f2eae55b 236 }
takeuchi 0:dc06f2eae55b 237
takeuchi 0:dc06f2eae55b 238 if(j==10){
takeuchi 0:dc06f2eae55b 239 tanten=tan_sum/10;
takeuchi 0:dc06f2eae55b 240 tan_sum=0;
takeuchi 0:dc06f2eae55b 241 j=0;
takeuchi 0:dc06f2eae55b 242 }
takeuchi 0:dc06f2eae55b 243 }//while 1
takeuchi 0:dc06f2eae55b 244 }//main