├── README.md ├── key.c ├── key.h └── main.c /README.md: -------------------------------------------------------------------------------- 1 | # key-board 2 | stm32f103c8t6 based key board project 3 | 4 | For more back ground information, https://www.zhihu.com/question/265112599/answer/297843217 5 | # key arrangement 6 | ![image](https://images2017.cnblogs.com/blog/921211/201801/921211-20180117181028834-390364139.png) 7 | # final product 8 | ![image](https://images2017.cnblogs.com/blog/921211/201801/921211-20180117185737756-657273322.jpg) 9 | ![image](https://img.alicdn.com/imgextra/i2/671845967/TB2Je2YncnI8KJjSspeXXcwIpXa_!!671845967.jpg) 10 | ![image](https://img.alicdn.com/imgextra/i4/671845967/TB2YTfEndfJ8KJjy0FeXXXKEXXa_!!671845967.jpg) 11 | ![image](https://img.alicdn.com/imgextra/i3/671845967/TB2Va.Lnf6H8KJjSspmXXb2WXXa_!!671845967.jpg) 12 | # Download source code release 13 | we have release the stm32 frameware source code version 1.1 in release block in 2018 jan 17. 14 | [download it in zip file](https://github.com/qiaosiyi/key-board/releases) 15 | # PCB design 16 | We have just open source the PCB design and schematic diagram version1.11 in release block in 2018 feb 5. [download PCB SCH FILES](https://github.com/qiaosiyi/key-board/files/1693680/pcbreleasev1.1.zip) 17 | # steel plate design 18 | We have just open source the steel plate CAD file version1.12 in release block in 2018 may 5. 19 | [download steel plate FILES](https://github.com/qiaosiyi/key-board/releases/download/1.12/metalframe_re.zip) 20 | -------------------------------------------------------------------------------- /key.c: -------------------------------------------------------------------------------- 1 | #include "key.h" 2 | #include "sys.h" 3 | #include "delay.h" 4 | #include "usart.h" 5 | #include "usart3.h" 6 | #include "stm32f10x.h" 7 | #include "string.h" 8 | 9 | #include "append.h" 10 | 11 | void KEY_Init(void){ 12 | GPIO_InitTypeDef GPIO_InitStructure; 13 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC,ENABLE); 14 | 15 | GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_11 | GPIO_Pin_12 ; 16 | GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; 17 | GPIO_Init(GPIOA,&GPIO_InitStructure); 18 | 19 | 20 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 21 | GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); 22 | 23 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_4| 24 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8| 25 | GPIO_Pin_9; // 26 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 27 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; 28 | GPIO_Init(GPIOB,&GPIO_InitStructure); 29 | 30 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15; //14AT 15CLEAR 31 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 32 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; 33 | GPIO_Init(GPIOC,&GPIO_InitStructure); 34 | 35 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //13LINK STATUS 36 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; // 37 | GPIO_Init(GPIOC,&GPIO_InitStructure); 38 | } 39 | 40 | 41 | u8* check_cmd(u8 *str) 42 | { 43 | char *strx=0; 44 | if(USART_RX_STA&0X8000) 45 | { 46 | USART_RX_BUF[USART_RX_STA&0X7FFF]=0; 47 | strx=strstr((const char*)USART_RX_BUF,(const char*)str); 48 | } 49 | return (u8*)strx; 50 | } 51 | 52 | 53 | 54 | u8 send_cmd(u8 *cmd,u8 *ack,u16 waittime) 55 | { 56 | u8 res=0; 57 | USART_RX_STA=0; 58 | if((u32)cmd<=0XFF) 59 | { 60 | while((USART1->SR&0X40)==0);// 61 | USART1->DR=(u32)cmd; 62 | }else printf("%s\r\n",cmd);// 63 | if(ack&&waittime) // 64 | { 65 | while(--waittime) //µÈ´ýµ¹¼Æ•J 66 | { 67 | delay_ms(10); 68 | if(USART_RX_STA&0X8000)//½ÓÊÕµ½ÆÚ´ýµÄÓ¦´ð½á¹û 69 | { 70 | if(check_cmd(ack))break;//µÃµ½ÓÐЧÊý¾Ý 71 | USART_RX_STA=0; 72 | } 73 | } 74 | if(waittime==0)res=1; 75 | } 76 | return res; 77 | } 78 | 79 | void setrow0_0(void){ROW0_0;ROW1_0;ROW2_0;ROW3_0;ROW4_0;ROW5_0;ROW6_0;ROW7_0;ROW8_0;} 80 | void setrow0_1(void){ROW0_1;ROW1_0;ROW2_0;ROW3_0;ROW4_0;ROW5_0;ROW6_0;ROW7_0;ROW8_0;} 81 | void setrow1_1(void){ROW0_0;ROW1_1;} 82 | void setrow2_1(void){ROW1_0;ROW2_1;} 83 | void setrow3_1(void){ROW2_0;ROW3_1;} 84 | void setrow4_1(void){ROW3_0;ROW4_1;} 85 | void setrow5_1(void){ROW4_0;ROW5_1;} 86 | void setrow6_1(void){ROW5_0;ROW6_1;} 87 | void setrow7_1(void){ROW6_0;ROW7_1;} 88 | void setrow8_1(void){ROW7_0;ROW8_1;} 89 | void setrow9_1(void){ROW0_1;ROW1_1;ROW2_1;ROW3_1;ROW4_1;ROW5_1;ROW6_1;ROW7_1;ROW8_1;} 90 | 91 | // if any col has valid data 92 | // for example 93 | // col0 col1 col2 col3 col4 col5 col6 col7 94 | // 0 1 0 1 0 0 0 0 95 | u8 read_inputdata(void) 96 | { 97 | static u8 byte[2] = {0, 0}; 98 | byte[0] = 0; 99 | if(COL0){ 100 | byte[0] |= 0x80;//bit 1000 0000 101 | byte[1]++; 102 | } 103 | if(COL1){ 104 | byte[0] |= 0x40;//bit 0100 0000 105 | byte[1]++; 106 | } 107 | if(COL2){ 108 | byte[0] |= 0x20;//bit 0010 0000 109 | byte[1]++; 110 | } 111 | if(COL3){ 112 | byte[0] |= 0x10;//bit 0001 0000 113 | byte[1]++; 114 | } 115 | if(COL4){ 116 | byte[0] |= 0x08;//bit 0000 1000 117 | byte[1]++; 118 | } 119 | if(COL5){ 120 | byte[0] |= 0x04;//bit 0000 0100 121 | byte[1]++; 122 | } 123 | if(COL6){ 124 | byte[0] |= 0x02;//bit 0000 0010 125 | byte[1]++; 126 | } 127 | if(COL7){ 128 | byte[0] |= 0x01;//bit 0000 0001 129 | byte[1]++; 130 | } 131 | //u3_printf("read_inputdata:%x\r\n",byte[0]); 132 | return byte[0]; 133 | } 134 | 135 | u8 *Read_KeyValue(void) 136 | { 137 | u8 i = 0; 138 | u8 temp_byte[16]; 139 | static u8 byte[16]; 140 | 141 | for(i = 0; i < 16; i++) 142 | byte[i] = 0x00; 143 | 144 | setrow0_1();delay_us(50);temp_byte[0] |= read_inputdata();//get input col value ·À¶¶ÊÆ 145 | setrow1_1();delay_us(50);temp_byte[1] |= read_inputdata();//get input col value 146 | setrow2_1();delay_us(50);temp_byte[2] |= read_inputdata();//get input col value 147 | setrow3_1();delay_us(50);temp_byte[3] |= read_inputdata();//get input col value 148 | setrow4_1();delay_us(50);temp_byte[4] |= read_inputdata();//get input col value 149 | setrow5_1();delay_us(50);temp_byte[5] |= read_inputdata();//get input col value 150 | setrow6_1();delay_us(50);temp_byte[6] |= read_inputdata();//get input col value 151 | setrow7_1();delay_us(50);temp_byte[7] |= read_inputdata();//get input col value 152 | setrow8_1();delay_us(50);temp_byte[8] |= read_inputdata();//get input col value 153 | setrow9_1(); 154 | setrow0_1();delay_us(50);byte[0] |= read_inputdata();//get input col value 155 | setrow1_1();delay_us(50);byte[1] |= read_inputdata();//get input col value 156 | setrow2_1();delay_us(50);byte[2] |= read_inputdata();//get input col value 157 | setrow3_1();delay_us(50);byte[3] |= read_inputdata();//get input col value 158 | setrow4_1();delay_us(50);byte[4] |= read_inputdata();//get input col value 159 | setrow5_1();delay_us(50);byte[5] |= read_inputdata();//get input col value 160 | setrow6_1();delay_us(50);byte[6] |= read_inputdata();//get input col value 161 | setrow7_1();delay_us(50);byte[7] |= read_inputdata();//get input col value 162 | setrow8_1();delay_us(50);byte[8] |= read_inputdata();//get input col value 163 | setrow9_1(); 164 | 165 | while(temp_byte[0] != byte[0] | temp_byte[1] != byte[1] | temp_byte[2] != byte[2] | temp_byte[3] != byte[3] | 166 | temp_byte[4] != byte[4] | temp_byte[5] != byte[5] | temp_byte[6] != byte[6] | temp_byte[7] != byte[7] | 167 | temp_byte[8] != byte[8]) 168 | { 169 | for(i = 0; i < 9; i++) 170 | temp_byte[i] = byte[i]; 171 | 172 | setrow0_1();delay_us(50);byte[0] |= read_inputdata();//get input col value 173 | setrow1_1();delay_us(50);byte[1] |= read_inputdata();//get input col value 174 | setrow2_1();delay_us(50);byte[2] |= read_inputdata();//get input col value 175 | setrow3_1();delay_us(50);byte[3] |= read_inputdata();//get input col value 176 | setrow4_1();delay_us(50);byte[4] |= read_inputdata();//get input col value 177 | setrow5_1();delay_us(50);byte[5] |= read_inputdata();//get input col value 178 | setrow6_1();delay_us(50);byte[6] |= read_inputdata();//get input col value 179 | setrow7_1();delay_us(50);byte[7] |= read_inputdata();//get input col value 180 | setrow8_1();delay_us(50);byte[8] |= read_inputdata();//get input col value 181 | setrow9_1(); 182 | } 183 | 184 | return byte; 185 | } 186 | 187 | u8 *map_2_key(u8 *read_byte) 188 | { 189 | static u8 byte[7] = {0,0,0,0,0,0,0}; 190 | u8 i = 0; 191 | u8 fn = 0; 192 | u8 app = 0; 193 | for(i = 0; i < 7; i++) 194 | byte[i] = 0x00; 195 | 196 | i = 1; 197 | if(read_byte[0]) 198 | { 199 | if((read_byte[0] & 0x80) == 0x80){byte[i] = key_esc;i++;if(i == 7){return byte;}} 200 | if((read_byte[0] & 0x40) == 0x40){byte[i] = key_1;i++; if(i == 7){return byte;}} 201 | if((read_byte[0] & 0x20) == 0x20){byte[i] = key_2;i++; if(i == 7){return byte;}} 202 | if((read_byte[0] & 0x10) == 0x10){byte[i] = key_3;i++; if(i == 7){return byte;}} 203 | if((read_byte[0] & 0x08) == 0x08){byte[i] = key_4;i++; if(i == 7){return byte;}} 204 | if((read_byte[0] & 0x04) == 0x04){byte[i] = key_5;i++; if(i == 7){return byte;}} 205 | if((read_byte[0] & 0x02) == 0x02){byte[i] = key_6;i++; if(i == 7){return byte;}} 206 | if((read_byte[0] & 0x01) == 0x01){byte[i] = key_7;i++; if(i == 7){return byte;}} 207 | } 208 | 209 | if(read_byte[1]) 210 | { 211 | if((read_byte[1] & 0x80) == 0x80){byte[i] = key_tab;i++;if(i == 7){return byte;}} 212 | if((read_byte[1] & 0x40) == 0x40){byte[i] = key_q;i++; if(i == 7){return byte;}} 213 | if((read_byte[1] & 0x20) == 0x20){byte[i] = key_w;i++; if(i == 7){return byte;}} 214 | if((read_byte[1] & 0x10) == 0x10){byte[i] = key_e;i++; if(i == 7){return byte;}} 215 | if((read_byte[1] & 0x08) == 0x08){byte[i] = key_r;i++; if(i == 7){return byte;}} 216 | if((read_byte[1] & 0x04) == 0x04){byte[i] = key_T;i++; if(i == 7){return byte;}} 217 | if((read_byte[1] & 0x02) == 0x02){byte[i] = key_y;i++; if(i == 7){return byte;}} 218 | if((read_byte[1] & 0x01) == 0x01){byte[i] = key_u;i++; if(i == 7){return byte;}} 219 | } 220 | 221 | if(read_byte[2]) 222 | { 223 | if((read_byte[2] & 0x80) == 0x80){byte[i] = key_caps_lock;i++;if(i == 7){return byte;}} 224 | if((read_byte[2] & 0x40) == 0x40){byte[i] = key_a;i++; if(i == 7){return byte;}} 225 | if((read_byte[2] & 0x20) == 0x20){byte[i] = key_s;i++; if(i == 7){return byte;}} 226 | if((read_byte[2] & 0x10) == 0x10){byte[i] = key_d;i++; if(i == 7){return byte;}} 227 | if((read_byte[2] & 0x08) == 0x08){byte[i] = key_f;i++; if(i == 7){return byte;}} 228 | if((read_byte[2] & 0x04) == 0x04){byte[i] = key_g;i++; if(i == 7){return byte;}} 229 | if((read_byte[2] & 0x02) == 0x02){byte[i] = key_h;i++; if(i == 7){return byte;}} 230 | if((read_byte[2] & 0x01) == 0x01){byte[i] = key_j;i++; if(i == 7){return byte;}} 231 | } 232 | 233 | if(read_byte[3]) 234 | { 235 | if((read_byte[3] & 0x80) == 0x80){byte[0] |= L_Shi;} 236 | if((read_byte[3] & 0x40) == 0x40){byte[i] = key_insert;i++; if(i == 7){return byte;}} 237 | if((read_byte[3] & 0x20) == 0x20){byte[i] = key_z;i++; if(i == 7){return byte;}} 238 | if((read_byte[3] & 0x10) == 0x10){byte[i] = key_x;i++; if(i == 7){return byte;}} 239 | if((read_byte[3] & 0x08) == 0x08){byte[i] = key_c;i++; if(i == 7){return byte;}} 240 | if((read_byte[3] & 0x04) == 0x04){byte[i] = key_v;i++; if(i == 7){return byte;}} 241 | if((read_byte[3] & 0x02) == 0x02){byte[i] = key_b;i++; if(i == 7){return byte;}} 242 | if((read_byte[3] & 0x01) == 0x01){byte[i] = key_n;i++; if(i == 7){return byte;}} 243 | } 244 | 245 | if(read_byte[4]) 246 | { 247 | if((read_byte[4] & 0x80) == 0x80){byte[0] |= R_Ctl;} 248 | if((read_byte[4] & 0x40) == 0x40){byte[0] |= L_Gui;} 249 | if((read_byte[4] & 0x10) == 0x10){byte[0] |= L_Alt;} 250 | if((read_byte[4] & 0x20) == 0x20){byte[i] = L_APP;i++; if(i == 7){return byte;}} 251 | if((read_byte[4] & 0x08) == 0x08){byte[i] = L_FN;i++; if(i == 7){return byte;}} 252 | if((read_byte[4] & 0x04) == 0x04){byte[i] = key_spacebar;i++; if(i == 7){return byte;}} 253 | if((read_byte[4] & 0x02) == 0x02){byte[i] = key_home;i++; if(i == 7){return byte;}} 254 | if((read_byte[4] & 0x01) == 0x01){byte[i] = key_end;i++; if(i == 7){return byte;}} 255 | } 256 | 257 | if(read_byte[5]) 258 | { 259 | if((read_byte[5] & 0x80) == 0x80){byte[i] = key_8;i++;if(i == 7){return byte;}} 260 | if((read_byte[5] & 0x40) == 0x40){byte[i] = key_9;i++; if(i == 7){return byte;}} 261 | if((read_byte[5] & 0x20) == 0x20){byte[i] = key_0;i++; if(i == 7){return byte;}} 262 | if((read_byte[5] & 0x10) == 0x10){byte[i] = key_minus;i++; if(i == 7){return byte;}} 263 | if((read_byte[5] & 0x08) == 0x08){byte[i] = key_equal;i++; if(i == 7){return byte;}} 264 | if((read_byte[5] & 0x04) == 0x04){byte[i] = key_backslash;i++; if(i == 7){return byte;}} 265 | if((read_byte[5] & 0x02) == 0x02){byte[i] = key_backspace;i++; if(i == 7){return byte;}} 266 | if((read_byte[5] & 0x01) == 0x01){byte[i] = key_grave;i++; if(i == 7){return byte;}} 267 | } 268 | 269 | if(read_byte[6]) 270 | { 271 | if((read_byte[6] & 0x80) == 0x80){byte[i] = key_i;i++;if(i == 7){return byte;}} 272 | if((read_byte[6] & 0x40) == 0x40){byte[i] = key_k;i++; if(i == 7){return byte;}} 273 | if((read_byte[6] & 0x20) == 0x20){byte[i] = key_l;i++; if(i == 7){return byte;}} 274 | if((read_byte[6] & 0x10) == 0x10){byte[i] = key_semicolon;i++; if(i == 7){return byte;}} 275 | if((read_byte[6] & 0x08) == 0x08){byte[i] = key_o;i++; if(i == 7){return byte;}} 276 | if((read_byte[6] & 0x04) == 0x04){byte[i] = key_p;i++; if(i == 7){return byte;}} 277 | if((read_byte[6] & 0x02) == 0x02){byte[i] = key_brace1;i++; if(i == 7){return byte;}} 278 | if((read_byte[6] & 0x01) == 0x01){byte[i] = key_brace2;i++; if(i == 7){return byte;}} 279 | } 280 | 281 | if(read_byte[7]) 282 | { 283 | if((read_byte[7] & 0x80) == 0x80){byte[i] = key_m;i++;if(i == 7){return byte;}} 284 | if((read_byte[7] & 0x40) == 0x40){byte[i] = key_comma;i++; if(i == 7){return byte;}} 285 | if((read_byte[7] & 0x20) == 0x20){byte[i] = key_full_stop;i++; if(i == 7){return byte;}} 286 | if((read_byte[7] & 0x10) == 0x10){byte[i] = key_slash;i++; if(i == 7){return byte;}} 287 | if((read_byte[7] & 0x08) == 0x08){byte[0] |= R_Shi;} 288 | if((read_byte[7] & 0x04) == 0x04){byte[i] = key_quotation_mark;i++; if(i == 7){return byte;}} 289 | if((read_byte[7] & 0x02) == 0x02){byte[i] = key_enter;i++; if(i == 7){return byte;}} 290 | if((read_byte[7] & 0x01) == 0x01){byte[i] = key_delete;i++; if(i == 7){return byte;}} 291 | } 292 | 293 | if(read_byte[8]) 294 | { 295 | if((read_byte[8] & 0x10) == 0x10){byte[i] = key_app;i++; if(i == 7){return byte;}} 296 | if((read_byte[8] & 0x08) == 0x08){byte[i] = key_left;i++; if(i == 7){return byte;}} 297 | if((read_byte[8] & 0x04) == 0x04){byte[i] = key_down;i++; if(i == 7){return byte;}} 298 | if((read_byte[8] & 0x02) == 0x02){byte[i] = key_up;i++; if(i == 7){return byte;}} 299 | if((read_byte[8] & 0x01) == 0x01){byte[i] = key_right;i++; if(i == 7){return byte;}} 300 | } 301 | 302 | for(i = 1; i < 9; i++) 303 | { 304 | if(byte[i] == R_FN | byte[i] == L_FN) 305 | { 306 | byte[i] = 0; 307 | fn = 1; 308 | } 309 | if(byte[i] == R_APP | byte[i] == L_APP) 310 | { 311 | byte[i] = 0; 312 | app = 1; 313 | } 314 | } 315 | 316 | if(byte[0] == R_Alt || byte[0] == L_Alt) 317 | { 318 | if(byte[1] == key_4 && byte[2] == 0x00 && byte[3] == 0x00 && byte[4] == 0x00 && byte[5] == 0x00 && byte[6] == 0x00) 319 | byte[1] = key_F4; 320 | 321 | //if(byte[1] == 0x00 && byte[2] == 0x00 && byte[3] == 0x00 && byte[4] == 0x00 && byte[5] == 0x00 && byte[6] == 0x00){ 322 | // byte[0] = 0x00;}//Èç¹ûÖ»ÓÐalt°´Ï£¬Ôò²»¼ì²âalt¡£ÒòΪalt»¹ÓÐתÒ룺command¡£ 323 | } 324 | 325 | if(fn | app) 326 | { 327 | //fn and app process 328 | if(fn) 329 | { 330 | for(i = 1; i < 7; i++) 331 | { 332 | //ÕÒµ½µÚÒ»¸öÆäËû°´¼ü¼üÖµ£¬only response one fn function.·µ»Ø¸øÖ÷·¢ËͳÌÐò? 333 | if(byte[i]) 334 | { 335 | byte[1] = fn_fnc(byte[i]); 336 | byte[2] = byte[3] = byte[4] = byte[5] = byte[6] = 0; 337 | break; 338 | } 339 | } 340 | } 341 | 342 | if(app) 343 | { 344 | for(i = 1; i < 7; i++) 345 | { 346 | //ÕÒµ½µÚÒ»¸öÆäËû°´¼ü¼üÖµ£¬²»ÈÃÖ÷·¢ËͳÌÐòÏìÓ¦£¬ÒòΪÖ÷³ÌÐòÖ»ÄÜ·¢ËÍÒ»´Î°´¼ü£¬appÐèÒªÖ§³Ö¸´ÔÓ×Ö´®·¢ßT 347 | if(byte[i]) 348 | { 349 | byte[1] = app_fnc(byte[i]); 350 | byte[2] = byte[3] = byte[4] = byte[5] = byte[6] = 0; 351 | break; 352 | } 353 | } 354 | } 355 | } 356 | return byte; 357 | } 358 | u8 if_key_same(u8* byte_old,u8*byte) 359 | { 360 | u8 i=0, j=0; 361 | u8 downup=0, updown=0; 362 | 363 | if(byte[0] == byte_old[0]) 364 | { 365 | for(i = 1; i < 7; i++) 366 | { 367 | for(j = 1; j < 7; j++) 368 | { 369 | if(byte[i] == byte_old[j]) 370 | { 371 | downup++; 372 | break; 373 | } 374 | } 375 | } 376 | 377 | for(i = 1; i < 7; i++) 378 | { 379 | for(j = 1; j < 7; j++) 380 | { 381 | if(byte_old[i] == byte[j]) 382 | { 383 | updown++; 384 | break; 385 | } 386 | } 387 | } 388 | 389 | if(downup == 6 && updown == 6) 390 | return 1; 391 | } 392 | 393 | return 0; 394 | } 395 | 396 | u8 send_key(void) 397 | { 398 | static u8 byte_old[7] = {0,0,0,0,0,0,0}; //old values 399 | u8* byte;//read new key map 400 | u8 i = 0, j = 0, k = 0, less = 0, more = 0; 401 | u8 lesss = 0, moree = 0; 402 | byte = map_2_key(Read_KeyValue());//read new key map 403 | 404 | if(if_key_same(byte_old,byte)) 405 | { 406 | return 0; 407 | } 408 | else 409 | { 410 | //if key changed 411 | // u3_printf("before_byte:%x %x %x %x %x %x %x \r\n",byte_old[0],byte_old[1],byte_old[2],byte_old[3],byte_old[4],byte_old[5],byte_old[6]); 412 | // u3_printf("byte: %x %x %x %x %x %x %x \r\n",byte[0],byte[1],byte[2],byte[3],byte[4],byte[5],byte[6]); 413 | if(byte[1]>APP_START && byte[1]=60000){//X10ms进入休眠,如果进入休眠比蓝牙待机时间早,则蓝牙同时也会被待机 100 | u3_printf("Enter standby..\r\n"); 101 | Sys_Enter_Standby(); 102 | } 103 | send_key(); 104 | delay_ms(10); 105 | //u3_printf("times:%d\r\n", times); 106 | 107 | } 108 | } 109 | 110 | --------------------------------------------------------------------------------