エレキジャックweb mbed入門 mbed CWデコーダ課題7です。数字とアルファベットを解読し、1分間の受信文字数に応じたレベルを表示します。デコーダ基板が必要です

Dependencies:   mbed

Committer:
takeuchi
Date:
Sun Jul 15 23:36:07 2012 +0000
Revision:
0:17d7b75aa765
???????web mbed?? mbed CW??????6??????????????????LCD?1?3?????????????????????????????

Who changed what in which revision?

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