エレキジャックweb mbed入門 mbed CWデコーダ課題6です。数字とアルファベットを解読し、LCDの1~3行目をスクロールしながら表示します。デコーダ基板が必要です
main.cpp@0:dc06f2eae55b, 2012-07-15 (annotated)
- 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?
User | Revision | Line number | New 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 |