int main(){ #ifndef TESTING #include "uart.h" #include "mmc.h" // Initializam modulele hardware uart_init(); SPI_init(); MMC_init(); BTN_init(); LCD_init(); #endif /* Gaseste prima partitie FAT32 de pe card*/ init_partition(buffer); /** * Gaseste datele despre sistemul de fisiere : * nr de tabele FAT, cluster-ul directorului Root, etc. */ initFAT32(buffer); print_volid(buffer); LCD_str( " ", 0); LCD_str( " ", 0); LCD_str( " Welcome to", 0); LCD_str( " MMC Explorer", 0); _delay_ms(2500); LCD_clear(); printdirs(openroot()); return EXIT_SUCCESS; }
void printTemperatures(float t1, float t2) { LCD_clear(); LCD_str("T1: "); LCD_int(t1); LCD_goto(0,1); //goto second line LCD_str("T2: "); LCD_int(t2); }
void S640K1_TP_respond(int x,int y) { unsigned char n; for(n=0;n<21;n++) { if(x>S640K1_TP[n][0]&&x<S640K1_TP[n][2]&&y>S640K1_TP[n][1]&&y<S640K1_TP[n][3]) { if(n==19)//模式切换 { //sys_flag=main_panel; //return; auto_scan_flag=~auto_scan_flag; if(auto_scan_flag==0xff) { skq_scan_thread_create(); LCD_str(671,352,"自动模式",32,Blue2,Black); } else if(auto_scan_flag==0x00) { rt_thread_delete(skq_scan_thread); LCD_str(671,352,"手动模式",32,Blue2,Black); } return; } else if(n==20)//(退出) { rt_thread_delete(skq_scan_thread); ADC_R_stop(); ADC_V_stop(); PowerA_DIS(); CD4067_DIS(); sys_flag=main_panel; draw_main_panel(); return; } else if(n==16) { ; } else { LCD_DrawFullRect( S640K1_TP[n][0], S640K1_TP[n][1], S640K1_TP[n][2], S640K1_TP[n][3], Black, 0); S640K1_measure_levels(n); LCD_DrawFullRect( S640K1_TP[n][0], S640K1_TP[n][1], S640K1_TP[n][2], S640K1_TP[n][3], Blue2, 0); } } } }
void start(void) { LCD_str("SZUKAM POCZATKU"); while( !(PINC & (1<<ZAB)) ) kroczki=-1; lcd_clr(); }
/** * @brief 主函数 * @param 无 * @retval 无 */ int main(void) { Site_t site= {0,0}; /* LED 端口初始化 */ LED_GPIO_Config(); /* LCD初始化 */ LCD_init(); SysTick_Init(); site.x=20;site.y=20; LCD_str(site,"LCD test OK",BLUE,RED); key_event_init(); /* 方法2,使用固件库控制IO */ while (1) { deal_key_event(); } }
/** * Meniul de navigare in fisiere */ void printdirs(struct DIR * dir){ char namebuf [12]; uint32_t size = 0; uint8_t bitmap = 0, selected = 0, cnt = 0, ret_code = 0, is=0; struct dirent * crt_dir; do{ /* Afisam continutul directorului curent */ rewinddir(dir); LCD_clear(); cnt = 0; while(1){ crt_dir = readdir( dir, buffer); ret_code = check (crt_dir); if(ret_code == DIR_INVALID) continue; if(ret_code == DIR_END) break; get_dirent_name(crt_dir, namebuf); if(cnt ++ == selected){ LCD_str( namebuf,SELECTED ); }else{ LCD_str( namebuf, NOT_SELECTED); } } /* Asteptam sa selecteze un fisier sau director */ bitmap = BTN_wait(); switch(bitmap){ case UP: selected = (selected +1)%cnt; continue; case DOWN: selected = (selected + cnt-1) % cnt; continue; case ENTER: rewinddir(dir); selected ++; while(1){ crt_dir = readdir( dir, buffer); ret_code = check (crt_dir); if( ret_code == DIR_VALID) selected--; if( !selected ) break; } break; default: continue; } is_dir(crt_dir, &is); if( is){ dir = opendir(crt_dir); }else{ get_dirent_size(crt_dir, &size); open_f(crt_dir); /* Curatam ecranul si afisam poza */ LCD_clear(); draw_bmp(); close_f(); /* Asteptam sa apese butonul de exit */ while( BTN_wait() != CLOSE); } }while(1); exit(EXIT_SUCCESS); }
void sk640k1_scan(void) { rt_int16_t *p; u8 m,n,k; for(n=0;n<7;n++) { Set_Scan_Channel((7-n)); rt_thread_delay(5); ADC_R_Restart(); ADC_R_DMA_Config(); while(!DMA_GetFlagStatus(ADC_R_DMA_Flag)); p=Get_ADC_R_Value(); // rt_kprintf("n=%d,r=%d\r\n",n,*p); if((*p)<1000) { sk640_jiwei_flag=sk640_jiwei_flag|1<<n; } else { sk640_jiwei_flag=sk640_jiwei_flag&~(1<<n); } } Set_Scan_Channel(0);//是否在零位 rt_thread_delay(5); ADC_R_Restart(); ADC_R_DMA_Config(); while(!DMA_GetFlagStatus(ADC_R_DMA_Flag)); p=Get_ADC_R_Value(); if((*p)<1000)//是 { switch(sk640_jiwei_flag) { case 0x00://级位为0 { S640K1_measure_levels(7); LCD_DrawFullRect( S640K1_TP[7][0], S640K1_TP[7][1], S640K1_TP[7][2], S640K1_TP[7][3], Red, 0); LCD_DrawFullRect( 520, 350, 650, 385, Black, 1); for(k=0;k<21;k++) { LCD_DrawFullRect( S640K1_TP[k][0], S640K1_TP[k][1], S640K1_TP[k][2], S640K1_TP[k][3], Blue2, 0); } LCD_DrawFullRect( S640K1_TP[16][0], S640K1_TP[16][1], S640K1_TP[16][2], S640K1_TP[16][3], Red, 0); break; } case 0x4C://后 { LCD_DrawFullRect( 520, 350, 650, 385, Black, 1); for(k=0;k<21;k++) { LCD_DrawFullRect( S640K1_TP[k][0], S640K1_TP[k][1], S640K1_TP[k][2], S640K1_TP[k][3], Blue2, 0); } S640K1_measure_levels(15); LCD_DrawFullRect( S640K1_TP[15][0], S640K1_TP[15][1], S640K1_TP[15][2], S640K1_TP[15][3], Red, 0); S640K1_measure_levels(7); LCD_DrawFullRect( S640K1_TP[7][0], S640K1_TP[7][1], S640K1_TP[7][2], S640K1_TP[7][3], Red, 0); break; } case 0x2A://前 { LCD_DrawFullRect( 520, 350, 650, 385, Black, 1); for(k=0;k<21;k++) { LCD_DrawFullRect( S640K1_TP[k][0], S640K1_TP[k][1], S640K1_TP[k][2], S640K1_TP[k][3], Blue2, 0); }; S640K1_measure_levels(17); LCD_DrawFullRect( S640K1_TP[17][0], S640K1_TP[17][1], S640K1_TP[17][2], S640K1_TP[17][3], Red, 0); S640K1_measure_levels(7); LCD_DrawFullRect( S640K1_TP[7][0], S640K1_TP[7][1], S640K1_TP[7][2], S640K1_TP[7][3], Red, 0); break; } case 0x34://制 { LCD_DrawFullRect( 520, 350, 650, 385, Black, 1); for(k=0;k<21;k++) { LCD_DrawFullRect( S640K1_TP[k][0], S640K1_TP[k][1], S640K1_TP[k][2], S640K1_TP[k][3], Blue2, 0); } S640K1_measure_levels(18); LCD_DrawFullRect( S640K1_TP[18][0], S640K1_TP[18][1], S640K1_TP[18][2], S640K1_TP[18][3], Red, 0); S640K1_measure_levels(7); LCD_DrawFullRect( S640K1_TP[7][0], S640K1_TP[7][1], S640K1_TP[7][2], S640K1_TP[7][3], Red, 0); break; } default: { for(k=0;k<21;k++) { LCD_DrawFullRect( S640K1_TP[k][0], S640K1_TP[k][1], S640K1_TP[k][2], S640K1_TP[k][3], Blue2, 0); } LCD_str(521,352,"级位错误",32,Red,Black); S640K1_measure_levels(15); S640K1_measure_levels(17); S640K1_measure_levels(18); break; } } } else//不是在0位 { switch(sk640_jiwei_flag) { case 0x00://级位为0 { LCD_str(521,352,"无司控器",32,Red,Black); break; } case 0x4D://后 { LCD_DrawFullRect( 520, 350, 650, 385, Black, 1); for(k=0;k<21;k++) { LCD_DrawFullRect( S640K1_TP[k][0], S640K1_TP[k][1], S640K1_TP[k][2], S640K1_TP[k][3], Blue2, 0); } S640K1_measure_levels(15); LCD_DrawFullRect( S640K1_TP[15][0], S640K1_TP[15][1], S640K1_TP[15][2], S640K1_TP[15][3], Red, 0); rt_thread_delay(5); ADC_V_Restart(); ADC_V_DMA_Config(); while(!DMA_GetFlagStatus(ADC_V_DMA_Flag)); p=Get_ADC_V_Value();*p=6*(*p); for(n=0;n<18;n++) { if(((*p)> sk640_jiwei_v[n])&&((*p)<= sk640_jiwei_v[n+1])) { for(m=0;m<7;m++) { if(n==sk640_jiwei_q[m]) { S640K1_measure_levels((8+m)); for(k=7;k<15;k++) { LCD_DrawFullRect( S640K1_TP[k][0], S640K1_TP[k][1], S640K1_TP[k][2], S640K1_TP[k][3], Blue2, 0); } LCD_DrawFullRect( S640K1_TP[8+m][0], S640K1_TP[8+m][1], S640K1_TP[8+m][2], S640K1_TP[8+m][3], Red, 0); break; } } break; } } break; } case 0x2B://前 { LCD_DrawFullRect( 520, 350, 650, 385, Black, 1); for(k=0;k<21;k++) { LCD_DrawFullRect( S640K1_TP[k][0], S640K1_TP[k][1], S640K1_TP[k][2], S640K1_TP[k][3], Blue2, 0); } S640K1_measure_levels(17); LCD_DrawFullRect( S640K1_TP[17][0], S640K1_TP[17][1], S640K1_TP[17][2], S640K1_TP[17][3], Red, 0); rt_thread_delay(5); ADC_V_Restart(); ADC_V_DMA_Config(); while(!DMA_GetFlagStatus(ADC_V_DMA_Flag)); p=Get_ADC_V_Value();*p=6*(*p); for(n=0;n<18;n++) { if(((*p)> sk640_jiwei_v[n])&&((*p)<= sk640_jiwei_v[n+1])) { for(m=0;m<7;m++) { if(n==sk640_jiwei_q[m]) { S640K1_measure_levels((8+m)); for(k=7;k<15;k++) { LCD_DrawFullRect( S640K1_TP[k][0], S640K1_TP[k][1], S640K1_TP[k][2], S640K1_TP[k][3], Blue2, 0); } LCD_DrawFullRect( S640K1_TP[8+m][0], S640K1_TP[8+m][1], S640K1_TP[8+m][2], S640K1_TP[8+m][3], Red, 0); break; } } break; } } break; } case 0x35://制 { LCD_DrawFullRect( 520, 350, 650, 385, Black, 1); for(k=0;k<21;k++) { LCD_DrawFullRect( S640K1_TP[k][0], S640K1_TP[k][1], S640K1_TP[k][2], S640K1_TP[k][3], Blue2, 0); } S640K1_measure_levels(18); LCD_DrawFullRect( S640K1_TP[18][0], S640K1_TP[18][1], S640K1_TP[18][2], S640K1_TP[18][3], Red, 0); rt_thread_delay(5); ADC_V_Restart(); ADC_V_DMA_Config(); while(!DMA_GetFlagStatus(ADC_V_DMA_Flag)); p=Get_ADC_V_Value();*p=6*(*p); for(n=0;n<18;n++) { if(((*p)> sk640_jiwei_v[n])&&((*p)<= sk640_jiwei_v[n+1])) { for(m=0;m<7;m++) { if(n==sk640_jiwei_z[m]) { S640K1_measure_levels(m); for(k=0;k<7;k++) { LCD_DrawFullRect( S640K1_TP[k][0], S640K1_TP[k][1], S640K1_TP[k][2], S640K1_TP[k][3], Blue2, 0); } LCD_DrawFullRect( S640K1_TP[m][0], S640K1_TP[m][1], S640K1_TP[m][2], S640K1_TP[m][3], Red, 0); break; } } break; } } break; } default: { for(k=0;k<21;k++) { LCD_DrawFullRect( S640K1_TP[k][0], S640K1_TP[k][1], S640K1_TP[k][2], S640K1_TP[k][3], Blue2, 0); } LCD_str(521,352,"级位错误",32,Red,Black); S640K1_measure_levels(15); S640K1_measure_levels(17); S640K1_measure_levels(18); break; } } } }
void S640K1_measure_levels(unsigned char n) { unsigned char i=0; rt_int16_t *p,temp=2000; if((n==17)||(n==18)) { n-=1; } while(1) { Set_Scan_Channel(S640K1_levels[n].contacts[i].channel); rt_thread_delay(5); ADC_R_Restart(); ADC_R_DMA_Config(); while(!DMA_GetFlagStatus(ADC_R_DMA_Flag)); p=Get_ADC_R_Value(); if((*p)>1000) { temp=*p; S640K1_levels[n].contacts[i].R[0]=' '; S640K1_levels[n].contacts[i].R[1]='_'; S640K1_levels[n].contacts[i].R[2]='/'; S640K1_levels[n].contacts[i].R[3]='_'; } else if((*p)<=1000) { temp=(u16)((*p)*(S640K1_levels[n].contacts[i].div)); S640K1_levels[n].contacts[i].R[0]=temp/1000+'0'; S640K1_levels[n].contacts[i].R[1]=(temp%1000)/100+'0'; S640K1_levels[n].contacts[i].R[2]=(temp%100)/10+'0'; S640K1_levels[n].contacts[i].R[3]=temp%10+'0'; } S640K1_levels[n].contacts[i].R[4]='\0'; if(temp<R_ref) { LCD_DrawFullCircle(S640K1_levels[n].contacts[i].point_coordinate[0],S640K1_levels[n].contacts[i].point_coordinate[1],5,Green,0x01); } else { LCD_DrawFullCircle(S640K1_levels[n].contacts[i].point_coordinate[0],S640K1_levels[n].contacts[i].point_coordinate[1],5,Red,0x01); } LCD_str(S640K1_levels[n].contacts[i].value_coordinate[0], S640K1_levels[n].contacts[i].value_coordinate[1],S640K1_levels[n].contacts[i].R,32,Blue2, Black); if(S640K1_levels[n].contacts[i].flag_last==1) { ADC_V_Restart(); ADC_V_DMA_Config(); while(!DMA_GetFlagStatus(ADC_V_DMA_Flag)); p=Get_ADC_V_Value();*p=6*(*p); S640K1_levels[n].level_V[0]=*p/10000+'0'; if(S640K1_levels[n].level_V[0]=='0') { S640K1_levels[n].level_V[0]=' '; } S640K1_levels[n].level_V[1]=(*p%10000)/1000+'0'; S640K1_levels[n].level_V[2]='.'; S640K1_levels[n].level_V[3]=(*p%1000)/100+'0'; S640K1_levels[n].level_V[4]=(*p%100)/10+'0'; S640K1_levels[n].level_V[5]='V'; S640K1_levels[n].level_V[6]='\0'; LCD_str(671,304,S640K1_levels[n].level_V,32,Blue,Black); break; } i++; } }
void draw_s640k1(void) { LCD_Clear(Black); LCD_str(267,0,"测试型号:S640K1",32,Blue,Black); // LCD_str(0,32,"换向手柄",32,Blue,Black); LCD_str(128,224,"后零前制",32,Blue,Black); LCD_str(0,256,"402(403)",32,Blue,Black); LCD_str(0,288,"404(405)",32,Blue,Black); LCD_str(0,320,"405(404)",32,Blue,Black); LCD_str(0,352,"407(407)",32,Blue,Black); LCD_str(0,384,"406(406)",32,Blue,Black); LCD_str(0,416,"409(410)",32,Blue,Black); LCD_str(0,447,"410(409)",32,Blue,Black); // LCD_str(256,64,"401(401)",32,Blue,Black); // LCD_str(256,96,"401(401)",32,Blue,Black); // LCD_str(256,128,"401(401)",32,Blue,Black); LCD_str(256,352,"401(401)",32,Blue,Black); // LCD_str(256,192,"401(401)",32,Blue,Black); // LCD_str(256,224,"401(401)",32,Blue,Black); // LCD_str(256,256,"401(401)",32,Blue,Black); u8 n=0; for(n=0;n<7;n++) { LCD_DrawUniLine( 128, (272+32*n), 256, (272+32*n), Cyan); } for(n=0;n<4;n++) { LCD_DrawUniLine( (144+32*n), 256, (144+32*n), 479, Cyan); } LCD_DrawUniLine( 256, 272, 256, 464, Green); // LCD_str(384,64,"控制手柄",32,Blue,Black); LCD_str(176,32,"制动",32,Blue,Black); LCD_str(352,32,"零",32,Blue,Black); LCD_str(492,32,"牵引",32,Blue,Black); LCD_str(136,64,"1",32,Blue,Black); LCD_str(168,64,"3",32,Blue,Black); LCD_str(200,64,"6",32,Blue,Black); LCD_str(232,64,"9",32,Blue,Black); LCD_str(256,64,"12",32,Blue,Black); LCD_str(288,64,"15",32,Blue,Black); LCD_str(320,64,"17",32,Blue,Black); LCD_str(360,64,"0",32,Blue,Black); LCD_str(392,64,"*",32,Blue,Black); LCD_str(424,64,"3",32,Blue,Black); LCD_str(456,64,"6",32,Blue,Black); LCD_str(488,64,"9",32,Blue,Black); LCD_str(512,64,"12",32,Blue,Black); LCD_str(544,64,"15",32,Blue,Black); LCD_str(576,64,"17",32,Blue,Black); LCD_str(0,96,"422(415)",32,Blue,Black); LCD_str(0,160,"402(403)",32,Blue,Black); LCD_str(608,96,"414(416)",32,Blue,Black); LCD_str(608,144,"412(412)",32,Blue,Black); LCD_str(608,192,"413(413)",32,Blue,Black); for(n=0;n<4;n++) { LCD_DrawUniLine( 128, (112+32*n), 608, (112+32*n), Cyan); } for(n=0;n<15;n++) { LCD_DrawUniLine( (144+32*n), 96, (144+32*n), 224, Cyan); } LCD_DrawUniLine( 608, 144, 608, 176, Green); LCD_DrawUniLine( 128, 144, 128, 272, Green); for(n=0;n<43;n++) { LCD_DrawFullCircle( S640K1_POINTS[n][0], S640K1_POINTS[n][1], 5, Blue2, 1); } for(n=0;n<21;n++) { LCD_DrawFullRect( S640K1_TP[n][0], S640K1_TP[n][1], S640K1_TP[n][2], S640K1_TP[n][3], Blue2, 0); } //LCD_str(671,352,"保存结果",32,Blue2,Black); LCD_str(671,352,"自动模式",32,Blue2,Black); LCD_str(671,432,"退出实验",32,Red,Black); LCD_str(671,256,"级位电压",32,Blue,Black); }
void SetClock(char key) { // timer to avoid multiple key-presses: if (wait_timer > 0) { wait_timer--; } // enter/exit setup: if (key == '*' && wait_timer == 0) { setup = !setup; wait_timer = wait_interval; i = 0; num_str[0] = '\0'; } switch (setup) { case true: clock_master = false;// clock stopped // fill string with zeros: if (strlen(num_str) == 0) { strcpy(num_str, "000000"); } if (key != 0 && key != '*' && wait_timer == 0) // check for valid input { wait_timer = wait_interval; // reset timer num_str[i] = key; // save key input to string i++; } number = atol(num_str); // convert string to long // split into separate numbers: h = (number / 10000); m = ((number % 10000)/100); s = (number % 100); clockUpdate(h, m, s); // update if (i > 0) { LCD_goto(1,1); sprintf(save, "%02d:%02d:%02d", h, m, s); LCD_str(save); } else { LCD_goto(1,1); LCD_str("--:--:--"); } // check if hour, minutes and seconds have been entered: if (i == 6) { // check if numbers are out of bounds: if (h > 23) { h = 0; m = 0; s = 0; clockUpdate(h, m, s); } if (m > 59) { h = 0; m = 0; s = 0; clockUpdate(h, m, s); } if (s > 59) { h = 0; m = 0; s = 0; clockUpdate(h, m, s); } setup = false; //exit setup } break; case false: // clock running clock_master = true; break; } }